通过esphome转发rf 433/315射频遥控 起因: 家里小区的门禁,是可视对讲门铃,并通过室内的对讲机(有触摸屏的)打开门禁,并开启电梯到家中所在楼层,前段时间室内的对讲机坏了,物业说要厂家维修,费用600,且维修后不再另行计算保修。一气之下买了个360 的可视门铃(不会接入homeassistat,如有大侠会,请指教),墙上挂了个很长时间不用的安卓平板,来当可视门铃。但是结果是来人了要亲自到楼下接人。 后来在底楼的门禁开关和电梯按钮上分别安装个433mhz的接收器,用rf遥控器来遥控开门和开电梯,但总觉得不方便。(射频遥控器距离不行,要先跑到窗口按门禁的遥控),所以就用1个射频转串口的模块加一个nodemcu(刷AT固件),来转发433mhz信号。但是我以前用AT固件,一个nodemcu只能用来做射频的透传,不会接其他设备了,总觉得有点浪费。后来看到了esphome固件,就萌发了用esphome来转发的念头。 以下是小白教小白的教程,很多想法自己也不会,请见谅。 一、先说问题: 1)我除了串口转射频的433/315收发模块外,还买了那种很便宜的超再生模块(串口转射频的太贵,30元左右了,超再生的便宜,一对才3元),但是在实际esphome的使用中,只能进行射频的接收,射频的发射操作无论如何都不行,所有对发射部分就只能使用串口转射频的了。 2)我的实际操作中,除了转发433/315操作全部通过esphome以外,其他自动化还是通过node-red来进行的,esphome的一些操作对我等小白来说还是有点难度,还是node-red简单。 二、使用的硬件 2)超再生射频接收模块一块(发射模块买了不会用),下图中左边的是接收模块,右边是发射模块,另外需买相对应的天线。 3)射频转串口发射模块一块,不放图了,我以前有一个收发模块,本次只用它的发射功能,下图是收发模块 备注:原先有打算直接esphome用UART总线来控制这个模块的射频信号转发,但只搞懂了发送信号,UART总线接收信号搞不懂,也不打算搞清楚了,因为这个模块有点贵,有时间还是继续搞好超再生模块的发射把。 4)低功耗的433接收开关一个,选择这个,是因为大门门禁的开关处无电源,我用一个18650的锂电池供电,现在用了一个月了,电池还没有用完,我不清楚其他射频接收开关耗电怎么样。但是这个玩意挺贵的,18.5元(含运费) 三、硬件的接线 我就不放图了,原先没拍,搞门禁开关的时候偷偷摸摸的,怕物业不允许。 1)低功耗的433接收开关接线方式:V+连接电池正极,V-连接电池负极,COM连接门禁开关的一头,NO或者NC连接门禁开关的另一头(需要看你的门禁开关是常闭的还是常开的) 2)超再生模块有4根针,正负极不说了,当中2根针随便哪一根,连接nodemcu的相关针脚,看你esphome是如何设置的,我的esphome设置的D6(详间我后面放出来的esphome的yaml文件),所以连接的是D6 3)射频转串口发射模块,正负极不说了,模块的rx连接nodemcu的相关针脚,我在esphome中,UART总线设置的tx针脚是D7,就连接D7(我的模块没用接收功能,所以模块的tx没有使用),反正就是模块的tx接nodemcu的rx,模块的rx接nodemcu的tx。 四、esphome的设置我就不单独写了,我会放上yaml文件,相关的注释也写进去了。 一些解释: 1)串口转射频的收发模块真的很不错,用一个usb转ttl的模块(gh340),接上这个模块,用串口软件sscom可以很好的得到rf射频遥控的编码,是十六进制的,比如按下一个遥控器按键,串口软件可以看到一串16进制的编码,比如:FD FF 01 02 48 DF ,(这里FD是帧头,FF是遥控器地址2,01是遥控器地址1,02是遥控器的按键值,48是震荡参数,DF是帧尾)得到这个数值后,我就可以在yaml文件的uart 开关中的代码中,输入0xFD 0x03 0xFF 0x01 0x02 0x60 0xDF(解释:0x你在得到的数字在都加入,FD是你都到的帧头,这个不会变,后面加上一个03,是指信号维持时间,个人理解模拟按了3次遥控,后面的FF、01、02是你刚才的到遥控器数值,60是震荡参数,替换掉你原先得到了48或者其他,DF是帧尾,不变)来模拟这个按键了。这个有点拗口,看不懂的话请参考卖家的网页https://item.taobao.com/item.htm?spm=a1z09.2.0.0.71db2e8d6DIirN&......u=b1leq7av3b64
2)上面的数值中,FF、01、02实际上通过esphome和超再生模块也可以得到,当你按照我下面的yaml文件刷好esphome固件后,如果按下遥控器,你会在esphome网页的showlogs页面中,看到如下图的一段,其中,code:11111*******,这一段数值,就是二进制的,转成16进制,就是FF、01、02了。
|