[IoT] Bài 7: ESP8266 – arduino ide và giao thức MQTT

Giao thức MQTT phù hợp nhất cho các dự án IoT thương mại, nó dáp ứng tốc độ tốt, băng thông ít, độ tin cậy cao. Tài liệu về giao thức MQTT thì các bạn tham khảo ở các trên mạng hoặc 1 số bài sau :

Mình sẽ không nhắc lại phần lí thuyết nữa vì trên mạng có rất nhiều rồi. Chúng ta sẽ đi vào thực hành làm thử 1 project với giao thức MQTT luôn

Đầu tiên, phía esp8266 các bạn tải thư viện Pubsubclient

cai thu vien cho arduino
ADD thư viện vào

Giao thức MQTT cần có 1 server ( gọi là broker) để làm trung tâm của mọi luồng dữ liệu, trong các bài viết sau mình sẽ hướng dẫn các bạn tự build server, còn trong bài này mình sẽ sử dụng server miễn phí không bảo mật là broker.hivemq.com để demo

Các bạn copy chương trình cho esp8266

  • Ở dòng 5 và 6 các bạn đổi thành wifi của mình.
  • Hàm callback là hàm gọi lại khi có dữ liệu gửi đến topic mà chúng ta đăng kí
  • Hàm client.subscribe dùng để đăng kí 1 topic
  • Hàm client.publish dùng để gửi dữ liệu lên 1 topic
  • Hàm client.connect để kết nối vào MQTT Broker, với các tham số
    ESP8266_id1 : Id của thiết bị đăng kí vào (có thể chỉnh sửa bất thành bất kì)
    ESP_offline : khi thiết bị (esp8266) mất mạng (offline) thì broker sẽ xuất bản
    1 tin nhắn vào topic này
    ESP8266_offline : Nội dung của tin nhắn offline

Sau khi kết nối thành công ở dòng 53 mình đăng kí topic IoT47_MQTT_Test và trong hàm loop xuất bản tin nhắn “Xin chao” vào chính topic IoT47_MQTT_Test .Như vậy chúng ta sẽ nhận lại được chính tin nhắn mà ta đã xuất bản !

giao thức mqtt esp8266

Kết quả: Mình đã nhận được chính tin nhắn mà mình xuất bản lên

Thiết kế giao diện web gửi tin nhắn cho ESP8266

Để có thể kết nối tới MQTT broker, mình sẽ sử dụng ngôn ngữ JavaScript và thư viện PahoMQTT

Các bạn tạo 1 file tên là index.html và thêm mã code web

  • Hàm makeID có nhiệm vụ tạo ra 1 id ngẫu nhiên để web kết nối tới MQTT broker tránh bị trùng id
  • Mình sẽ kết nối vào broker.hivemq.com qua cổng 8000 vì cổng 8000 là cổng dành cho các kết nối thông qua Socket, trong khi cổng 1883 dành cho các kết nối qua TCP
  • Hàm public dùng để xuất bản 1 tín nhắn tới 1 topic nào dó
  • Hàm client.subscribe dùng để đăng kí nhận tin nhắn từ 1 topic nào đó
  • Hàm onMessageArrived là hàm callback khi có 1 tin nhắn từ 1 topic đã đăng kí gửi tới

Mình sẻ lưu lại và mở file này bằng trình duyệt, sau đó ấn F12 để xem dữ liệu debug in ra màn hình console

giao thức mqtt esp8266

Các bạn có thể thấy sau khi thông báo Connect OK thì chúng ta đã nhận được tin nhắn “Xin chao !” mà esp8266 liên tục gửi lên mỗi 500 mili giây

Cũng trong màn hình debug, mình gõ hàm public để gửi thử dữ liệu đến esp8266 nhé !

giao thức mqtt esp8266
Gọi hàm public gửi dữ liệu
giao thức mqtt esp8266
ESP8266 đã nhận được tin nhắn xin chào

Thiết kế giao diện nút nhấn điều khiển thiết bị cho giao thức mqtt

Chúng ta sẽ tận dùng lại giao diện dã xài ở bài 5 nhé

Demo MQTT

Điều khiển thiết bị qua WIFI - MQTT

Tin nhắn từ esp8266: ...

Khi ấn nút ( sự kiện OnClick) mình sẽ cho xuất bản tin nhắn tương ứng tới ESP8266 qua topic ESP8266_read_data. Do vậy ở code esp8266 mình sẽ sửa lại code cho nó đăng kí vào topic ESP8266_read_data và cho web đăng kí vào kênh ESP8266_sent_data để nhận tin nhắn esp8266 gửi lên

Sửa lại topic đăng kí của esp8266 thành ESP8266_read_data

Mình cũng thêm đoạn mã đọc data tử cổng Serial để gửi lên cho web

Full code cho esp8266

Demo kết quả

 

Từ tác giả:

Nếu có bất kì thắc mắc nào trong bài viết, vui lòng để lại comment dưới mỗi bài ! Mình sẽ không trả lời thắc mắc của các bạn ở facebook hay email !

Nếu trong phần code bạn nhìn thấy nhưng thứ kiểu như &amp; thì đó là lỗi hiển thị, cụ thể 3 kí tự < > & bị biến đổi thành như thế
&amp; là &
&lt;  là <
&gt; là >

Giới thiệu Đào Nguyện 80 bài viết
DIY,chế cháo, viết blog chia sẽ kiến thức về lập trình,điện tử - IoT. Rất mong được giao lưu, kết bạn với các bạn cùng đam mê. Địa chỉ Facebook: https://www.facebook.com/nguyendao207

1 bình luận

Đã đóng bình luận.