本帖最后由 lione95678 于 2020-2-24 14:32 编辑
小白教小白-利用esphome固件来做一个可以通过433/315射频遥控器来控制的开关(无需mqtt) 起因:家里原来的灯都是通过315射频开关来控制的,以前接入hass,都是通过nodemcu刷at固件配合串口转射频模块,并通过mqtt来实现,缺点:1)我这mqtt不稳定,运行时间长了以后会发神经,自动不定时发送信息,造成灯自动开关;2)hass无法反馈灯的状态。 论坛里有卖模块的,但是手里有好几块nodemcu esp8266的模块,所以一直想自己做。 这篇文章里有2种方式,文章中会指出问题(我自己也没有解决办法,后面请各位懂的朋友来指教),一个一个来。 第一种方法: 1、硬件: nodemcu esp8266一块,超再生射频接收模块(加一个弹簧天线)(很便宜的那种,我买的不到3元,如下图),4路继电器模块一个。nodemcu刷esphome固件(配置我另外会贴)
2、接线方式: 超再生射频接收模块有4个接口,正负极就不说了,当中2个针脚只使用1个,随便哪一个,连接nodemcu的一个pin脚(随意),我这里选择D1(esphome设置中相对应) 继电器模块正负极也不说了,信号针脚连接nodemcu的pin脚,我这里连了nodemcu的D5/D6/D7/D8(注意一下,我用的是高电平触发的继电器模块,我刷了esphome后,nodemcu默认是D3、D4、D9、D10是高电平,D8低电平,所以不能使用D3、D4、D9、D10针脚,D9和D10就是nodemcu板子上印刷的rx和tx) 3、使用 你先按我的yaml文件来刷固件,然后连接到hass,这时hass单独控制继电器模块是没有问题的,但射频遥控器不能用,你可以理解为没有配对,接下来,在esphome的网页上点击 “ SHOW LOGS” ,显示日志。 然后拿起你的射频遥控器,当你按下遥控器的按键是,esphome的日志页面会显示如下图:
这里,引号里面的的数值就是遥控器的信号代码,可能会出现好几个,长度也不一致,你选用最长的那个(你可以二进制转十六进制的工具试试,把这些数字转变为16进制,就是3组16进制英文或数字,比如110101010001000000000001就是D5 10 01)。 这时,你就可以将遥控器按键对应的信号代码复制到yaml文件中进行替换了。在yaml文件中,有这样一组二进制传感器的,我这里稍微解释一下: switch: - platform: gpio pin: D5 name: "jidianqi1" id: jidianqi1 binary_sensor: - platform: remote_receiver name: "woshideng1 rf xinhao" rc_switch_raw: code: '110101010001000000000001' protocol: 1 on_press: then: - switch.toggle: jidianqi1 remote_receiver: pin: D5 dump: - rc_switch tolerance: 50% filter: 200us idle:4ms buffer_size: 1kb 先看switch,这里是一个继电器开关,platform是gpio针脚,针脚是D5(我喜欢用D*,这样不用对比nodemcu的gpio针脚图),name是jidianqi1(这个随你喜欢,是显示在hass中的名称,注意有引号),id是 jidianqi1(也随你喜欢,注意没有引号),这个id在本例中必须有,用于后续esphome自动化中予以调用。 再看binary_sensor,二进制传感器,platform是 remote_receiver,这个不能更改,name是woshideng1 rf xinhao(随意取,注意有引号), rc_switch_raw:(这个不能改),id(这个需要改,根据我上面说的,你按了遥控器按键后esphome的日志文件中显示的收到的一组二进制信号代码,注意有单引号)。protocol:是1(我是按照我的理解,因为我的esphome中收到的遥控器代码是这么显示的)。on_press:(这个是启用自动化,意思是当传感器是on状态下,启用下面的自动化),then不去管它,- switch.toggle: jidianqi1(意思就是切换id为jidianqi1的switch的状态) 我就是再后面加了一个传感器的自动化操作。 说一下remote_receiver:,这个我就不多说了,esphom的页面有,参照上面那个网址 方法一就这样了,说一下优缺点,优点就是射频模块价格便宜,缺点就是1、当我按下遥控器按键后,实际上我可能一下子收到多个相同的代码,或者说当你按一下遥控,实际上遥控器发射了多次信号,这时二进制传感器会多次打开关闭,造成继电器也多次触发。同理,当长按遥控器时,也会造成这个问题。这个问题要请懂的朋友们来指点一下了,到底是esphome中接收射频信号中的设置问题还是其他问题,我不知道是否可以变更自动化方式来解决,比如说,在3秒内无论收到多少次指定信号,我只触发一次继电器的操作。2、在这个射频模块我加了一个弹簧天线,但是接受距离还是不行,只有5米左右,不知道是个案还是这个模块的问题。 第二种方法: 因为第一种方法有了我上面说的缺点,我这个小白又暂时无法解决,后来想到自己还有几个射频接收带解码的4路点动自锁模块,就有了这个想法,这种模块是可以和多种芯片进行学习对码的,当完成对码后,按一下遥控器,模块其中一个针脚就会输出高电平,我就把这个模块当一个二进制传感器使用,也就是说,我按下射频遥控器,射频模块的一个针脚输出高电平,esphome这时认为对应针脚的二进制传感器是on或者off,触发后面自动化对继电器进行触发。 上射频带解码模块的图:
这个模块有7个针脚,除了dc+和gnd以外,还有4个输出高电平的针脚,还有一个是针脚是key,外接按键和led的,我们用不到。 针脚连接方面,正负极不说了,射频模块的out1-out3我分别接了nodemcu的D1/D2/D5,老样子,D3、D4、D9、D10因为默认为高电平我没有用它,继电器的3个信号针脚我接了nodemcu的D6/D7/D8。 射频模块方面,我设置的是自锁模式,也就是说当按一下遥控器,模块针脚对应一直输出高电平,只有再一下遥控器,模块对应针脚输出低电平。 esphome的yaml设置中,我把二进制传感器的自动化设置成,当传感器on时,继电器为开,传感器为off时,继电器关。 方法二的优点是:没有了方法一的缺点,不会因为长按按键造成继电器自动多次切换,而且距离方面没有问题,接在nodemcu上我没有测试(手头没有弹簧天线了),不过我以前用过这个模块焊接好弹簧天线后,接在3楼电梯的按键上,可以从地下车库遥控到3楼的射频模块,使用那种普通的桃木四键遥控器。 缺点:这样的接法很占用nodemcu的针脚,而且我的nodemcu刷了esphome后,D3/4/D9/D10默认高电平,只能接继电器用,不能接在射频模块上。另外这个射频模块只有4个输出针脚,最多只能控制4个继电器了。我原来是一个6键遥控器,其中4个键是对应4个灯,还有2个键是一键全开和一键全开,现在不行了。 所以如果有朋友可以解决第一种方案的缺点的话,还是第一种方案好。 下面分别放上2种方案的esphome的yaml代码
|