Report the temperature with ESP8266 to MQTT
{::options coderay_line_numbers="table" /}
我最近接触了 ESP8266,这是一颗仅需 5 美元、内置 WiFi 且兼容 Arduino 的芯片。这意味着你现在可以用更低成本完成各种 DIY 项目。
在这篇教程中,我会带你一步步上手 ESP8266,读取温度和湿度数据,并上报到 MQTT,让 Home Assistant 可以接收这些数据。
最终搭建效果图(额外加了 2 个 LED 做装饰)
Home Assistant 会记录历史数值,并允许你将其用于自动化。
Components
我这次使用的是 Adafruit 的配件:
- Adafruit HUZZAH ESP8266 Breakout (assembly instructions)
- Adafruit HDC1008 Temperature & Humidity 传感器 Breakout Board (assembly instructions)
- MQTT server
除此之外,你还需要常见的硬件原型工具:面包板、若干导线、电烙铁和焊锡丝、串口 USB 线。
Alternatives
这篇文章发布后,HDC1008 已停产。你可以使用下面这些替代方案以及更新后的示例代码:
- DHT22 传感器 and updated sketch.
- BME280 传感器 and updated sketch.
Connections
在面包板上,将 ESP8266 与 HDC1008 按如下方式连接:
我这里使用的是 #2 和 14,你也可以在示例代码中自行配置。
Preparing your IDE
按照这些说明安装并准备 Arduino IDE,以便进行 ESP8266 开发。
安装完成后,打开 Arduino IDE,在菜单中选择 sketch -> include library -> manage libraries,安装以下库:
- PubSubClient by Nick 'O Leary
- Adafruit HDC1000
Sketch
完成上面的步骤后,你就可以开始了。
- 打开 Arduino IDE 并新建一个 sketch(
File->New) - 将下面的 sketch 复制粘贴到 Arduino IDE
- 调整第 6 到 14 行的参数,使其符合你的设置
- 可选:如果你要连接不需要用户名或密码的 MQTT 服务器,请调整第 62 行
- 为了让 ESP8266 接收新 sketch,需要进入上传模式。在 ESP8266 设备上按住 GPIO0 按钮,同时按下 reset 按钮。红色 LED 会半亮,表示已进入上传模式
- 在 Arduino IDE 中按下上传按钮
- 打开串口监视器(
Tools->Serial Monitor)查看设备输出
这个 sketch 会连接到你的 WiFi 网络和 MQTT broker。它每秒读取一次传感器的温度与湿度数据;当与上次上报值的差值大于 1 时,就会发送到 MQTT 服务器。发送到 MQTT broker 的消息会将 retain 设为 True,这意味着任何订阅该 MQTT 主题的客户端都会自动收到最近一次上报的数据。
Configuring Home Assistant
最后一步是把传感器数值接入 Home Assistant。你只需要让 Home Assistant 连接到 MQTT broker,并订阅对应的传感器主题。

