1.8 MQTT Aedes và Dashboard trong node-redMQTT là một giao thức truyền tin đơn giản được thiết kế cho những thiết bị IoT sửdụng băng thông thấp và ứng dụng thích hợp cho các ứng dụng IoT
Trang 1ĐIỀU KHIỂN VÀ GIÁM SÁT NHÀ
THÔNG MINH, CÓ CODE
Trang 2MỤC LỤC
- DANH MỤC CÁC HÌNH VẼ
Trang 3Hình 4.1: Lưu đồ giải thuật
Trang 4DANH MỤC CÁC BẢNG BIỂU
Trang 5
DANH MỤC CÁC TỪ VIẾT TẮT
IDE Integrated Development Environment
MQTT Message Queue Telemetry Transport
UART Universal Asynchronous Receiver Transmitter
ESP Electronic Stability Program
V
Volt
Trang 6CHƯƠNG 1 TỔNG QUAN VỀ HỆ THỐNG IOT ĐIỀU KHIỂN VÀ
GIÁM SÁT NHÀ THÔNG MINH
Hình 1.1: Hình giới thiệu Smart Home
Đề tài này sử dụng những thiết bị điện tử như vi điều khiển, cảm biến nhiệt độ, độẩm, Để điều khiển những thiết bị gia dụng trong ngôi nhà Đồng thời giám sát khôngkhí, nhiệt độ, độ ẩm,… và điều chỉnh chúng sao cho chúng ta cảm thấy thoải mái nhất.1.2 Mục đích nghiên cứu
Đề tài này được nghiên cứu nhằm mục đích mang lại sự thoái mái và tiện ích trongngôi nhà người sử dụng Đồng thời có thể bảo vệ sức khỏe cho gia đình chúng ta, cũngnhư giám sát và điều khiển tình trạng ngôi nhà thông qua những chiếc smartphone.1.3 Đối tượng nghiên cứu
- Giao thức MQTT
- Lập trình node-red
Trang 7- Mạch thu phát Wifi ESP32
ẩm trên màn hình giao diện dashboard của node-red
Trang 8CHƯƠNG 2 CƠ SỞ LÝ THUYẾT
Hình 2.1: Hình Bo phát triển ESP32 DOIT Devkit V1
ESP32 có chip CP2102 là cầu nối chuyển đổi USB sang UART, có 2 nút nhấn EN
và BOOT để thiết lập trạng thái của ESP32 như nạp chương trình hay reset Môitrường lập trình của ESP32 cũng khá đa dạng như: Arduino IDE, Espressif IDF (IoTDevelopment Framework), Micropython, LUA, JavaScript Trong đề tài này, chủ yếulập trình cho ESP32 là Arduino IDE và bo mạch ESP32 DEVKIT DOIT cùng sử dụngchip ESP-WROOM-32
Trang 9Bảng 2.1: Thông số kỹ thuật ESP32
Sơ đồ chân ESP32 phiên bản 30 chân:
Hình 2.2: Sơ đồ chân ESP32 Devkit DOIT
1.7 Node-red ?
Chương trình node-red là một chương trình hỗ trợ lập trình kết nối các thiết bị, dịch vụtrực tuyến, APIS lại với nhau theo cách mới lạ và dễ dàng Node-red có một trình soạnthảo giúp kết nối đơn giản hơn với các node trong các palelte chỉ bằng cách kéo và thảchuột
Trang 10Hình 2.3: Biểu tưởng node-red
Giao diện của trình soạn thảo này chia thành bốn phần: Tiêu đề (Header), Danh sáchcác node (Palette), Không gian lập trình (Workspace), thanh công cụ bên phải(SideBar)
Hình 2.4: Giao diện node-red
Trang 111.8 MQTT Aedes và Dashboard trong node-red
MQTT là một giao thức truyền tin đơn giản được thiết kế cho những thiết bị IoT sửdụng băng thông thấp và ứng dụng thích hợp cho các ứng dụng IoT Cho phép các thiết
bị IoT có thể nhận và phát các dữ liệu hoặc gửi các lệnh điều khiển từ các thiết bị IoTthông qua các lệnh Publish/ Subcribe Và để sử dụng được MQTT phải có MQTTBroker (có tác dụng như một server) ở trong node-red có một node tạo được đó làMQTT Aedes, nó có tất cả các chức năng của MQTT và cho phép gửi và nhận tín hiệu
mà không cần kết nối mạng Để phát (Publish) hoặc nhận (Subcribe) phải đảm đảothành phần đó là topic và messages Topic là đóng vai trò như nơi cần gửi và nhận tínhiệu Messages là dữ liệu trao đổi giữa các thiết bị IoT hoặc lệnh điều khiển
Hình 2.5: Cách thức hoạt động của MQTT
Dashboard là một chức năng vô cùng hữu ích của node-red là giao diện được tạo rabởi các node nhằm hiển thị ra các thông số như nhiệt độ, độ ẩm,… hay các nút nhấnhoặc công tắc để điều khiển các thiết IoT trên màn hình web Người lập trình có thểsáng tạo, chỉnh sửa hay thêm bớt để có một giao diện ưng ý nhất Dashboard có thểhiển thị trên các thiết bị như laptop hoặc smartphone
Trang 12Hình 2.6: Giao diện dashboard của node-red
2.1 Arduino IDE
Phần mềm Arduino IDE là một phần mềm viết và nạp chương trình vào những bomạch Arduino Môi trường này cho phép sử dụng cả ngôn ngữ C và C++ để viếtchương trình Không những thế, phần mềm có nhiều thư viện có sẵn và có khảnăng thêm thư viện một cách dễ dàng Do đó, phần mềm có thể viết và nạp nhiềulại bo mạch khác nhau
Hình 2.7: Giao diện chính phần mềm Arduino IDE
Trang 13Arduino bao gồm các thành phần chính:
- Verify: kiểm tra chương trình
- Upload: Nạp chương trình vào bo mạch
- Menu bar: thanh gồm các chức file, edit, sketch,…
- Workspace: vùng viết chương trình
1.9 Cảm biến nhiệt độ và độ ẩm DHT11
Cảm biến DHT11 là cảm biến để đo lường nhiệt độ và độ ẩm xung quanh nó và trảgiá trị sang tín hiệu điện Cảm biến này được ứng dụng rất nhiều ở trong thực tế: theodõi tình trạng ngôi nhà, giám sát trạng thái của cây, thời tiết,…
Hình 2.8: Cảm biến nhiệt độ và độ ẩm DHT11
Như chúng ta đã biết, định luật Boyle – Mariotte có nói như sau: một lượng khí lýtưởng n không đổi ở nhiệt độ T không đổi thì tích số giữa áp suất p và thể tích V làmột hằng số (n = const, T = const, pV = const) Ta có phương trình khí lý tưởng: pV =nRT
Thông số kĩ thuật:
- Điện áp hoạt động bình thường: 3.3 ~ 5V
- Thang đo nhiệt độ: 0 – 50oC ( sai số ± 2 oC )
- Thang đo độ ẩm: 20 – 90% RH (sao số 5% RH)
- Tần số: cứ 1 giây đo 1 lần
Trang 14CHƯƠNG 3 THIẾT KẾ VÀ THI CÔNG
Trang 15Hình 3.2: Mô hình hoàn chỉnh của đề tài
Hình 3.3: Hình mạch phần cứng
Trang 16Hình 3.4: Sơ đồ đấu nối dây
1.12 Thiết kế giao diện điều khiển dashboard trên node-red
Để thiết kế giao diện dashboard cần phải tải thư viện các node dashboard Cách tải thưviện: Manage Palette � Mục Install � tìm và cài đặt node-red-dashboard Như vậychúng ta sẽ có đầy đủ các chức năng để thiết kế giao diện dash board theo ý muốn.Trong đề tài này sử dụng chủ yếu là công tắc và thang đo nhiệt độ và độ ẩm
Hình 3.5: Lập trình node-red
Trang 181.13 Thiết lập kết nối ESP32
Trước khi tiến hành viết chương trình Chúng ta phải thiết lập thư viện và chức năng nạp code cho ESP32 trên phần mềm Arduino IDE Đầu tiên, vào File
Preferences tại ô Additional Board Manager URLs thêm đường link này vào:
https://raw.githubusercontent.com/espressif/arduino-esp32/gh-pages/package_esp32_dev_index.json
Hình 3.7: Chỗ thêm thư viện cho ESP32
Cuối cùng, vào Tools Board Board Manager tìm và
cài đặt esp32
Hình 3.8: cài đặt board để nạp chương trình cho ESP32
Trường hợp khi chạy thử mạch thấy phần mềm không hiện chân COM lên thì vô Device Manager cài thêm driver cho chip tương ứng trên ESP32
Trang 19Hình 3.9: Cổng COM của ESP32
1.14 Thiết lập MQTT
Để tạo MQTT Broker thì trước hết phải cài đặt thêm vì nó không có sẵn Vô phầnManager Palette mục Install tìm và cài đặt node-red-contrib-
aedes Sau khi hoàn thành xong phần cài đặt thì lấy node Aedes MQTT Broker ra đóngvai trò như một server Lấy MQTT in nếu node-red xuất tín hiệu về ESP32 và MQTTout nếu muốn nhấn tín hiệu từ ESP32 Thiết lập những thông số sau cho MQTT:
Hình 3.10: Thiết lập MQTT
Lưu ý: Mục Server phải lấy địa chỉ IP của mạng đang kết nối Cách để lấy địa chỉ IP là
vô biểu tưởng WIFI Properties và tìm dòng IPv4 Address để lấy địa chỉ IP
Chân mặc định là 1883 Đặt tên topic là tên nơi nhận và phát tín hiệu QoS được thiếtlập như sau hãy chọn 1 trong 3 phù hợp với nhu cầu:
- QoS = 0: dữ liệu truyền nhiều nhất một lần (dễ thất thoát dữ liệu)
- QoS = 1: dữ liệu truyền ít nhất một lần (dễ bị lặp dữ liệu)
Trang 20- QoS = 2: dữ liệu truyền sẽ chỉ truyền một lần (không gây mất hoặc lặp dữ liệu)
Ba mức QoS trên hãy lựa chọn sao cho phù hợp với nhu cầu đề tài nhất Cuối cùng, đểESP32 có thể hiểu truyền và nhận dữ liệu thông qua MQTT thì phải cài đặt thư việnPubSubClient cho Arduino
Chức năng Publish: Gửi tín hiệu đi
Chức năng Subscribe: Nhận tín hiệu về
Hình 3.11: Chức năng Publish và Subscribe
CHƯƠNG 4 GIẢI THUẬT VÀ ĐIỀU KHIỂN
1.15 Hoạt động của hệ thống
1.1.1 ESP32
Sau khi ESP32 được cấp nguồn khoảng 5V từ cổng USB của laptop ESP32 sẽ tựđộng kết nối WiFi và MQTT Sau khi kết nối thành công cảm biến nhiệt độ và độ ẩmDHT11 sẽ đo lường nhiệt độ và độ ẩm môi trường và xuất tín hiệu điện vào ESP32.ESP32 sẽ gửi dữ liệu mà cảm biến đo được lên node-red thông qua giao thức MQTT.Nút nhấn cũng giống như cảm biến, khi được nhấn sẽ truyền tín hiệu đến ESP32 vàgửi lên node-red
1.1.2 Node-red
Trang 21Trên Node-red có MQTT Broker đóng vai trò là nơi để truyền dữ liệu, thông tinqua lại với nhau của node-red dashboard với ESP32 Nếu có tín hiệu từ node-reddashboard dữ liệu sẽ được gửi tới ESP32 hoặc ngược lại nếu có tín hiệu từ nút nhấnhay cảm biến của ESP32 thì dữ liệu sẽ được gửi tới node-red và hiển thị trên giao diệnnode-red dashboard.
1.1.3 Node-red Dashboard
Trên Node-red Dashboard, sẽ có các công tắc và thang đo nhiệt độ và độ ẩm củamôi trường xung quanh Nếu sử dụng các công tắc trên node-red Dashboard để điềukhiển đèn và quạt, node-red sẽ gửi tín hiệu cho ESP32 cho thực hiện dữ liệu vừa đượcgửi như bật tắt đèn phòng khách, phòng ăn hoặc bật tắt quạt phòng ăn
1.16 Lưu đồ giải thuật ESP32
Trang 22Hình 4.1: Lưu đồ giải thuật
CHƯƠNG 5 THỰC NGHIỆM
Trang 231.17 Tiến trình thực nghiệm
Tiến hành thực nghiệm:
Bước 1: Sử dụng nguồn laptop để kết nối ESP32
Bước 2: Kiểm tra ESP32 kết nối WiFi Và MQTT
Bước 3: Nhấn nút nhấn K1, kiểm tra đèn led phòng khách có sáng hay không và có gửitín hiệu lên node-red để thay đổi công tắc phòng khách trên dashboard hay không.Bước 4: Nhấn nút nhấn K2, kiểm tra đèn led phòng ngủ có sáng hay không và có gửitín hiệu lên node-red để thay đổi công tắc phòng ngủ trên dashboard hay không
Bước 5: Nhấn nút nhấn K3, kiểm tra đèn led phòng ăn có sáng hay không và có gửi tínhiệu lên node-red để thay đổi công tắc phòng ăn trên dashboard hay không
Bước 6: Nhấn nút nhấn K4, kiểm tra quạt phòng ăn có chạy hay không và có gửi tínhiệu lên node-red để thay đổi công tắc phòng ăn trên dashboard hay không
Bước 7: Giám sát thang độ nhiệt độ và độ ẩm có hoạt động hay không
Bước 8: Bật/tắt các công tắc trên Dashboard để điều khiển đèn led, quạt của cácphòng
Trang 241.18 Kết quả thực nghiệm
Bước 1: Sử dụng nguồn laptop để kết nối ESP32
Hình 5.1: ESP32 khi được cấp nguồn
Bước 2: Kiểm tra ESP32 kết nối WiFi Và MQTT
Hình 5.2: ESP32 kết nối WiFi và MQTT thành công
Trang 25Bước 3: Nhấn nút nhấn K1, kiểm tra đèn led phòng khách có sáng hay không và có gửitín hiệu lên node-red để thay đổi công tắc phòng khách trên dashboard hay không.
Trang 27Hình 5.7: Thang đo nhiệt độ và độ ẩm phòng ăn
Bước 8: Bật/tắt các công tắc trên Dashboard để điều khiển đèn led, quạt của cácphòng
(Kết quả giống với nút nhấn)
Hình 5.8: Điều khiển đèn các phòng bằng node-red Dashboard
Trang 28CHƯƠNG 6 KẾT LUẬN
1.19 Ưu điểm
- Sử dụng những thiết bị điều khiển giá thành rẻ
- Không cần đi lại xa những vẫn có thể bật/tắt các thiết bị điện trong gia đình
- Giám sát được nhiệt độ và độ ẩm trong nhà
- Tránh những sự cố trong nhà như cháy, nổ
- Giảm bớt mệt mỏi và không phải bận tâm tới việc bật/tắt các thiết bị trong nhà.1.20 Nhược điểm
- Chỉ sử dụng được trong khu vực xung quanh nhà
- Dây kết nối còn chưa sắp xếp gọn gàng
- Hệ thống còn đơn giản chưa bao quát hết các thiết bị trong ngôi nhà
- Chưa có thiết bị báo cháy hay chống trộm
1.21 Hướng phát triển
- Giao diện dashboard làm đẹp hơn
- Điều khiển được xa hơn không bị giới hạn trong nhà
- Điều khiển được nhiều thiết bị hơn như dàn phơi đồ, cửa thông minh,…
- Có màn hình LCD hiển thị tình trạng ngôi nhà
- Điều khiển bằng giọng nói
Trang 29- TÀI LIỆU THAM KHẢO
[3] Học ARM, MQTT Client và MQTT Broker, client-va-mqtt-broker/
https://hocarm.org/mqtt-[4] SmartFactory, Giao thức MQTT trong IoT là gì? Những ứng dụng củaMQTT như thế nào?, https://smartfactoryvn.com/technology/internet-of-things/giao-thuc-mqtt-la-gi-nhung-ung-dung-cua-mqtt-nhu-the-nao/
Tiếng Anh:
[5] Surivingwithandroid, ESP32 MQTT client: Publish and Subscribe.HiveMQ and BME280 example, https://www.survivingwithandroid.com/esp32-mqtt-client-publish-and-subscribe/
Techeplanet, What is Node-Red, https://techeplanet.com/what-is-node-red/
Trang 30const char* password = "05091995";
//khai báo server và port mqtt
const char* mqtt_server = "192.168.88.105";
const unsigned int mqtt_port = 1883;
//trạng thái cái relay
unsigned char relay1_state = 1;
Trang 31unsigned char relay2_state = 1;
unsigned char relay3_state = 1;
unsigned char relay4_state = 1;
//khai báo subcribe topic
#define sub1 "Living_room/led"
#define sub2 "Bedroom/led"
#define sub3 "Dining_room/led"
#define sub4 "Dining_room/fan"
//khai báo publish topic
#define pub1 "Switch1"
#define pub2 "Switch2"
#define pub3 "Switch3"
#define pub4 "Switch4"
#define pub5 "Humidity"
#define pub6 "Temperature"
// khởi tạo cảm biến nhiệt độ và độ ẩm DHT11
unsigned long previousMillis = 0;
//Hàm thiết lập để esp32 kết nối với wifi
Trang 32//Kiểm tra trạng thái kết nối wifi
while (WiFi.status() != WL_CONNECTED) {
Trang 35else if(digitalRead(switch2) == LOW) { delay(20);
if(digitalRead(switch2) == LOW) { if(relay2_state == 1) {
else if(digitalRead(switch3) == LOW) { delay(20);
if(digitalRead(switch3) == LOW) { if(relay3_state == 1) {
Trang 36else if(digitalRead(switch4) == LOW) { delay(20);
if(digitalRead(switch4) == LOW) { if(relay4_state == 1) {
}
// hàm kết nối lại
void reconnect() {
Trang 38float hum = dht.readHumidity();
float temp = dht.readTemperature();
float hic = dht.computeHeatIndex(temp,hum,false);
Trang 39}