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

994481336 发表于 2021-2-28 12:42

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

ESP8266-01S制作智能开关,如何连接物理开关进行双控?
首先声明一下,我是纯小白,这个问题可能并不是一个复杂的问题,但是我真的解不出来,希望各位大佬能够帮助我解决问题,谢谢!
我用的板子是ESP-01S,接了一个继电器,进行对灯泡的在线控制,但是我想接入一个物理开关,实现物理开关和继电器双重控制灯泡,于是我用双控原理接入了物理开关:

但是这样的话就会有一个问题,因为通过网络控制灯的话,是通过改变继电器端进行控制,当开关接在L1时,通过小爱同学下达开关灯指令,灯的开关是正常的,如果将开关接在L2上,通过小爱同学下达开关灯指令,灯的反应是相反的(下达开灯指令则灯灭,下达关灯指令则灯亮)。
我的构思是:更改程序,当小爱收到开关灯指令,读取继电器状态,如果继电器在常开则打到常闭,如果继电器在常闭则打到常开(不管灯的开关情况,收到开灯或者关灯指令,直接把继电器打到相反位置),但是因为我是一个可怜的小白,不知道能不能在Arduino里把程序改一下实现,自己尝试着改了很久没有成功(因为我不懂语句应该怎么写只能蒙)。
希望大神们可以给我提出宝贵的建议,解决问题,麻烦大家了!:loveliness:

skygz 发表于 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 ? "on" : "off", num);
BlinkerAliGenie.print();
}

void ChangeRelay(int iState, uint8_t num)
{
if (num == 0){
    digitalWrite(GPIO_RELAY, iState);
}
oState = !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();
}

xiaoyao_mdj 发表于 2021-2-28 14:11

没玩过这个,我想可以用端口取反的命令试试,就是不管命令是开还是关,都把端口取反

994481336 发表于 2021-2-28 15:49

已经解决啦:lol:lol:lol

DreamLovely 发表于 2021-2-28 18:50

994481336 发表于 2021-2-28 15:49
已经解决啦

怎么解决的啊楼主,我也想学习一下

app-1 发表于 2021-2-28 19:47

994481336 发表于 2021-2-28 15:49
已经解决啦

停电再上电,会不会有亮灯的可能?:lol(假设灯关闭的)

xiaomeng 发表于 2021-3-1 08:37

994481336 发表于 2021-2-28 15:49
已经解决啦

楼主怎么解决的,可以分享学习一下吗:lol:lol

app-1 发表于 2021-3-1 15:32

skygz 发表于 2021-3-1 15:12
物理开关 改用 3线可双控用的开关,物理开关 不接 灯泡控制,灯泡交由 继电器控制

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

楼主画的图就是用esp8266取代传统双控开关中的一个,你的是两个开关都控制esp8266

13383975265 发表于 2021-3-26 11:49

skygz 发表于 2021-3-1 15:12
物理开关 改用 3线可双控用的开关,物理开关 不接 灯泡控制,灯泡交由 继电器控制

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

直接加到程序里?我不太会

13383975265 发表于 2021-3-26 11:51

994481336 发表于 2021-2-28 15:49
已经解决啦

怎么解决的?求告知
页: [1] 2
查看完整版本: ESP8266-01S制作智能开关,如何连接物理开关进行双控?