北屋教程网

专注编程知识分享,从入门到精通的编程学习平台

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中出现两个实体以及一个设备:



可以查看到数据变化:

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言