Internet of Things (viết tắt là IoT) là một kịch bản của thế giới, khi mà mỗi đồ vật, con người được qua một mạng duy nhất mà không cần đến sự tương tác trực tiếp giữa người với người, hay người với máy tính. IoT đã phát triển từ sự hội tụ của công nghệ không dây, công nghệ vi cơ điện tử và Internet. Nói đơn giản là một tập hợp các thiết bị có khả năng kết nối với nhau, với Internet và với thế giới bên ngoài để thực hiện một công việc nào đó.
Mô hình Pub/Sub và Cơ chế hoạt động của MQTT
Trong đó Broker được coi như trung tâm, nó là điểm giao của tất cả các kết nối đến từ Client (Publisher/Subscriber). Nhiệm vụ chính của Broker là nhận thông điệp (message) từ Publisher, xếp vào hàng đợi rồi chuyển đến một địa điểm cụ thể. Nhiệm vụ phụ của Broker là nó có thể đảm nhận thêm một vài tính năng liên quan tới quá trình truyền thông như: bảo mật message, lưu trữ message, logs, ....
Client thì được chia thành hai nhóm là Publisher và Subscriber. Client chỉ làm ít nhất một trong 2 việc là publish các thông điệp (message) lên một/nhiều topic cụ thể hoặc subscribe một/nhiều topic nào đó để nhận message từ topic này.
MQTT Clients tương thích với hầu hết các nền tảng hệ điều hành hiện có: MAC OS, Windows, Linux, Android, iOS, ....
Vị trí của MQTT trong mô hình IoT
Một số ưu điểm nổi bật của MQTT như: băng thông thấp, độ tin cậy cao và có thể sử dụng ngay cả khi hệ thống mạng không ổn định, tốn rất ít byte cho việc kết nối với server và connection có thể giữ trạng thái open xuyên suốt, có thể kết nối nhiều thiết bị (MQTT client) thông qua một MQTT server (broker). Bởi vì giao thức này sử dụng băng thông thấp trong môi trường có độ trễ cao nên nó là một giao thức lý tưởng cho các ứng dụng IoT.
Với những tính năng, đặc điểm nổi bật trên, MQTT mang lại nhiều lợi ích nhất là trong hệ thống SCADA (Supervisory Control And Data Acquisition) khi truy cập dữ liệu IoT.
Tính chất và những đặc điểm riêng
MQTT là giao thức gọn nhẹ được thiết kế chủ yếu để kết nối các thiết bị bị hạn chế nguồn trên các mạng băng thông thấp. Mặc dù nó đã tồn tại trong hơn một thập kỷ nhưng chỉ khi có sự ra đời của M2M (máy để truyền thông máy) và Internet of Things (IoT) mới làm cho nó trở thành một giao thức phổ biến.
Cảm ơn các bạn đã theo dõi bài viết của mình, ở bài viết tiếp theo, mình sẽ hướng dẫn các bạn Tìm hiểu và cài đặt MQTT broker Mosquitto - một MQTT broker nhỏ, nhẹ thường được sử dụng, các bạn cùng đón xem nhé ))
MQTT là một giao thức giao tiếp nhẹ và linh hoạt, được thiết kế cho các ứng dụng IOT (Internet of Things). Giao thức MQTT dựa trên mô hình publish-subscribe, trong đó các thiết bị IOT có thể gửi và nhận các tin nhắn qua một máy chủ trung gian gọi là broker. Trong bài viết này Điện thông minh E-smart sẽ cùng các bạn tìm hiểu về MQTT trong lập trình ESP8266.
MQTT là viết tắt của Message Queuing Telemetry Transport, là một giao thức giao tiếp nhẹ dựa trên mô hình publish-subscribe. Giao thức này cho phép các thiết bị IOT gửi và nhận các tin nhắn nhỏ và đơn giản qua mạng Internet.
MQTT có ba thành phần chính: publisher, broker và subscriber. Publisher là thiết bị gửi tin nhắn đến broker, broker là máy chủ trung gian quản lý các tin nhắn và chuyển tiếp chúng đến subscriber, subscriber là thiết bị nhận tin nhắn từ broker.
MQTT sử dụng khái niệm topic để phân loại các tin nhắn. Topic là một chuỗi ký tự có cấu trúc theo dạng /level1/level2/…/leveln. Mỗi publisher và subscriber có thể đăng ký hoặc hủy đăng ký các topic tùy ý. Broker sẽ chuyển tiếp các tin nhắn từ publisher đến subscriber dựa trên topic của tin nhắn.
MQTT có ba mức độ Quality of Service (QoS) để đảm bảo tính toàn vẹn của các tin nhắn:
ESP8266 là một chip vi điều khiển có khả năng kết nối Wi-Fi và thực hiện các ứng dụng IOT. ESP8266 có thể lập trình bằng nhiều ngôn ngữ khác nhau, nhưng phổ biến nhất là dùng Arduino IDE.
ESP8266 có nhiều phiên bản khác nhau, nhưng phổ biến nhất là NodeMCU và Wemos D1 mini. Các phiên bản này có sẵn các chân GPIO để kết nối với các cảm biến và thiết bị ngoại vi.
ESP8266 có thể sử dụng các thư viện Arduino để hỗ trợ giao tiếp MQTT, như PubSubClient hoặc ESP-MQTT. Các thư viện này cho phép ESP8266 kết nối với broker MQTT, đăng ký và hủy đăng ký các topic, gửi và nhận các tin nhắn với các mức QoS khác nhau.
Chúng ta cần trang bị các thành phần sau:
Trong ví dụ này mình sử dụng HiveMQ broker. Bạn truy cập vào website: https://www.hivemq.com/ sau đó chọn Get HiveMQ
Click vào Sign Up, điền địa chỉ email và mật khẩu sau đó chọn Sign Up để đăng ký
Truy cập và mở Email do HiveMQ gửi đến click vào Confirm my account để hoàn tất đăng ký
Tiến hành đăng nhập tài khoản HiveMQ và thiết lập thông tin cơ bản
Lấy thông tin về địa chỉ URL và port kết nối của broker MQTT
Tạo tên người dùng và mật khẩu truy cập của broker MQTT
Thay thế phần tên wifi, mật khẩu wifi, mqtt_server, mqtt_username và mqtt_password
Trong bài viết này, bạn đã học cách sử dụng giao thức MQTT trong lập trình ESP8266 và IOT. Bạn đã biết cơ bản về giao thức MQTT, cách kết nối ESP8266 với broker MQTT, cách gửi và nhận các tin nhắn MQTT với các mức QoS khác nhau, cách sử dụng cảm biến DHT để đo nhiệt độ và độ ẩm, cách tạo và phân tích các tin nhắn JSON. Bạn cũng đã thử nghiệm chương trình của mình bằng Arduino IDE và WEB CLIENT. Hy vọng bài viết này sẽ giúp bạn có thêm kiến thức và kỹ năng để thực hiện các ứng dụng IOT với ESP8266 và MQTT. Chúc bạn thành công!
MQTT = Message Queue Telemetry Transport
Đây là một giao thức truyền thông điệp (message) theo mô hình publish/subscribe (publish – theo dõi), sử dụng băng thông thấp, độ tin cậy cao và có khả năng hoạt động trong điều kiện đường truyền không ổn định.
MQTT là một giao thức nhắn tin gọn nhẹ được thiết kế để liên lạc nhẹ giữa các thiết bị và hệ thống máy tính. MQTT được thiết kế ban đầu cho các mạng SCADA, các kịch bản sản xuất và băng thông thấp, MQTT đã trở nên phổ biến gần đây do sự phát triển của Internet-of-Things (IoT).
Kiến trúc mức cao (high-level) của MQTT gồm 2 phần chính là Broker và Clients.
Trong đó, broker được coi như trung tâm, nó là điểm giao của tất cả các kết nối đến từ client. Nhiệm vụ chính của broker là nhận mesage từ publisher, xếp các message theo hàng đợi rồi chuyển chúng tới một địa chỉ cụ thể. Nhiệm vụ phụ của broker là nó có thể đảm nhận thêm một vài tính năng liên quan tới quá trình truyền thông như: bảo mật message, lưu trữ message, logs,…
Client thì được chia thành 2 nhóm là publisher và subscriber . Client là các software components hoạt động tại edge device nên chúng được thiết kế để có thể hoạt động một cách linh hoạt (lightweight). Client chỉ làm ít nhất một trong 2 việc là publish các message lên một topic cụ thể hoặc subscribe một topic nào đó để nhận message từ topic này.
MQTT Clients tương thích với hầu hết các nền tảng hệ điều hành hiện có: MAC OS, Windows, LInux, Androids, iOS…
Các bạn có thể tưởng tượng broker giống như một sạp báo. Publisher là các tòa soạn báo. Tòa soạn in báo và chuyển cho sạp báo. Người đọc báo đến sạp báo, chọn tờ báo mình cần đọc (subscriber ).
Bởi vì giao thức này sử dụng băng thông thấp trong môi trường có độ trễ cao nên nó là một giao thức lý tưởng cho các ứng dụng M2M (Machine to machine)
Giao thức MQTT cho phép hệ thống SCADA của bạn truy cập dữ liệu IIoT. MQTT mang lại nhiều lợi ích mạnh mẽ cho quy trình của bạn:
Trong một hệ thống sử dụng giao thức MQTT, nhiều node trạm (gọi là mqtt client – gọi tắt là client) kết nối tới một MQTT server (gọi là broker). Mỗi client sẽ đăng ký một vài kênh (topic), ví dụ như “/client1/channel1”, “/client1/channel2”. Quá trình đăng ký này gọi là “subscribe”, giống như chúng ta đăng ký nhận tin trên một kênh Youtube vậy. Mỗi client sẽ nhận được dữ liệu khi bất kỳ trạm nào khác gởi dữ liệu và kênh đã đăng ký. Khi một client gởi dữ liệu tới kênh đó, gọi là “publish”.
Mỗi kết nối tới broker được đánh giá chất lượng bởi thông số chất lượng dịch vụ (QoS) như sau:
Nhiều nhất một lần: Tin nhắn chỉ được gửi một lần. Client và broker không phải thực hiện thêm bước nào để xác nhận việc gửi có thành công hay không Cơ chế gởi và quên (tiếng Anh: fire and forget, tạm dịch: gởi và quên).
Trường này không ảnh hưởng đến việc xử lý các quá trình truyền dữ liệu TCP bên dưới; nó chỉ được sử dụng giữa người gửi và người nhận MQTT.
Retain là một cờ (flag) được gắn cho một message của giao thức MQTT. Retain chỉ nhận giá trị 0 hoặc 1 (tương ứng 2 giá trị logic false hoặc true). Nếu retain = 1, broker sẽ lưu lại message cuối cùng của 1 topic kèm theo mức QoS tương ứng. Khi client bắt đầu subscribe topic có message được lưu lại đó, client ngay lập tức nhận được message.
MQTT Bridge là một tính năng của MQTT Broker cho phép các MQTT Broker có thể kết nối và trao đổi dữ liệu với nhau. Để sử dụng tính năng này, ta cần tối thiểu 2 Broker, trong đó, một Broker bất kỳ sẽ được cấu hình thành Bridge. Khi cấu hình MQTT bridge, ta cần lưu ý tới các thông số sau:
MQTT được thiết kế một cách nhẹ và linh hoạt nhất có thể. Do đó nó chỉ có 1 lớp bảo mật ở tầng ứng dụng: bảo mật bằng xác thực (xác thực các client được quyền truy cập tới broker).
Tuy vậy, MQTT vãn có thể được cài đặt kết hợp với các giải pháp bảo mật đa tầng khác như kết hợp với VPN ở tầng mạng hoặc SSL/TLS ở tầng transport.
MQTT được thiết kế nhằm phục vụ truyền thông machine-to-machine nhưng thực tế chứng minh nó lại linh hoạt hơn mong đợi. Nó hoàn toàn có thể áp dụng cho các kịch bản truyền thông khác như: machine-to-cloud, cloud-to-machine, app-to-app. Chỉ cần có một broker phù hợp và MQTT client được cài đặt đúng cách, các thiết bị xây dựng trên nhiều nền tảng khác nhau có thể giao tiếp với nhau một cách dễ dàng.
Giao thức MQTT ra đời năm 1999 và tính đến thời điểm hiện tại, MQTT phiên bản 3.1.1 được công nhận chuẩn OASIS.
Có một số dự án thực hiện MQTT. Ví dụ là:
Đã có một số dự án được thực hiện với giao thức MQTT. Ví dụ như: