Giao thức MQTT: Ưu điểm và ứng dụng

   Trong tập giao thức TCP/IP hiện nay có rất nhiều giao thức trên lớp ứng dụng (Application layer), mỗi giao thức trên lớp ứng dụng đều có một mục đích sử dụng riêng. Nếu như HTTP là giao thức truyền nhận siêu văn bản thường dùng trong các ứng dụng web, FTP là giao thức truyền nhận tập tin,… thì MQTT là một giao thức truyền tin theo tiêu chuẩn OASIS cho Internet of Things (IoT). MQTT được thiết kế như một phương tiện truyền tải tin nhắn cực kỳ nhẹ, lý tưởng để kết nối các thiết bị từ xa trong hệ thống IoT.

   Đây là bài viết đầu tiên trong chuỗi bài viết hướng dẫn thực hiện kết nối MQTT trên các dòng vi điều khiển STM32 thông qua các module cellular như  SIM800C/900A, UC15 Quectel 3G Module và Quectel LTE EC21 Module.

   Bài viết này giúp cho các bạn nắm được các thông tin khái quát về MQTT, vì sao MQTT là một trong những giao thức phổ biến dùng cho các thiết bị IoTs và ứng dụng MQTT trong các sản phẩm trên thị trường hiện nay.

[HỌC ONLINE: LẬP TRÌNH VI ĐIỀU KHIỂN STM32, VI XỬ LÝ ARM CORTEX – M]

1. Giới thiệu

   MQTT viết tắt của MQ Telemetry Transport (trước đó MQTT được định nghĩa là Message Queuing Telemetry Transport), là giao thức ở tầng ứng dụng chạy trên nền TCP thuộc tập giao thức TCP/IP.

   Để giao thức này hoạt động được, cần có một thành phần trung tâm gọi là Broker và các thiết bị/ứng dụng khách còn được gọi là các Client, các Client sẽ kết nối đến Broker. Broker và Client sẽ “nói chuyện” với nhau thông qua các gói tin MQTT được xây dựng dựa theo chuẩn OASIS. Tiêu chuẩn này còn định nghĩa các mức quality of service để đảm bảo độ tin cậy khi truyền nhận gói tin, các kịch bản always connected (luôn giữ kết nối) hoặc sometimes connected (thỉnh thoảng kết nối); khả năng mở rộng để hỗ trợ kết nối số lượng lớn thiết bị…

Các phiên bản MQTT:

– MQTT v3.1

– MQTT v3.1.1

– MQTT v5

– MQTT-SN v1.2

Trong đó, MQTT v3.1.1 đang được sử dụng phổ biến nhất hiện nay. Để phân biệt sự khác nhau giữa các phiên bản MQTT, các bạn có thể tham khảo thêm tại đây.

2. Kiến trúc

   Giao thức MQTT có kiến trúc theo mô hình Publish/Subscribe giúp truyền tải dữ liệu giữa các thiết bị, ứng dụng với nhau. Dữ liệu trong giao thức này là một chuỗi nhị phân (binary) chứ không phải chuỗi văn bản (text string), được định dạng theo gói tin command hoặc gói tin command acknowledgement.

Các thành phần lõi trong kiến trúc của MQTT:

– MQTT Broker: Được cung cấp dưới dạng mã nguồn mở hoặc các phiên bản thương mại, có thể đi kèm với các dịch vụ điện toán đám mây. Công việc của Broker là lọc các tin nhắn dựa trên topic, sau đó phân phối các tin nhắn đến các thiết bị/ứng dụng đã đăng ký topic đó. Các bạn có thể tham khảo một số MQTT Broker như: HiveMQ , Mosquitto, MQTTRoute, Jmqtt, … 

– MQTT Client: Là các thiết bị/ứng dụng Client kết nối đến Broker để thực hiện truyền nhận dữ liệu. Hiện nay có rất nhiều mã nguồn mở MQTT Client được viết dưới nhiều ngôn ngữ khác nhau như HiveMQ MQTT Client được phát triển dựa trên ngôn ngữ Java, Eclipse Paho dựa trên C/C++, Python, …

– Topic: Mỗi MQTT Client thực hiện truyền/nhận dữ liệu với nhau thông qua các Topic được quản lý bởi Broker. Một Client đăng ký nhận dữ liệu được gọi là một Subcriber còn một Client gửi dữ liệu đi được gọi là một Publisher. Để nhận dữ liệu từ Publisher, đầu tiên Subcriber phải subscribe (đăng ký theo dõi) đến một Topic, sau đó bất cứ Client nào publish dữ liệu đến đúng Topic, thì Broker sẽ lọc và chuyển tiếp gói tin đến đúng Subscriber đó. Một Client có thể subscribe hoặc publish đến nhiều Topic khác nhau. Chi tiết về Topic, định dạng các gói tin MQTT sẽ được nêu rõ ở phần tiếp theo của chuỗi bài viết. 

(Nguồn: mqtt.org)

3. Ưu điểm

Một số ưu điểm của MQTT:

– MQTT là một “light weight protocol” giúp Broker và Client trao đổi gói tin có kích thước nhỏ, không chứa nhiều các dữ liệu phụ thêm vào nên có thể truyền nhận một cách mượt mà trong điều kiện bị giới hạn về băng thông đường truyền.

– Là một giao thức kết nối M2M/Internet of Things, MQTT được thiết kế để truyền tải tin nhắn trong các ứng dụng yêu cầu công suất thấp, kích thước bộ nhớ vi điều khiển nhỏ; băng thông thấp; đảm bảo việc truyền nhận các gói tin diễn ra thành công, …

– Với giao thức MQTT, các gói tin sẽ được truyền đi theo hai chiều: từ thiết bị đến Broker và từ Broker đến thiết bị. Một Client có khả năng gửi gói tin đến nhiều Client khác trong một lần gửi và nó cũng có thể nhận nhiều gói tin khác nhau từ các Client khác nhau. 

– MQTT có thể mở rộng quy mô để kết nối với hàng triệu thiết bị IoT.

– MQTT có 3 mức Quality of Service (QoS) được xác định đảm bảo độ tin cậy trong việc gửi gói tin. Các bạn có thể đọc thêm về QoS ở tài liệu tham khảo cuối bài.

– MQTT giúp dễ dàng mã hóa tin nhắn bằng TLS và xác thực phía client bằng các phương thức xác thực như OAuth. 

– Hiện nay, các nền tảng điện toán đám mây lớn như Amazon WebService, Google IoT Core, Microsoft Azure,… đều hỗ trợ giao thức MQTT giúp các nhà phát triển dễ dàng thử nghiệm và sử dụng.

4. Ứng dụng

  Với những ưu điểm của giao thức MQTT, ngày nay con người đã sử dụng MQTT vào nhiều ngành công nghiệp. Một số ứng dụng của các hãng lớn có thể kể đến như:

– Lĩnh vực Automotive: Ứng dụng BWM Car-Sharing dựa trên HiveMQ. Vào năm 2014 BMW Mobility Services bắt đầu sử dụng HiveMQ làm nền tảng tin nhắn cho dịch vụ car-sharing của họ. Đến hiện tại nền tảng HiveMQ đã hỗ trợ hơn 80000 clients được kết nối đồng thời, tạo ra hơn 90000 tin nhắn trên mỗi phút.

– Lĩnh vực Logistics: Công ty Matternet, California đang xây dựng cách vận chuyển hàng hóa thông qua máy bay không người lái (drones), và họ đã sử dụng HiveMQ để đảm bảo trạng thái thời gian thực của Drone được theo dõi liên tục. Nhờ cơ chế đảm bảo vận chuyển tin nhắn dựa trên các mức độ quality of service của MQTT và giao thức public/subcribe của MQTT hỗ trợ giao tiếp hai chiều giữa máy bay không người lái và nền tảng đám mây, vì vậy việc người vận hành có thể tương tác với máy bay không người lái trong chuyến bay được đảm bảo.

– Lĩnh vực Manufacturing: Năm 2018, Celikler Holding bắt đầu sử dụng MQTTRoute để giám sát việc phát điện từ nhiều nhà máy điện. Việc áp dụng ưu điểm bảo mật của MQTT đã mang lại lợi ích cho Celikler Holding bằng cách cung cấp giao tiếp an toàn giữa các nhà máy điện.

– Lĩnh vực Smart Home: Home energy monitoring and control và Home patient monitoring của IBM Telemetry.

– Lĩnh vực Consumer Products: Smart Kitchen Appliances with HiveMQ – CASO Design. Công ty CASO Design đã ứng dụng MQTT vào các thiết bị nhà bếp thông minh của họ vì: các thiết bị nhà bếp có thể được quản lý từ bất cứ đâu; dữ liệu được chia sẻ giữa các ứng dụng khác nhau; nhiều người dùng có thể điều khiển cùng một thiết bị;…

–  Và rất nhiều ứng dụng trong rất nhiều lĩnh vực khác nữa. Các sản phẩm của TAPIT cũng sử dụng giao thức này. 

5. Tham khảo MQTT: https://mqtt.org/

6. Tìm hiểu thêm các bài viết về MQTT tại TAPIT

– Hiểu đúng về mối quan hệ QoS giữa Publisher và Subscriber trong giao thức MQTT

Bảo mật cho giao thức MQTT trong Internet of Things

– Tổng hợp các bài hướng dẫn Internet of Things với NodeMCU ESP8266 và ESP32

– Thiết kế hệ thống IoT đơn giản dùng giao thức MQTT kết hợp PHP-MySQL và Node.js

– Hướng dẫn xây dựng ứng dụng OpenHAB tích hợp MQTT Binding 2.4.0

– Hướng dẫn cài đặt Broker Mosquitto trên Windows

– Hướng dẫn kiểm tra Broker Mosquitto sau khi cài đặt

– Tổng hợp các bài hướng dẫn Lập trình vi điều khiển STM32

Chúc các bạn thành công!

TAPIT ARM R&D