当前位置:   article > 正文

ESP8266通过MQTT接入Home Assistant实践_esp8266 honeass

esp8266 honeass

      此前我在《用树莓派构建家庭智能家居控制中心》一文中介绍了如何在Home Assistant中集成MQTT,以便下一步集成个人DIY设备。本文将用WIFI模块ESP8266来DIY一个智能插座以控制灯的开关,并通过MQTT集成到Home Assistant,实现与小米、华为等厂商的智能家居设备和传感器联动。同理,也可将DIY的传感器集成到Home Assistant,并与其他智能家居设备联动。

一、设计思路

      通过ESP8266模块接入WIFI网络,并与MQTT服务器建立连接,在Home Assistant构建MQTT灯光开关控制实例,通过发布灯光的开/关状态和命令主题,来控制继电器吸合/释放,实现对灯光的开/关控制。

二、器件准备

    1. ESP8266模块(ESP-01S)

      

     2. 继电器模块

   

         该模块集成了5V转3.3V为ESP8266供电,因此电源可直接使用5V直流电。

    3. USB转TTL-CH340模块

        

         一定要将CH340模块的电压跳线调整到3.3V,以免写入程序时烧坏ESP8266模块。

    4. 直流5V电源,利旧5V 1A USB充电器

      

      我实际是暴力拆解了一个旧的原装苹果5V 1A充电器,苹果充电器集成度高,占用空间小,发热量也小,适合后期集成到插座里。 

三、烧写ESP8266

1. 连接CH340模块和ESP8266模块

      按照下表连接CH340模块和ESP8266模块:

esp8266(ESP-01S)

CH340

RX

TX

TX

RX

GND

GND

3.3V

3.3V

IO0

GND

      注意:IO0管脚接地为烧录模式,代码烧录完成后需要断开IO0,重新上电程序才能运行 。

具体详见:

ch340非一键下载电路烧录esp8266程序_lynch21的博客-CSDN博客_esp8266使用ch340c烧录

2. ESP8266开发环境搭建

      本文基于Arduino安装ESP8266开发环境,首先安装Arduino IDE环境,然后在Arduino IDE上“开发板管理”里安装设置esp8266库,还需在“加载库管理”里面新安装MQTT消息组件“PubSubClient”库,再安装CH340驱动程序,将上面已连接ESP8266模块的CH340插入电脑USB接口,在Arduino IDE设置好COM口,就可以开始编程测试了。具体详见:

esp8266开发入门教程(基于Arduino)——环境安装_柒壹漆的博客-CSDN博客_esp8266开发教程

3. 编写ESP8266通讯程序

程序如下:

  1. /*
  2. ESP8266连接MQTT,并订阅发布信息
  3. */
  4. #include <ESP8266WiFi.h>
  5. #include <PubSubClient.h>
  6. const char* ssid = "MyWIFI"; //设置Wi-Fi名
  7. const char* password = "123***"; //设置Wi-Fi密码
  8. const char* mqtt_server = "192.168.0.***"; //设置MQTT服务器地址
  9. WiFiClient espClient;
  10. PubSubClient client(espClient);
  11. long lastMsg = 0;
  12. char msg[50];
  13. int value = 0;
  14. int ledPin = 0; //设置ESP8266的GPIO0号脚为输出控制脚
  15. //连接wifi
  16. void setup_wifi() {
  17. delay(10);
  18. WiFi.begin(ssid, password);
  19. //等待WiFi连接
  20. while (WiFi.status() != WL_CONNECTED) {
  21. delay(500);
  22. Serial.print(".");
  23. }
  24. //wifi连接成功后输出成功信息
  25. Serial.println("");
  26. Serial.println("WiFi Connected!"); //显示wifi连接成功
  27. Serial.println(WiFi.localIP()); //返回wifi分配的IP
  28. Serial.println(WiFi.macAddress()); //返回设备的MAC地址
  29. Serial.println("");
  30. randomSeed(micros());
  31. }
  32. //回调函数
  33. void callback(char* topic, byte* payload, unsigned int length) {
  34. Serial.print("Message arrived[");
  35. Serial.print(topic);
  36. Serial.print("] ");
  37. for (int i = 0; i < length; i++) {
  38. Serial.print((char)payload[i]);
  39. }
  40. Serial.println();
  41. // 通过接收的信息 '1'或'0'来控制开或关
  42. if ((char)payload[0] == '1') {
  43. digitalWrite(ledPin, HIGH); //接收到'1'GPIO0输出高电平
  44. Serial.println("HIGH");
  45. } else {
  46. digitalWrite(ledPin, LOW); //接收到'0'GPIO0输出低电平
  47. Serial.println("LOW");
  48. }
  49. }
  50. void reconnect() {
  51. String clientId = "ESP-01A-711"; //设备名
  52. if (client.connect(clientId.c_str())) { //尝试连接MQTT
  53. Serial.println("MQTT connect success."); //显示MQTT连接成功
  54. client.subscribe("LED_Switch"); //设置主题
  55. client.publish("LED_Switch", "0"); //向主题发送消息
  56. } else {
  57. delay(5000); //等待5秒重试
  58. }
  59. }
  60. void setup() {
  61. pinMode(ledPin, OUTPUT); //设置GPIO0为输出脚
  62. digitalWrite(ledPin, LOW); //GPIO0初始输出低电平
  63. Serial.begin(115200);
  64. setup_wifi(); //连接wifi
  65. client.setServer(mqtt_server, 1883); //设置MQTT服务器
  66. client.setCallback(callback); //设置回调函数
  67. }
  68. void loop() {
  69. if (!client.connected()) {
  70. reconnect(); //尝试连接MQTT服务器并接收信息
  71. }
  72. client.loop();
  73. }

      完成程序编译上传后,打开Arduino IDE串口监视器,看程序是否能正常连接WIFI和MQTT服务器,并开始监听LED_Switch主题。如以上正常,在Home Assistant的MQTT集成中向LED_Switch主题发布测试数据,打开订阅监听,同时查看串口监视器,看ESP8266程序能否正常接收MQTT发布的主题信息(“0”关闭灯,“1”打开灯)。

4. 连接测试

      将ESP8266插入继电器模块,给继电器模块加5V直流电,在Home Assistant的MQTT集成中向LED_Switch主题发布测试数据,继电器将根据发布的LED_Switch主题“0/1”状态进行释放或吸合动作。

四、配置Home Assistan

      在configuration.yaml文件中添加以下配置,以添加MQTT实例: 

  1. # add light
  2. mqtt:
  3. light:
  4. # Device name
  5. - name: "Bookcase_Light"
  6. # State topic
  7. state_topic: "LED_Switch"
  8. # Command topic
  9. command_topic: "LED_Switch"
  10. # Command type
  11. payload_on: "1"
  12. payload_off: "0"
  13. # unique_ID
  14. unique_id: "LED1"
  15. # optimistic set
  16. optimistic: false

      保存后在Home Assistant重新加载MQTT集成,如没有报错信息,MQTT集成将增加一个“Bookcase_light”实例。如没有报错也没有出现实例,请检查configuration.yaml文件格式是否正确,或重启Home Assistant服务器。

五、组装集成和测试

      打开“Bookcase_light”实例,在“自动化”中设置自动化应用场景,触发条件、环境条件、动作等可在Home Assistant集成的所有设备、实例里选择,为简单起见,本次测试仅设置了晚上20点打开,23点关闭的场景:

       一切测试正常后,将ESP8266模块、继电器模块、利旧的USB充电器等,以及带开关的电源插座,安装到明装插座盒中,按下图完成线路连接。

 

       实物如下图:

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小丑西瓜9/article/detail/455631
推荐阅读
相关标签
  

闽ICP备14008679号