ESP8266-01S制作智能开关,如何连接物理开关进行双控?-Arduino中文社区 - Powered by Discuz!

Arduino中文社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 6687|回复: 12

[过期] ESP8266-01S制作智能开关,如何连接物理开关进行双控?

[复制链接]
发表于 2021-2-28 12:42 | 显示全部楼层 |阅读模式
ESP8266-01S制作智能开关,如何连接物理开关进行双控?
首先声明一下,我是纯小白,这个问题可能并不是一个复杂的问题,但是我真的解不出来,希望各位大佬能够帮助我解决问题,谢谢!
我用的板子是ESP-01S,接了一个继电器,进行对灯泡的在线控制,但是我想接入一个物理开关,实现物理开关和继电器双重控制灯泡,于是我用双控原理接入了物理开关:
121c4bc3123164720b6714cad31ef8f.jpg
但是这样的话就会有一个问题,因为通过网络控制灯的话,是通过改变继电器端进行控制,当开关接在L1时,通过小爱同学下达开关灯指令,灯的开关是正常的,如果将开关接在L2上,通过小爱同学下达开关灯指令,灯的反应是相反的(下达开灯指令则灯灭,下达关灯指令则灯亮)。
我的构思是:更改程序,当小爱收到开关灯指令,读取继电器状态,如果继电器在常开则打到常闭,如果继电器在常闭则打到常开(不管灯的开关情况,收到开灯或者关灯指令,直接把继电器打到相反位置),但是因为我是一个可怜的小白,不知道能不能在Arduino里把程序改一下实现,自己尝试着改了很久没有成功(因为我不懂语句应该怎么写只能蒙)。
希望大神们可以给我提出宝贵的建议,解决问题,麻烦大家了!
发表于 2021-3-1 15:12 | 显示全部楼层
本帖最后由 skygz 于 2021-3-1 15:17 编辑

物理开关 改用 3线可双控用的开关,  物理开关 不接 灯泡控制,  灯泡交由 继电器控制

物理开关  1,2,3    公共脚2 接 8266  另一个 GPIO,     1脚接高电平,  3脚接地
  
按代码处理, 不管 是 天猫精灵 还是Blinker APP 还是 实体物理开关  任一个开关状态  都不会影响了。。

//对于blinker   APP里的开关状态 由Blinker.attachHeartbeat(HeartBeat); 进行同步。
其它代码 按常规ChangeRelay(!digitalRead(GPIO_RELAY), 0);控制继电器即可。

bool KeySwitchStatus = false;
bool LastKeySwitchStatus = false; //实体按键 自锁状态
int GPIO_BTNSWITCH = 14;     //实体按键

void AlipowerState(uint8_t num)
{
  BlinkerAliGenie.powerState(oState[num] ? "on" : "off", num);
  BlinkerAliGenie.print();
}

void ChangeRelay(int iState, uint8_t num)
{
  if (num == 0){
    digitalWrite(GPIO_RELAY, iState);
  }
  oState[num] = !iState;
  HeartBeat();    //同步开关状态给blinker app
}

void ChangeSwitch(void){
      Serial.println(F("switch button state: tap"));
      ChangeRelay(!digitalRead(GPIO_RELAY), 0);  //继电器 IO取反
      AlipowerState(0);  //同步 开关状态给天猫精灵
      pinMode(GPIO_BTNSWITCH, INPUT_PULLUP);
      Blinker.delay(500);
}

void KeySwitch(void)     //机械开关动作判断
{
  KeySwitchStatus = digitalRead(GPIO_BTNSWITCH) == 0 ? false : true;
  if (KeySwitchStatus != LastKeySwitchStatus)
  {
    ChangeSwitch();
    LastKeySwitchStatus = KeySwitchStatus;
  }
}

void loop() {
    Blinker.run();
    //实体按钮,自锁 切换继电器状态
    KeySwitch();
}
发表于 2021-2-28 14:11 | 显示全部楼层
没玩过这个,我想可以用端口取反的命令试试,就是不管命令是开还是关,都把端口取反
 楼主| 发表于 2021-2-28 15:49 | 显示全部楼层
已经解决啦
发表于 2021-2-28 18:50 | 显示全部楼层

怎么解决的啊楼主,我也想学习一下
发表于 2021-2-28 19:47 | 显示全部楼层

停电再上电,会不会有亮灯的可能?(假设灯关闭的)
发表于 2021-3-1 08:37 | 显示全部楼层

楼主怎么解决的,可以分享学习一下吗
发表于 2021-3-1 15:32 | 显示全部楼层
skygz 发表于 2021-3-1 15:12
物理开关 改用 3线可双控用的开关,  物理开关 不接 灯泡控制,  灯泡交由 继电器控制

物理开关  1,2,3   ...

楼主画的图就是用esp8266取代传统双控开关中的一个,你的是两个开关都控制esp8266
发表于 2021-3-26 11:49 | 显示全部楼层
skygz 发表于 2021-3-1 15:12
物理开关 改用 3线可双控用的开关,  物理开关 不接 灯泡控制,  灯泡交由 继电器控制

物理开关  1,2,3   ...

直接加到程序里?我不太会
发表于 2021-3-26 11:51 | 显示全部楼层

怎么解决的?求告知
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|Archiver|手机版|Arduino中文社区

GMT+8, 2024-11-28 09:27 , Processed in 0.087981 second(s), 19 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表