
Chào mọi người! Bài viết này sẽ mô tả chi tiết và hướng dẫn cách thiết lập điều khiển từ xa mô-đun Esp20 bằng ứng dụng Android sử dụng giao thức MQTT chỉ trong 8266 phút rảnh rỗi.
Ý tưởng về điều khiển và giám sát từ xa luôn kích thích trí óc của những người đam mê điện tử và lập trình. Xét cho cùng, khả năng nhận hoặc gửi dữ liệu cần thiết bất kỳ lúc nào, bất kể vị trí của bạn, mang lại nhiều cơ hội. Trong các bài viết trước của tôi и ) Tôi đã cố gắng xem xét một số tùy chọn hợp lý và tương đối đơn giản để thực hiện điều khiển từ xa các bộ vi điều khiển thông qua Internet. Tuy nhiên, thời gian và cả thế giới không đứng yên - sự tiến bộ vẫn tiếp tục chuyển động không ngừng về phía trước. Trong thời gian ngắn này, mô-đun Esp8266 đã trở nên phổ biến rộng rãi, nhờ giá rẻ và tích hợp Wi-Fi, mô-đun này đã trở thành một trong những thành phần chính của Nhà thông minh.
Hiện tại, MQTT là giao thức truyền dữ liệu tiên tiến và phổ biến nhất giữa các thiết bị riêng lẻ trong hệ thống Nhà thông minh. Nó có một số lợi thế so với các giao thức khác:
- mức tiêu thụ giao thông thấp;
- kết nối giữa máy khách và máy chủ luôn mở;
- không tải kênh Internet;
- không có sự chậm trễ trong việc truyền dữ liệu;
— hệ thống đăng ký chủ đề thuận tiện;
Tất cả điều này giúp bạn có thể theo dõi và kiểm soát trong thời gian thực. Tuy nhiên, MQTT yêu cầu máy chủ riêng, đóng vai trò trung gian giữa các máy khách trong mạng. Có hai cách để tạo máy chủ của riêng bạn hoặc sử dụng dịch vụ của bên thứ ba.
Hệ thống điều khiển được mô tả bao gồm hai phần chính: máy chủ MQTT (thường là một) và máy khách, có thể có khá nhiều. Trong trường hợp của chúng tôi, ứng dụng Android và mô-đun Esp8266 sẽ hoạt động như ứng dụng khách.
Thuật toán vận hành hệ thống như sau. Khách hàng kết nối với máy chủ và ngay sau khi kết nối, mỗi người trong số họ đăng ký các chủ đề mà mình quan tâm. Tất cả thông tin liên lạc giữa các máy khách đều chuyển qua máy chủ, máy chủ này sẽ chuyển hướng dữ liệu đến các máy khách khác dựa trên đăng ký của họ.
máy chủ MQTT.
Trong trường hợp của chúng tôi, chúng tôi sẽ sử dụng một dịch vụ cực kỳ tiện lợi có gói thuế miễn phí (Mèo dễ thương) sẽ đáp ứng đầy đủ nhu cầu triển khai hệ thống nhà thông minh nhỏ trong nhà.

Hãy đăng ký trên trang web và lấy dữ liệu cần thiết để truy cập vào máy chủ. Khi định cấu hình máy khách, bạn phải sử dụng Cổng thông thường (không có SSL và TLS).

Ứng dụng dành cho Android.
Ứng dụng của chúng tôi sẽ hoạt động như một bảng điều khiển cho vi điều khiển, đồng thời sẽ nhận và hiển thị tất cả thông tin nhận được từ Esp8266.
Ứng dụng này được gọi là và là một ứng dụng khách mqtt được tạo sẵn với một số ít tiện ích rất tiện dụng. Bạn có thể xem video để biết thêm chi tiết về cách sử dụng ứng dụng.
Esp8266.
Mô-đun này được flash trong môi trường lập trình Arduino, tuy nhiên, tôi muốn lưu ý rằng mô-đun này có vấn đề với phần sụn trong các phiên bản Arduino mới nhất, vì vậy tôi khuyên bạn nên sử dụng phiên bản 1.6.4.
Ví dụ: một đèn LED (8266 chân) và cảm biến nhiệt độ ds5b18 (20 chân) được kết nối với Esp2.
Vì cần phải nhận dữ liệu để điều khiển đèn LED nên sau khi kết nối, esp phải đăng ký chủ đề “test / led” tương ứng, nếu không tất cả dữ liệu đã gửi sẽ đi qua vi điều khiển của chúng ta.
Bạn không cần đăng ký để gửi dữ liệu nhiệt độ, nhưng khi gửi các giá trị nhiệt độ, bạn phải chỉ định chủ đề mà dữ liệu này sẽ đi đến.
Dưới đây là một bản phác thảo với ý kiến chi tiết.
Phác thảo Esp8266_mqtt.ino// Светодиод подлкючен к 5 пину
// Датчик температуры ds18b20 к 2 пину
#bao gồm
#bao gồm
#bao gồm
#bao gồm
#define ONE_WIRE_BUS 2
OneWire oneWire(ONE_WIRE_BUS);
Cảm biến nhiệt độ Dallas(&oneWire);
const char *ssid = "SÂN BAY"; // Tên của điểm truy cập WiFi
const char *pass = "MẬT KHẨU"; // Mật khẩu từ điểm truy cập
const char *mqtt_server = "máy chủ"; // Tên máy chủ MQTT
hằng số int mqtt_port = 11140; // Cổng kết nối với máy chủ MQTT
const char *mqtt_user = "Đăng nhập"; // Nhật ký từ máy chủ
const char *mqtt_pass = "Vượt qua"; // Mật khẩu máy chủ
#xác định BUFFER_SIZE 100
bool LedState = sai;
intt=300;
nhiệt độ thực = 0;
// Hàm nhận dữ liệu từ máy chủ
void callback(const MQTT::Publish& pub)
{
Serial.print(pub.topic()); // xuất tên chủ đề ra cổng nối tiếp
Serial.print(" => ");
Serial.print(pub.payload_string()); // xuất giá trị dữ liệu nhận được ra cổng nối tiếp
Chuỗi tải trọng = pub.payload_string();
if(String(pub.topic()) == "test/led") // kiểm tra xem dữ liệu có đến từ chủ đề chúng ta cần không
{
int stled = payload.toInt(); // chuyển đổi dữ liệu nhận được sang kiểu số nguyên
digitalWrite(5,stled); // bật hoặc tắt đèn LED tùy thuộc vào giá trị dữ liệu nhận được
}
}
Máy khách WiFiClient;
Máy khách PubSubClient (wclient, mqtt_server, mqtt_port);
void setup () {
cảm biến.bắt đầu();
Serial.begin (115200);
độ trễ (10);
Nối tiếp.println ();
Nối tiếp.println ();
pinMode (5, OUTPUT);
}
void loop () {
// kết nối với wi-fi
nếu (WiFi.status() != WL_CONNECTED) {
Serial.print("Đang kết nối tới ");
Serial.print(ssid);
Serial. println("...");
WiFi.bắt đầu(ssid, pass);
nếu (WiFi.waitForConnectResult() != WL_CONNECTED)
trở về;
Serial.println("Đã kết nối WiFi");
}
// kết nối tới máy chủ MQTT
nếu (WiFi.status() == WL_CONNECTED) {
nếu (!client.connected()) {
Serial.println("Đang kết nối tới máy chủ MQTT");
nếu (client.connect(MQTT::Connect("arduinoClient2")
.set_auth(mqtt_user, mqtt_pass))) {
Serial.println("Đã kết nối tới máy chủ MQTT");
client.set_callback(gọi lại);
khách hàng.subscribe("kiểm tra/đã dẫn"); // đăng ký chủ đề với dữ liệu cho đèn LED
} Else {
Serial.println("Không thể kết nối với máy chủ MQTT");
}
}
nếu (client.connected()){
client.loop();
Gửi tạm thời();
}
}
} // kết thúc vòng lặp chính
// Chức năng gửi dữ liệu đọc được từ cảm biến nhiệt độ
void TempSend(){
nếu (tm==0)
{
cảm biến.requestTemperatures(); // chúng ta lấy giá trị nhiệt độ từ cảm biến
float temp = cảm biến.getTempCByIndex(0);
client.publish("test/temp",String(temp)); // gửi giá trị nhiệt độ đến chủ đề cho cảm biến nhiệt độ
Serial. println(temp);
tm = 300; // tạm dừng giữa việc gửi giá trị nhiệt độ khoảng 3 giây
}
tm--;
độ trễ (10);
}
Kết quả là chúng ta có được một công cụ thuận tiện để điều khiển và giám sát dữ liệu từ xa, công cụ này khá dễ học và ngay cả những người mới bắt đầu cũng có thể làm được.
Video minh họa hoạt động của hệ thống điều khiển

Video hướng dẫn chi tiết setup hệ thống

Một trong những lựa chọn sử dụng điều khiển Esp8266 qua giao thức MQTT

Kiểm soát Internet của dải đèn LED

Nếu bạn có bất kỳ câu hỏi nào về tài liệu này, tôi khuyên bạn nên xem phần thứ hai của video, nơi tài liệu được trình bày rõ ràng hơn.
Kho lưu trữ chứa bản phác thảo và tất cả các thư viện cần thiết để flash bộ vi điều khiển với bản phác thảo từ ví dụ.
Xin lưu ý rằng thư viện ESP8266WiFi.h không có trong kho lưu trữ này, nó được cài đặt thông qua trình quản lý Bảng trong môi trường Arduino.
máy chủ MQTT -
Liên kết tới Ứng dụng bảng điều khiển IoT MQTT -
Cảm ơn tất cả các bạn đã quan tâm của bạn.
Nguồn: www.habr.com
