本帖最后由 yaming1106 于 2018-8-4 14:44 编辑
原始需求
家里有一个小夜灯,遥控器控制的,遥控器很小,老是掉床底或就是找不到。hass已经装了好久,也没有正式使用起来,于是就想做一个红外遥控装灯里面去,用手机控制好了。
用到的模块:esp8266无线模块一个,红外编解码模块(空调不能控制,编码格式不同),DHT11温湿度传感器一个(方便知道房间的温湿度)。
原理:
esp8266 连接家里WiFi,然后连接上家里的mqtt服务,所有数据通过mqtt传输。
效果如下,美化面板啥的后面再说:
后面是程序代码,需要必备的知识
1. 了解串口如何通信,因为你需要录制遥控器的指令。
2. 了解如何配置hass mqtt,没有它所有的都不能工作。
下面是流程说明:
esp8266 wifi模块会使用默认wifi去连接,如果连接不上就打开ap,ip地址:192.168.4.1, ap: AP_HOME_NODE,然后设置wifi账号信息和mqtt服务器信息。
设置好之后重启设备。
开发工具使用:vscode, platformio
第一步把会扰乱录制的代码注释掉,录制遥控器编码。波特率:9600,格式16进制,应该会得到一个三位十六进制编码,发送前面添加 A1 F1,剩余说明查看红外编解码模块说明书。
红外模块 RX, TX 连接 esp8266的 1, 3 的RX, TX口,
温湿度连接esp8266的 io 2口。
void loop()
{
// Bleeper.handle();
// auto status = WiFi.status();
// bool isConnected = (status == WL_CONNECTED);
//if (isConnected) {
//connectMqtt();
//}else {
// delay(500);
if (swSer.available()) {
Serial.write(swSer.read());
}
if (Serial.available()) {
swSer.write(Serial.read());
}
// Serial.println("Wifi is not connect");
// }
}
连接wifi之后会输出相关mqtt topic,波特率 115200。
if (client.connect(nodeid, user, pass))
{
client.subscribe(node_heart_topic);
client.publish(node_status_topic, "online");
Serial.println(node_status_topic);
client.subscribe(node_switch_control_topic);
client.subscribe(node_10_control_topic);
client.subscribe(node_16_control_topic);
Serial.println(node_switch_control_topic);
Serial.println(node_10_control_topic);
Serial.println(node_16_control_topic);
}
提供两个topic, node_10_control_topic, node_16_control_topic,分别为10进制和16进制数据
具体代码如下附件
链接:https://pan.baidu.com/s/1q348du5CBZJ1F6vyQ_x7tw 密码:68uh
|