智能家居 篇四:Home Assistant注册ESP32设备,监控室内温湿度
使用的硬件是ESP32-C3mini和dht11温湿度传感器
之前MQTT和Home Assistant都安装好了,万事俱备只差部署。
要在Home Assistant中对接ESP32其实十分简单,官方给了完整的文档和演示:mqtt
对我们来说,只需要在esp32代码中集成注册和信息发送两部分就可以了,使用arduino上传以下代码,wifi和mqtt服务器地址改成自己的,启动后就可以自动注册设备并开始工作,监控室内温湿度。
#include "WiFi.h"
#include "PubSubClient.h"#include "DHT.h"
#define DHTPIN 2
#define DHTTYPE DHT11
#define WIFI_SSID "sunk"
#define WIFI_PASSWORD "915471697"
#define MQTT_SERVER "192.168.1.140"
DHT dht(DHTPIN, DHTTYPE);
WiFiClient wifiClient;
PubSubClient mqttClient(wifiClient);
void connectWifi() {
Serial.print("Connecting to WiFi...");
WiFi.begin(WIFI_SSID, WIFI_PASSWORD);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("Connected to WiFi");
}
void connectMQTT() {
mqttClient.setServer(MQTT_SERVER, 1883);
while (!mqttClient.connected()) {
Serial.print("Connecting to MQTT...");
if (mqttClient.connect("ESP32Client")) {
Serial.println("Connected to MQTT");
} else {
delay(5000);
}
}
}
void setup() {
Serial.begin(9600);
dht.begin();
connectWifi();
connectMQTT();
delay(1000);
String tempConfig = "{
"unique_id": "esp32_temperature_sensor1",
"name": "温度传感器1",
"state_topic": "home/esp32/temperature1",
"unit_of_measurement": "°C",
"device_class": "temperature",
"value_template": "{{ value_json.temperature }}",
"device": {
"identifiers": ["esp32_unique_identifier"],
"name": "ESP32环境传感器",
"manufacturer": "自定义制造商",
"model": "ESP32-DHT11",
"sw_version": "1.0"
}
}
";
mqttClient.publish("homeassistant/sensor/esp32/temperature1/config", tempConfig.c_str());
String humConfig = "{
"unique_id": "esp32_humidity_sensor1",
"name": "湿度传感器1",
"state_topic": "home/esp32/humidity1",
"unit_of_measurement": "%",
"device_class": "humidity",
"value_template": "{{ value_json.humidity }}",
"device": {
"identifiers": ["esp32_unique_identifier"],
"name": "ESP32环境传感器",
"manufacturer": "自定义制造商",
"model": "ESP32-DHT11",
"sw_version": "1.0"
}
}
";
mqttClient.publish("homeassistant/sensor/esp32/humidity1/config", humConfig.c_str());
}
void loop() {
if (!mqttClient.connected()) {
connectMQTT();
}
mqttClient.loop();
float humidity = dht.readHumidity();
float temperature = dht.readTemperature();
if (!isnan(humidity) && !isnan(temperature)) {
String tempPayload = "{"temperature":" + String(temperature) + "}";
String humPayload = "{"humidity":" + String(humidity) + "}";
mqttClient.publish("home/esp32/temperature1", tempPayload.c_str());
mqttClient.publish("home/esp32/humidity1", humPayload.c_str());
} else {
Serial.println("Failed to read from DHT sensor!");
}
delay(1000);
}
上传之后在mqtt中出现两个实体以及一个设备:
可以查看到数据变化:
作者声明本文无利益相关,欢迎值友理性交流,和谐讨论~
alonewoo
直接esphome
校验提示文案
期望氢气球
校验提示文案
alonewoo
直接esphome
校验提示文案
期望氢气球
校验提示文案