Home AssistantInternet of ThingsSmartHome
Bài 4: Đọc dữ liệu nhiệt độ, độ ẩm từ DHT 11 hiển thị lên Home Assistant
Nối tiếp bài viết trước ,ở bài viết này lophocvui.com sẽ hướng dẫn bạn đọc dữ liệu từ cảm biến DHT 11 lên Home Assistant hiển thị giá trị và biểu đồ trạng thái nhiệt độ ,độ ẩm cho ngôi nhà thông minh. DHT 11thiết bị cảm biến giúp ta nhận biết được trạng thái nhiệt độ, độ ẩm của môi trường nơi chúng ta nghiên cứu.
I/Yêu cầu phần cứng
-
Những linh kiện cần chuẩn bị
- Node MCU
- DHT 11 (hoặc DHT 22)
- Dây kết nối
- Nguồn 5 VDC
- Board test
-
Sơ đồ kết nối
II/Cấu hình cho Home Assistant
Bạn hãy làm theo các bước ở bài viết trước để kết nối Home Assistant với dịch vụ MQTT ( xem tại đây)
Sau khi kết nối thành công với MQTT, để hiện thị nhiệt độ ,độ ẩm ta thêm đoạn code sau vào file configuration.yaml :
1 2 3 4 5 6 7 8 9 |
sensor: - platform: mqtt name: "Temperature" state_topic: "sensor/temperature" unit_of_measurement: '°C' - platform: mqtt name: "Humidity" state_topic: "sensor/humidity" unit_of_measurement: '%' |
Các biến cấu hình :
platform : phương thức truyền nhận ( ở đây là MQTT)
name : Tên hiện thị lên Home Assistant
unit_of_measurement : đơn vị đo lường
state_topic : chủ đề MQTT được đăng kí để nhận các giá trị cảm biến
Bạn có thể xem các biến cấu hình đầy đủ tại đây: https://www.home assistant.io/components/sensor.mqtt/
Bạn lưu lại file và reset lại Home Assistant , kết quả ta được như hình :
III/ Code Cho Node MCU
Ta nạp vào đoạn code sau đây cho Node MCU :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 |
#include <ESP8266WiFi.h> #include <PubSubClient.h> #include "DHT.h" #define DHTTYPE DHT11 // DHT 11 // Cập nhật thông tin // Thông tin về wifi #define ssid "YourWifi" #define password "YourPassword" // Thông tin về MQTT Broker #define mqtt_server "hassio.local" // Thay bằng địa chỉ IP #define mqtt_topic_pub "test" //Giữ nguyên nếu bạn tạo topic tên là demo #define mqtt_topic_sub "test" #define mqtt_user "lophocvui" //Giữ nguyên nếu bạn tạo user là lophocvui và pass là 123456 #define mqtt_pwd "123456" const uint16_t mqtt_port = 1883; //Port của MQTT WiFiClient espClient; PubSubClient client(espClient); const int DHTPin = D4; //Đọc dữ liệu từ DHT11 ở chân D4 trên mạch esp8266 long lastMsg = 0; char msg[50]; int value = 0; // Timers auxiliar variables long now = millis(); long lastMeasure = 0; // Thiet Lap cam bien DHT. DHT dht(DHTPin, DHTTYPE); void setup() { Serial.begin(115200); setup_wifi(); client.setServer(mqtt_server, mqtt_port); dht.begin(); } // Hàm kết nối wifi void setup_wifi() { delay(10); Serial.println(); Serial.print("Connecting to "); Serial.println(ssid); WiFi.begin(ssid, password); while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); } Serial.println(""); Serial.println("WiFi connected"); Serial.println("IP address: "); Serial.println(WiFi.localIP()); } // Hàm reconnect thực hiện kết nối lại khi mất kết nối với MQTT Broker void reconnect() { // Chờ tới khi kết nối while (!client.connected()) { Serial.print("Attempting MQTT connection..."); // Thực hiện kết nối với mqtt user và pass if (client.connect("ESP8266Client",mqtt_user, mqtt_pwd)) { Serial.println("connected"); // Khi kết nối sẽ publish thông báo client.publish(mqtt_topic_pub, "ESP_reconnected"); // ... và nhận lại thông tin này client.subscribe(mqtt_topic_sub); } else { Serial.print("failed, rc="); Serial.print(client.state()); Serial.println(" try again in 5 seconds"); // Đợi 5s delay(5000); } } } void loop() { if (!client.connected()) { reconnect(); } if(!client.loop()) client.connect("ESP8266Client"); now = millis(); // Publishes new temperature and humidity every 30 seconds if (now - lastMeasure > 1000) { lastMeasure = now; float h = dht.readHumidity(); float t = dht.readTemperature(); // Check if any reads failed and exit early (to try again). if (isnan(h) || isnan(t) /*|| isnan(l)*/) { Serial.println("Failed to read from DHT sensor!"); return; } static char temperatureTemp[7]; dtostrf(t, 6, 2, temperatureTemp); static char humidityTemp[7]; dtostrf(h, 6, 2, humidityTemp); // Publishes Temperature and Humidity values client.publish("sensor/temperature", temperatureTemp); client.publish("sensor/humidity", humidityTemp); Serial.print("Humidity: "); Serial.print(h); Serial.print(" %\t Temperature: "); Serial.print(t); Serial.print(" *C "); Serial.print("\n "); } } |
Sau khi nạp code hãy xem kiểm tra ở cửa sổ Serial để xem NodeMCU đã kết nối được với Home Assistant hay chưa như hình :
Và trên trang Home Assistant sẽ hiển thị lên nhiệt độ , độ ẩm như hình
Như vậy ta đã hiển thị được thành công giá trị nhiệt độ ,độ ẩm lên Home Assistant ,để đẹp hơn ta có thể tạo một danh sách để hiện thị giá trị cảm biến trên Home Assistant .Ta thêm đoạn code sau vào file group.yaml :
1 2 3 4 5 6 7 |
sensor: name: Sensor icon: mdi:account-multiple view: no entities: - sensor.humidity - sensor.temperature |
Cấu hình đầy đủ cho file group.yaml bạn có thể xem tại đây
Kết quả ta được như hình :
Để hiện thị biểu đồ nhiệt độ độ ẩm ta tiếp tục thêm đoan code sau vào file configuration.yaml :
1 2 3 4 5 6 7 8 9 10 11 |
history_graph: gr1: name: Temperature entities: - sensor.temperature hours_to_show: 1 gr2: name: Humidity entities: - sensor.humidity hours_to_show: 1 |
Cấu hình chi tiết bạn có thể xem tại đây : https://www.home-assistant.io/components/history_graph/
Và đây là thành quả sau các bước cấu hình bên trên :
Như vậy ta đã thành công khi đọc dữ liệu từ cảm biết DHT 11 hiển thị lên Home Assistant , bạn cũng có thể thay DHT 11 thành các biến khác và làm tương tự để hiển thị giá trị . Qua đó có thể kiểm soát được nhiệt độ ,độ ẩm của từng phòng trong hệ thống nhà thông minh.
Mọi thắc mắc bạn có thể comment bên dưới mỗi bài viết
lophocvui.com chúc các bạn thành công !!!
—————————-
Chi tiết liên hệ:
Website: lophocvui.com
Hotline: 0971479145//0983811938
Fanpage:https://www.facebook.com/lophocvui.com/