应用ESP8266控制433M无线遥控电动幕布
用ESPHome的Remote Receiver组件获取遥控器升、降、停分别对应的编码,然后用Remote Receiver组件定义升、降、停按键对应的编码,并集成到HomeAssistant。
家里的得力牌电动投影幕布是的433M单一频率无线遥控的,为把它加入HomeAssistant与投影仪、音响等实现联动控制,计划用万能的esp8266来模拟遥控器。
一、设计思路
用ESPHome的Remote Receiver组件获取遥控器升、降、停分别对应的编码(由于我的遥控器不是标准协议,只能通过逻辑分析仪自己解码),然后用Remote Receiver组件定义升、降、停按键对应的编码(详见:ESPHome — ESPHome),然后集成到HomeAssistant即可。
二、器件准备
1. ESP8266模块(ESP-01S)
2. 433M超外差发射模块、接收模块各1只
接收模块 发射模块
最好选择如图的超外差模块,抗干扰能力强。
3、esp8266烧写器
也可以用USB转TTL-CH340模块进行烧写,这里方便起见直接用了esp8266烧写器。
4. 逻辑分析仪
二、器件连接
CH340 | ESP8266 烧写模式 | ESP8266 工作模式 | 433M接收模块 | 433M发射模块 | 逻辑分析仪 |
3.3V | 3.3V | 3.3V | 5V | 5V | |
RX | TX(GPIO1) | ||||
TX | RX(GPIO3) | GPIO3 | DATA | ||
GND | GPIO0 | ||||
GND | GND | GND | GND | GND | GND |
GPIO2 | DATA | CH0 |
在Home Assistant安装ESPHome、向ESPHome添加Esp设备、给ESP设备刷新固件等过程参见《以DHT11、ESP8266为例介绍ESPHome在Home Assistant中的应用》一文,本文就不再赘述。
三、获取遥控器升降停操作发射的编码
首先给esp8266添加以下代码段(其它部分代码参见《以DHT11、ESP8266为例介绍ESPHome在Home Assistant中的应用》一文),并进行烧写。
remote_receiver:
pin: 2
dump: all
然后按上面的器件连接表把ESP8266(工作模式)、433M接收模块、逻辑分析仪连接起来,下载并安装逻辑分析仪软件(Logic analyzer software from Saleae),目前版本是Logic 2.4.9,进入软件会自动匹配连接逻辑分析仪。
设置好采样速度(一般2M就够用),点击右上角绿色按钮即可开始采样(为确保准确建议每次只对1个按钮进行采样),按下遥控器按钮,再停止采样,这样通道0上就会出现采样波形,由于有电磁干扰,即使未按下遥控按钮也会有波形。用鼠标滚轮可以放大和缩小波形,同时可以左右移动波形,找到遥控器按下的一段波形进行分析(相对于干扰波形,遥控器波形比较密,而且有规律)。
定义为“0”
定义为“1”
经分析发现,一个窄的高/低电平为333us,一个宽的高/低电平为685us,宽和窄基本呈倍数关系。控制码一般以一个较长的高电平开始,已一个较长的低电平结束,我们把一个窄的高电平接一个宽的低电平定义为0,把一个宽的高电平接一个窄的低电平定义为1,就可以将遥控器波形转化为二进制代码。
经分析,我的遥控器编码如下:
我的遥控器除停止码是发送1次“0110010001000101011001101001000101010101”外,上升是先发3个控制码“0110010001000101011001101001000100010001”,再发5个控制码校验码“0110010001000101011001101001000100011110”,注意他们的后4位,校验码的“1110”是控制码“0001”的反码,这是为了校验接收的发射码是否有误,下降也是类似的。实际模拟遥控的时候不发校验码,多发几次控制码也可以控制的。
四、用ESP8266发射编码模拟遥控器操作屏幕升降停
给esp8266添加以下代码段,并进行烧写。
remote_transmitter:
pin: 2
carrier_duty_percent: 100%
switch:
- platform: template
name: Screen up
turn_on_action:
- remote_transmitter.transmit_rc_switch_raw:
code: '0110010001000101011001101001000100010001' # 0x64 4566 9111
protocol:
pulse_length: 350
sync: [14, 4]
zero: [1, 2]
one: [2, 1]
repeat:
times: 5
wait_time: 7500us
- platform: template
name: Screen Stop
turn_on_action:
- remote_transmitter.transmit_rc_switch_raw:
code: '0110010001000101011001101001000101010101' # 0x64 4566 9155
protocol:
pulse_length: 350
sync: [14, 4]
zero: [1, 2]
one: [2, 1]
repeat:
times: 5
wait_time: 7500us
- platform: template
name: Screen down
turn_on_action:
- remote_transmitter.transmit_rc_switch_raw:
code: '0110010001000101011001101001000100110011' # 0x64 4566 9133
protocol:
pulse_length: 350
sync: [14, 4]
zero: [1, 2]
one: [2, 1]
repeat:
times: 5
wait_time: 7500us
然后按上面的器件连接表把ESP8266(工作模式)、433M发射模块连接起来。
五、将ESP设备集成到Home Assistant(略)
参见《以DHT11、ESP8266为例介绍ESPHome在Home Assistant中的应用》一文
五、参考文档
用Esphome发射和接收任意315/433MHz射频 - 『HomeAssistant』综合讨论区 - 『瀚思彼岸』» 智能家居技术论坛 - Powered by Discuz!
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)