将ESP8266的温度报告给MQTT

注释

{::选项Coderay_line_numbers =“ table” /}

我最近了解到ESP8266,这是一个5美元的芯片,其中包括WiFi,并且是Arduino兼容的。这意味着您所有的DIY项目现在都可以以一小部分价格完成。

在本教程中,我将介绍如何与ESP8266一起使用,获取温度和湿度,并将其报告给MQTT,家庭助理可以在这里接收它。必威是什么

最终设置的图片(+ 2 LED用于装饰)

必威是什么家庭助理将跟踪历史价值,并允许您将其集成到自动化中。

成分

我一直在使用Adafruit进行购物:

除此之外,您还需要通常的硬件原型设备:面包板,一些电线,焊接铁 +电线,串行USB电缆。

备择方案

自从本文发表以来,HDC1008已停止。更新的草图可用于以下替代方案:

连接

在面包板上,将以下连接从ESP8266到HDC1008:

ESP8266 HDC1008
gnd gnd
3V Vin
14 SCL
#2 SDA

我选了#214我自己,您可以在草图中配置它们。

准备您的IDE

跟随这些说明关于如何安装和准备ESP8266开发的Arduino IDE。

完成安装后,打开Arduino IDE,在菜单中单击草图- >包括库- >管理库并安装以下库:

  • nick’o Leary的pubsubclient
  • Adafruit HDC1000

草图

如果您遵循了先前的步骤,那么您都将设定。

  • 打开Arduino IDE并创建一个新草图(文件- >新的
  • 将以下草图复制到Arduino IDE
  • 调整值第6-14行以匹配您的设置
  • 可选:如果要连接到没有用户名或密码的MQTT服务器,请调整第62行。
  • 要使ESP8266接受我们的新草图,我们必须将其置于上传模式。在ESP8266上,在按下重置按钮时,请按按下GPIO0按钮。红色LED将发光一半明亮,以表明它处于上传模式。
  • 按Arduino IDE中的上传按钮
  • 打开串行监视器(工具- >串行监视器)查看设备的输出

此草图将连接到您的WiFi网络和MQTT代理。它将每秒读取传感器的温度和湿度。如果自上次报告的值以来的差异为1,它将报告给MQTT服务器。向MQTT经纪人的报告发送,保留设置为真的。这意味着连接到MQTT主题的任何人都会自动通知最后一个报告的值。

#包括#包括#包括#包括#define wifi_ssid“您的wifi ssid” #define wifi_password“ wifi密码”#define mqtt_server“ your_mqtt_server_host” #define mqtt_user“ your_username” #define mqtt_password“ your_password”#Define湿度_TOPIC“传感器/湿度” #Define温度_TOPIC“传感器/温度”有效的Espclient;pubsubclient客户((Espclient);adafruit_hdc1000HDC=adafruit_hdc1000();空白设置(){系列开始((115200);setup_wifi();客户SetServer((mqtt_server,,,,1883年);//设置SDA和SDL端口金属丝开始((2,,,,14);//启动传感器如果((HDC开始()){系列println((“找不到传感器!”);尽管((1);}}空白setup_wifi(){延迟((10);//我们首先连接到WiFi网络系列println();系列打印((“连接到”);系列println((wifi_ssid);无线上网开始((wifi_ssid,,,,wifi_password);尽管((无线上网地位()!=wl_connected{延迟((500);系列打印((“。”);}系列println((“”);系列println((“连接WiFi”);系列println((“IP地址: ”);系列println((无线上网localip());}空白重新连接(){//循环直到我们重新连接尽管((客户连接的()){系列打印((“尝试MQTT连接...”);//尝试连接//如果您不想使用用户名和密码,请将下一行更改为// if(client.connect(“ ESP8266Client”)){如果((客户连接((“ ESP8266Client”,,,,mqtt_user,,,,mqtt_password)){系列println((“连接的”);}别的{系列打印((“失败,RC =”);系列打印((客户状态());系列println((“在5秒内重试”);//等待5秒之前重试延迟((5000);}}}布尔签到((漂浮newValue,,,,漂浮prevvalue,,,,漂浮麦克斯迪夫{返回伊斯南((newValue&&((newValue<prevvalue-麦克斯迪夫||newValue>prevvalue+麦克斯迪夫);}lastmsg=0;漂浮温度=0.0;漂浮=0.0;漂浮差异=1.0;空白环形(){如果((客户连接的()){重新连接();}客户环形();现在=米利斯();如果((现在-lastmsg>1000{lastmsg=现在;漂浮newtemp=HDC读取器();漂浮Newhum=HDC读书();如果((签到((newtemp,,,,温度,,,,差异)){温度=newtemp;系列打印((“新温度:”);系列println((细绳((温度)。C_str());客户发布((温度_TOPIC,,,,细绳((温度)。C_str(),,真的);}如果((签到((Newhum,,,,,,,,差异)){=Newhum;系列打印((“新的湿度:”);系列println((细绳(()。C_str());客户发布((湿度_TOPIC,,,,细绳(()。C_str(),,真的);}}}

配置家庭助理必威是什么

最后一步是将传感器值集成到家庭助理中。必威是什么这可以通过设置家庭助理来连接到MQTT经纪人并订阅传感器主题来必威是什么完成。

mqtt经纪人your_mqtt_server_host用户名您的用户名密码你的密码传感器平台mqtt姓名温度”state_topic传感器/温度”QoS0测量单位ºC”传感器2平台mqtt姓名湿度”state_topic传感器/湿度”QoS0测量单位%”