ESP8266 Phần 3: MQTT Và Esp8266 - STKT Blog

1. Một số khái niệm cần tìm hiểu

1.1. MQTT là gì ?

Các bạn tham khảo một số tài liệu sau:

http://www.indigoo.com/dox/wsmw/1_Middleware/MQTT.pdf

https://xivila.com/talks/detail/196/giao-thuc-iot-mqtt-va-coap/

1.2. Esp8266 là gì ?

Esp8266 bản thân là SoC System on Chip tích hợp giao thức TCP/IP cho phép bất kì vi điều khiển nào kết nối vào mạng WiFi của bạn. Mỗi mudule esp8266 được nạp sẵn firmware tập lệnh AT cho phép chúng ta cấu hình cho nó kết nối vào WiFi bằng cách đơn giản nhất. Bộ xử lí đủ mạnh để giao tiếp với các loại cảm biến và các thiết bị chấp hành thông qua các cổng GPIO.

1.3. Esp8266 đứng ở đâu trong IoT ?

Tôi xin được đặt esp8266 trong mạng kết nối các thiết bị đầu cuối với Internet như sau:

Với một thiết bị bình thường không có khả năng kết nối Internet, cần có một vi điều khiển và một module không dây để truyền nhận dữ liệu IoT. Bằng cách sử dụng esp8266, chúng ta bỏ qua được vi điều khiển và module không dây vì 2 thứ đó đã tích hợp trên một module esp.

1.4. Broker MQTT ở đâu ?

Có nhiều cách triển khai MQTT broker như:

Dùng các ứng dụng opensource chạy broker trên máy tính của bạn

Dùng các dịch vụ được xây dựng sẵn

Bài này tôi sẽ dùng dịch vụ CloudMQTT https://www.cloudmqtt.com/ để nhanh chóng demo kịch bản.

Để chạy một kịch bản đơn giản giao tiếp giữa Broker với Client bạn cần chú ý một số điểm sau:

– Tất nhiên cần có tối thiểu một Client và một Broker.

– Thiết đặt Host, Port, Topic, có thể car user và password.

Client Chúng ta sẽ xây dựng bằng esp8266

Broker Chúng ta sẽ cài đặt một Broker miễn phí trên dịch vụ CloudMQTT. Vào https://www.cloudmqtt.com/plans.html, Click Try now for Free

Ở phần Sign up, bạn điền địa chỉ E-mail và Click Sign up

Vào hòm thư và Click vào đường link trong email mà CloudMQTT gửi cho bạn. Link sẽ dẫn bạn đến một trang điền thông tin cho tài khoản và nhấn Submit.

Tiếp theo, nhấn Creat để tạo MQTT broker

Điền vào ô Name, nhấn Creat.

Click Details

Tại mục Manage Users bạn điền tên user, mật khẩu password quản lí Client, nhấn Save.

Tại mục New Rule, User bạn chọn tên vừa tạo ở trên, đặt tên cho Topic, tick chọn Read AccsessWrite Accsess, click Save.

Chúng ta quan tâm đến một số thông số sau:

Server: m10.cloudmqtt.com

Port: 13407 (tùy tài khoản của bạn)

Users: esp8266

Password: xxxx

Topic: demo

Vậy là chúng ta đã cài đặt xong Broker.

2. Triển khai MQTT trên esp8266

Chúng ta cùng làm từng bước để chạy demo được một kịch bản publish/subsscribe giữa client là esp8266 và broker chạy trên dịch vụ CloudMQTT.

-Chuẩn bị lập trình cho esp8266 bằng Arduino IDE các bạn tham khảo bài viết

https://suutamkt.wordpress.com/2016/01/18/esp8266-phan-2-lap-trinh-esp8266-bang-arduino-ide/

-Add thư viện hỗ trợ chạy Client MQTT trên esp8266

https://github.com/knolleary/pubsubclient/

-Code demo chương trình Publish

/* </> */ #include <ESP8266WiFi.h> #include <PubSubClient.h> // Update these with values suitable for your network. #define ssid "xxx" #define password "xxx" #define mqtt_server "m10.cloudmqtt.com" #define mqtt_topic_pub "xxx" #define mqtt_topic_sub "xxx" #define mqtt_user "xxx" #define mqtt_pwd "xxx" const uint16_t mqtt_port = xxx; WiFiClient espClient; PubSubClient client(espClient); long lastMsg = 0; char msg[50]; int value = 0; void setup() { Serial.begin(115200); setup_wifi(); client.setServer(mqtt_server, mqtt_port); client.setCallback(callback); } void setup_wifi() { delay(10); // We start by connecting to a WiFi network 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()); } void callback(char* topic, byte* payload, unsigned int length) { Serial.print("Message arrived ["); Serial.print(topic); Serial.print("] "); for (int i = 0; i < length; i++) { Serial.print((char)payload[i]); } Serial.println(); } void reconnect() { // Loop until we're reconnected while (!client.connected()) { Serial.print("Attempting MQTT connection..."); // Attempt to connect if (client.connect("ESP8266Client",mqtt_user, mqtt_pwd)) { Serial.println("connected"); // Once connected, publish an announcement... client.publish(mqtt_topic_pub, "ESP_reconnected"); // ... and resubscribe client.subscribe(mqtt_topic_sub); } else { Serial.print("failed, rc="); Serial.print(client.state()); Serial.println(" try again in 5 seconds"); // Wait 5 seconds before retrying delay(5000); } } } void loop() { if (!client.connected()) { reconnect(); } client.loop(); long now = millis(); if (now - lastMsg > 2000) { lastMsg = now; ++value; snprintf (msg, 75, "hello world #%ld", value); Serial.print("Publish message: "); Serial.println(msg); client.publish(mqtt_topic_pub, msg); } }

Bạn cần thay đổi các thông số:

ssid: tên mạng WiFi sẽ kết nối

password: mật khẩu WiFi

mqtt_server: Server

mqtt_port: Port

mqtt_topic_pub: Topic

Chương trình sẽ cấu hình kết nối esp8266 vào mạng WiFi bạn mong muốn và Publish bản tin theo chu kì 2s đến Topic đã cấu hình.

-Nạp chương trình cho esp8266

Các bạn tham khảo bài viết

https://suutamkt.wordpress.com/2016/01/18/esp8266-phan-2-lap-trinh-esp8266-bang-arduino-ide/

Bạn có thể xem kết quả được Publish lên Topic ở giao diện

https://api.cloudmqtt.com/sso/cloudmqtt/websocket

Nguồn bài viết: https://xivila.com/talks/detail/200/esp8266-phan-3-mqtt-va-esp8266/

Từ khóa » Mqtt Với Esp8266