Hướng dẫn mqtt trong nodejs
Như chúng ta đã tìm hiểu ở phần trước về MQTT và thực hành cơ bản, ta đã biết được MQTT là gì, cách để sử dụng MQTT và dùng ESP8266 trong MQTT như thế nào, giờ thì mình sẽ đi cụ thể hơn về 2 thành phần của MQTT là MQTT Client và MQTT Broker với một số loại chính cũng như là cách để chúng ta có thể setup, lập trình và test nó. MQTT và ESP8266 | Học ARM MQTT là gì ? Cách sử dụng MQTT
như thế nào ? Các ví dụ về MQTT với ESP8266 được thực hiện ra sao ? Trong bài viết này mình sẽ trình bày một số khái niệm và các bước thực hiện MQTT với ví dụ minh họa cơ bản trên ESP8266 cho mọi người cùng tham khảo. Trước khi bắt đầu mình cùng xem qua một hình ảnh c… MQTT Client2 thành phần publisher và subscriber là đặc trưng tạo nên giao thức MQTT. Các MQTT Client không kết nối trực tiếp với nhau, mọi gói dữ liệu được gửi đi đều thông qua MQTT Broker. Để có thể triển khai các ứng dụng của MQTT Client, chúng ta cần MQTT Broker (sẽ được trình bày trong phần sau). Ở phần này chúng ta sẽ làm quen với giao thức MQTT bằng các ví dụ sử dụng MQTT Client thông dụng và các dịch vụ MQTT Broker miễn phí và phổ biến, 2 trong số chúng là test.mostquitto.org(đã ra đi) và cloudmqtt.com(hết băng thông).
Dưới đây là một số loại MQTT client cơ bản để mình có thể test cơ bản, lập trình với js và lập trình với ESP8266. MQTT LensMQTT Lens là một tiện ích mở rộng của Chrome (Chrome Extension), nó sử dụng trình duyệt Chrome để kết nối đến MQTT Broker cũng như test các tính năng publish/subcribe của giao thức MQTT. Đây là một công cụ rất hữu ích để kiểm tra kết nối đến MQTT Broker và kiểm tra việc gửi và nhận gói tin. Chúng ta sẽ sử dụng công cụ này với dịch vụ MQTT Broker của cloudmqtt được trình bày như các bước bên dưới: Bước 1: Cài đặt trình duyệt Chrome, và tìm kiếm extension MQTTlen với google, link https://chrome.google.com/webstore/detail/mqttlens/hemojaaeigabkbcookmlgmdigohjobjm?hl=vi Bước 2: Thêm và khởi chạy MQTT lens Bước 3 : Tạo 1 MQTT Client kết nối đến MQTT Broker cloudmqtt tự publish và subscribe message của chính mình như các bước bên dưới Chúng ta sẽ tạo 1 connection có tên Client 1 với host name của MQTT Broker là m12.cloudmqtt.com(thông tin theo tài khoản của bạn), Broker này sẽ giúp trao đổi dữ liệu của các Client với nhau và lắng nghe các Client ở port 10769(port được cung cấp bởi cloudmqtt) Ở connection này sẽ đăng kí nhận gói tin tại topic Kết quả Tại mục subrcriptions, chúng ta sẽ nhận được gói dữ liệu đã publish do đã subcribe topic Home/garden/sensor/# như hình bên dưới. MQTT.jsMQTT.js là một thư viện MQTT client, được viết bằng ngôn ngữ JavaScript trên nền tảng Node.js và hỗ trợ MQTT Over Websocket (MOW).Đây là dự án mã nguồn mở và ta có thể tải MQTT.js mới nhất tại MQTT.js Cài đặt Trước tiên ta cần kiểm tra hệ điều hành đã hỗ trợ Node.js trước khi cài đặt MQTT.js. Nếu chưa thì cài NodeJS tại nodejs.org/en/
Khi chạy lệnh này, ta phải khai báo thêm một số thông tin cho dự án như tên, phiên bản, keywords, tác giả,… Sau khi tạo xong, trong thư mục vừa tạo sẽ xuất hiện một file là
Sau
khi cài đặt xong, bạn có thể sử dụng module mqtt để thực hiện việc kết nối MQTT Client với Broker, publish message hay subscribe topic. Tất nhiên, toàn bộ các file liên quan đến thư viện sẽ nằm trong thư mục node_modules, trong thư mục dự án. Lập trình 2 Client này sẽ kết nối vào cùng 1 MQTT Broker. Client A sẽ subscribe topic Client B sẽ subscribe topic Chương trình client A
Chương trình client B
Kết quả Ngoài ra, MQTT.js còn cung cấp thêm các lệnh để có thể tương tác với Broker thông qua terminal. Để làm được điều này, chúng ta cài đặt MQTT.js như một module toàn cục bằng cách sử dụng lệnh:
Bạn có thể kiểm tra bằng cách mở 2 màn hình terminal, ở màn hình 1 (tạm gọi là subscriber) sẽ subscribe vào topic tên là "topicA" bằng lệnh:
Ở terminal thứ 2 (tạm gọi là publisher) thực hiện publish một tin nhắn với nội dung "hello subscriber" tới "topicA":
Các options:
ESP8266 MQTT ClientCó khá nhiều thư viện MQTT cho ESP8266 trên Arudino, ở đây mình dùng thư viện phổ biến là PubSubClient, bạn có thể tải thư viện này và bỏ vào trong thư mục library của Arduino Chương trình Chúng ta sẽ tạo một biến espClient thuộc lớp WiFiClient, biến này được khai
báo là MQTT Client và sử dụng các thuộc tính của thư viện PubSubClient. Tại hàm
Kết quả Mở MQTT lens trên trình duyệt Chrome, tạo 1 connection với host name MQTT BrokerCác dịch vụ MQTT Broker hiện có miễn phí đều dùng để thử nghiệm, ta có thể sẽ phải trả phí dịch vụ với những ứng dụng lớn cần băng thông rộng và tốc độ đáp ứng nhanh, cộng với việc dữ liệu có thể bị tấn công do độ bảo mật thông tin chưa cao, chưa kể là một số thứ miễn phí sau thời gian sẽ bị quá tải và không còn đủ để ta dùng nữa. Do đó cần thiết tự xây dựng 1 MQTT Broker. Việc tự thiết lập 1 MQTT broker giúp chúng ta có thể sử dụng giao thức MQTT trên máy local mà không cần kết nối đến các dịch vụ MQTT Broker ở mạng internet. Quá trình truyền, nhận và xử lí dữ liệu diễn ra 1 cách nhanh chóng cũng như bảo mật thông tin của người dùng. Tuy nhiên, để tạo được 1 MQTT Broker với đầy đủ tính năng của giao thức MQTT đòi hỏi chúng ta phải có kiến thưc tốt về giao thức MQTT cũng như các ngôn ngữ lập trình bổ trợ cho việc xây dựng nó. Để bắt đầu, ta sẽ tạo ra 1 MQTT Broker đơn giản bằng cách dùng 1 module hỗ trợ sẵn có đó là Aedes(Mosca bản cũ). AedesAedes(Mosca) là 1 trong số rất nhiều server MQTT Broker của giao thức MQTT. Tương tự như CloudMqtt, nó có 1 số đặc điểm như sau:
Mục tiêu
Code server Aedes rất đơn giản, chỉ có vài dòng như sau, sau khi server start lên ta sẽ có địa chỉ để truy cập vào là
Code client subscribe Aedes, nhớ thay địa chỉ IP nha anh em
Code client publish
Code client Aedes với ESP8266
Kết quả 4 khung cửa sổ server client và các mô tả publish/subscribe cho anh em quan sát MosquittoMình có bài viết cài đặt mosquitto với ubuntu ở đây các bạn có thể tham khảo Node-red MQTT và ESP8266 | Học ARM Node-red MQTT và ESP8266phối hợp với nhau thì sẽ như thế nào ? Trong bài viết này mình sẽ hướng dẫn về cách để tạo broker MQTT để sử dụng ở local, dùng Node-red tạo giao diện điều khiển ON/OFF cho LED trên NodeMCU(ESP8266) qua MQTT Bắt đầu Để bắt đầu thì mình nghĩ chúng ta nên xem lại bài viết về M… SCHọc ARMMosquitto là 1 MQTT Broker viết bằng ngôn ngữ lập trình C. Một số đặc điểm nổi bật của mosquitto là tốc độ truyền nhận và xử lí dữ liệu nhanh, độ ổn định cao, được sử dụng rộng rãi và
phù hợp với những ứng dụng embedded. Thích hợp cho các hệ thống nhỏ chạy trên máy local như Raspberry Pi, bên cạnh đó Mosquitto cũng được hỗ trợ các giao thức TLS/SSL (các giao thức nhằm xác thực server và client, mã hóa các message để bảo mật dữ liệu). EMQEMQ (Erlang MQTT Broker) là một MQTT Broker được viêt bằng ngôn ngữ lập trình Erlang. Ưu điểm của EMQ là tính ổn định cao, thích hợp để thiết kế các hệ thống lớn do khả năng mở rộng ứng dụng dễ dàng cũng như khá dễ để cài đặt. Ngoài ra EMQ còn hỗ trợ nhiều phương thức xác thực người dùng, phát triển và cập nhật tính năng liên tục bởi cộng đồng developer. Tuy nhiên điểm yếu của MQTT broker này là khó đối với những người mới bắt đầu. Thông tin về EMQ có thể xem tại trang https://www.emqx.io/ Code tham khảo của bài viết các bạn có thể xem tại hocarm/nodejs-socketio-tutorial Contribute to hocarm/nodejs-socketio-tutorial development by creating an account on GitHub. hocarmGitHub Tạm kếtTừ những nội dung đã trình bày ở trên, chúng ta phần nào hiểu rõ về cách thức hoạt động của giao thức MQTT cũng như vai trò của nó trong các ứng dụng IoT. Ngoài ra ta có thể hiểu được cách giao tiếp của MQTT Client và MQTT Server, cách dùng các công cụ để kiểm tra kết nối MQTT, tạo ra server cũng như client để bắn MQTT cho nhau, cuối cùng là dùng ESP8266 như một client để pub/sub data lên server. Thật tuyệt vời phải không các bạn. |