Cách kết nối và điều khiển thiết bị IoT
Tiết kiệm ngân sách không nhất thiết có nghĩa là bạn không thể thực hiện các dự án DIY nâng cao. Nếu bạn đang tìm kiếm một mô-đun WiFi nhỏ, giá cả phải chăng và tiện lợi để mở rộng quy mô cho các dự án IoT của mình, thì mô-đun ESP-01 là một lựa chọn tuyệt vời. Tuy nhiên, việc tích hợp một mô-đun như vậy với một giao thức nhẹ như MQTT có thể khó khăn, đặc biệt nếu bạn là người mới phát triển IoT.
Việc lập trình riêng bo mạch ESP-01 có thể là một thách thức so với các mô-đun khác của sê-ri ESP8266. Tuy nhiên, hãy tìm hiểu những điều cơ bản về tất cả thiết lập phần cứng và phần mềm mà bạn cần để bắt đầu sử dụng mô-đun cũng như cách thiết lập MQTT theo cách đơn giản và đúng quy trình.
Mục Lục
Làm quen với hội đồng quản trị
ESP8266 ESP-01 là một mô-đun WiFi nhỏ gọn đi kèm với chip ESP8266EX, đây là một SoC tích hợp cao được thiết kế cho các ứng dụng IoT.
Mô-đun này bao gồm một bộ vi điều khiển không dây một chip với ngăn xếp giao thức TCP/IP và có khả năng kết nối với mạng không dây hoặc hoạt động như một điểm truy cập. Mô-đun ESP-01 cũng có tiêu đề chân 2×4 cung cấp quyền truy cập vào các chân GPIO, nguồn và nối đất cũng như giao diện UART của nó.
Thiết lập phần cứng
Mô-đun này hoàn toàn không thân thiện với breadboard. Để thuận tiện, bạn có thể mua bảng mở rộng dựng sẵn hoặc chỉ cần làm theo cách cũ—sử dụng dây nhảy và bảng mạch.
Có một lập trình viên chuyên dụng, Bảng mô-đun nối tiếp ESP8266, có thể tạo điều kiện thuận lợi cho trải nghiệm lập trình của bạn. Nếu bạn thích đi theo con đường này, DIYHOBI có một hướng dẫn hữu ích về cách flash chương trình vào mô-đun ESP-01 bằng cách sử dụng bộ lập trình (bao gồm cả Bộ điều hợp mô-đun chuyển đổi USB sang TTL CH340G).
Tuy nhiên, bạn vẫn có thể lập trình mô-đun bằng bảng Arduino. Nhìn vào sơ đồ mạch dưới đây để tham khảo.
Mặc dù trông có vẻ hấp dẫn, nhưng chúng tôi thường khuyên bạn không nên kết nối trực tiếp mô-đun với chân 3,3v của Arduino vì nó yêu cầu nhiều dòng điện hơn mức chân cung cấp. Thay vào đó, hãy kết nối Arduino 5V đến bộ điều chỉnh điện áp 3,3V như LM1117/LD117, sau đó cấp nguồn cho mô-đun WiFi từ bộ điều chỉnh.
Không kết nối các VCC Và CH_PD các chân của ESP với 5V chân của Arduino. Kết nối mô-đun với 5V sức mạnh có thể làm hỏng nó.
Tất cả các tụ điện đều 10uF và điện trở là một 1k điện trở.
Yêu cầu phần mềm
Mô-đun ESP-01 thường được sử dụng với nền tảng Arduino. Do đó, việc thiết lập phần mềm khá đơn giản, đặc biệt nếu bạn đã quen thuộc với Arduino C. Tuy nhiên, nếu bạn đã quen thuộc hơn với Raspberry, thì có rất nhiều dự án Raspberry Pi IoT mà bạn có thể thử.
Đây là những yêu cầu cơ bản:
- Một nhà môi giới hoặc máy chủ MQTT (chẳng hạn như Mosquitto hoặc CloudMQTT).
- Một IDE Arduino với thư viện lõi ESP8266.
- Thư viện PubSubClient cho Arduino.
Bạn phải nhớ rằng việc có máy chủ MQTT cục bộ sẽ mang lại cho bạn sự linh hoạt trong các dự án của mình.
Cài đặt các thư viện cần thiết
Đầu tiên, tải xuống và cài đặt Arduino IDE trên máy tính của bạn. Sau khi cài đặt, hãy mở Arduino IDE và truy cập Tài liệu > Sở thích.
bên trong URL Trình quản lý bảng bổ sung trường, nhập URL sau:
http:
Nhấp chuột ĐƯỢC RỒI để đóng cửa sổ Preferences.
Tiếp theo, đi đến Công cụ > Bảng > Ban quản lý.
Sau đó tìm kiếm đặc biệt8266 và cài đặt gói bo mạch esp8266—gói này bao gồm tất cả các thư viện cần thiết cho mô-đun ESP-01.
Để cài đặt thư viện PubSubClient, hãy truy cập phác thảo > Bao gồm thư viện > Quản lý thư viện.
Tìm kiếm PubSubClient và bấm vào thư viện để cài đặt nó.
Khi bạn đã cài đặt tất cả các thư viện cần thiết, bạn có thể bắt đầu lập trình mô-đun ESP-01. Tuy nhiên, một điều cần lưu ý là bạn có thể sử dụng Wifi.h được bao gồm trong thư viện hoặc tải xuống ESPWifi.h thư viện và đưa nó vào bản phác thảo của bạn.
Thiết lập kết nối giữa ESP-01 và MQTT Broker
Nhà môi giới MQTT là một máy chủ đóng vai trò trung gian giữa các máy khách MQTT. Nó cho phép khách hàng gửi và nhận tin nhắn đến và từ nhau thông qua mô hình đăng ký xuất bản.
Để kết nối mô-đun ESP-01 của bạn với nhà môi giới MQTT, bạn sẽ cần chỉ định địa chỉ IP và số cổng của nhà môi giới trong mã của mình. Bạn cũng sẽ cần cung cấp ID khách hàng duy nhất xác định mô-đun ESP-01 của bạn cho nhà môi giới.
Đầu tiên, bao gồm các thư viện cần thiết ở đầu bản phác thảo của bạn
#include <ESP8266WiFi.h>
#include <PubSubClient.h>
Tiếp theo, xác định chi tiết kết nối WiFi và MQTT.
const char* ssid = "YOUR_SSID";
const char* password = "YOUR_PASSWORD";
const char* mqtt_server = "YOUR_MQTT_SERVER";
Đừng quên thay thế trình giữ chỗ bằng chi tiết kết nối WiFi và MQTT của riêng bạn.
Sau đó, tạo ứng dụng khách WiFi và kết nối với mạng WiFi cục bộ của bạn:
WiFiClient espClient;
void setup_wifi() {
delay(10);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
}
}
Chức năng này nên được gọi trong cài đặt() chức năng của bản phác thảo của bạn.
Tiếp theo, bạn sẽ cần tạo ứng dụng khách MQTT và kết nối với nhà môi giới MQTT của mình:
PubSubClient client(espClient);
void reconnect() {
while (!client.connected()) {
if (client.connect("ESP01", mqtt_user, mqtt_password)) {
client.subscribe("test/topic");
} else {
delay(5000);
}
}
}
Khi bạn đã kết nối với nhà môi giới MQTT của mình, bạn có thể bắt đầu xuất bản và đăng ký các chủ đề.
Xuất bản dữ liệu từ ESP-01 sang MQTT Broker
Bây giờ bạn đã kết nối thành công mô-đun ESP01 của mình với nhà môi giới MQTT, hãy xem cách bạn có thể xuất bản dữ liệu từ ESP-01 tới nhà môi giới.
Để xuất bản dữ liệu, hãy sử dụng client.publish() chức năng xuất bản một tin nhắn đến trong chủ đề đề tài.
client.publish("inTopic", "Hello from ESP-01");
Thao tác này sẽ xuất bản thông báo “Xin chào từ ESP-01” tới trong chủ đề đề tài.
Bạn cũng có thể xuất bản dữ liệu cảm biến từ ESP-01 cho nhà môi giới. Ví dụ: nếu bạn có cảm biến nhiệt độ được kết nối với ESP-01, bạn có thể xuất bản dữ liệu nhiệt độ cho nhà môi giới như hình bên dưới.
float temperature = 25.5;
String temperatureString = String(temperature);
char temperatureChar[5];
temperatureString.toCharArray(temperatureChar, 5);
client.publish("Temp", temperatureChar);
Thao tác này sẽ xuất bản dữ liệu nhiệt độ lên Nhiệt độ đề tài.
Dữ liệu có thể được xuất bản theo vòng lặp hoặc theo định kỳ, tùy thuộc vào yêu cầu của dự án của bạn. Đảm bảo rằng bạn không cung cấp quá nhiều dữ liệu cho nhà môi giới và bạn xuất bản trong khoảng thời gian hợp lý.
Đăng ký chủ đề MQTT và nhận dữ liệu trên ESP-01
Để đăng ký một chủ đề, hãy sử dụng khách hàng.đăng ký () chức năng. Đối với trường hợp của chúng tôi bên dưới, khách hàng đăng ký vào ngoài chủ đề đề tài.
client.subscribe("outTopic");
Khi bạn đã đăng ký một chủ đề, bạn có thể nhận các tin nhắn được xuất bản cho chủ đề đó bằng cách sử dụng khách hàng.loop() chức năng trong vòng() chức năng trong bản phác thảo dưới đây:
void loop() {
if (!client.connected()) {
reconnect();
}
client.loop();
}
Điều này sẽ liên tục kiểm tra các tin nhắn mới và thực hiện chức năng gọi lại khi nhận được tin nhắn mới.
Để xử lý các tin nhắn đã nhận, hãy xác định chức năng gọi lại giống như chức năng hiển thị bên dưới:
void callback(char* topic, byte* payload, unsigned int length) {
Serial.print("Message received on topic: ");
Serial.print(topic);
Serial.print(". Message: ");
for (int i=0;i<length;i++) {
Serial.print((char)payload[i]);
}
Serial.println();
}
Hàm này sẽ được gọi khi nhận được tin nhắn mới về chủ đề đã đăng ký. Nó sẽ in tin nhắn nhận được tới Màn hình nối tiếp.
Sử dụng các mức QoS (Chất lượng dịch vụ) và các tính năng bảo mật
Một trong những kỹ thuật quan trọng nhất được sử dụng để xử lý các yêu cầu là sử dụng các mức QoS (Chất lượng dịch vụ) cho các tin nhắn MQTT của bạn. Các mức QoS xác định cách nhà môi giới và người đăng ký sẽ xử lý tin nhắn của bạn. Có ba mức QoS: 0, 1 và 2.
QoS mức 0 là kém tin cậy nhất, vì các tin nhắn chỉ được gửi một lần và không được đảm bảo sẽ được gửi đến người đăng ký. QoS mức 1 đáng tin cậy hơn, vì tin nhắn được gửi ít nhất một lần và được đảm bảo gửi đến người đăng ký ít nhất một lần. QoS mức 2 là đáng tin cậy nhất, vì các tin nhắn được gửi chính xác một lần và được đảm bảo gửi đến người đăng ký chính xác một lần. Cách thiết bị của bạn giao tiếp phù hợp với các sự cố bảo mật phổ biến khác của Internet of Things (IoT) và các bản sửa lỗi mà bạn muốn luôn cập nhật.
Để sử dụng các mức QoS, bạn có thể chỉ định mức mong muốn khi xuất bản tin nhắn bằng cách sử dụng client.publish() chức năng:
client.publish("topic", "Hello, world!", 1);
Điều này sẽ xuất bản tin nhắn Chào thế giới! đến đề tài chủ đề với mức QoS 1.
Một kỹ thuật tiên tiến khác là sử dụng Di chúc và di chúc cuối cùng (LWT) tin nhắn. Tin nhắn LWT là tin nhắn được gửi bởi nhà môi giới khi khách hàng đột ngột ngắt kết nối. Chúng tôi tin rằng điều này rất quan trọng để phát hiện thiết bị ngoại tuyến hoặc để kích hoạt hành động khi thiết bị ngắt kết nối.
Để sử dụng tin nhắn LWT, bạn có thể chỉ định tin nhắn LWT khi kết nối với nhà môi giới bằng cách sử dụng khách hàng.setWill() chức năng:
client.setWill("status", "offline", 1, true);
Điều này sẽ đặt thông báo LWT thành ngoại tuyến trên trạng thái chủ đề với QoS cấp 1 và cờ giữ lại được đặt thành ĐÚNG VẬY.
Chuẩn bị cho dự án IoT tiếp theo của bạn
Mô-đun ESP-01 là một giải pháp nhỏ gọn và giá cả phải chăng cho các dự án IoT và việc sử dụng nó với MQTT có thể đưa dự án của bạn lên một tầm cao mới. Mặc dù thiết lập ban đầu có thể khó khăn, nhưng những lợi ích của MQTT, chẳng hạn như giao tiếp nhẹ và khả năng mở rộng cao, khiến nó trở thành một khoản đầu tư đáng giá.