Điều khiển arduino qua MQTT


8

Tôi làm việc với một số bảng arduino và bây giờ tôi cần điều khiển chúng thông qua giao diện web.

Thông qua giao diện web tôi muốn kích hoạt GPIO.

Tôi có hai ý tưởng:

  1. Mỗi arduino hoạt động như một máy chủ web và tôi có thể điều khiển GPIO thông qua trang web Arduino. Về cơ bản một tab trình duyệt cho mỗi arduino.
  2. Sử dụng giao thức MQTT để trao đổi tin nhắn với các bảng arduino. Hơn nữa, tôi nghĩ rằng sử dụng một quả mâm xôi làm máy chủ web và là nhà môi giới MQTT. Mỗi bảng arduino được đăng ký vào một chủ đề cụ thể và thông qua một trang web, được lưu trữ trên quả mâm xôi, tôi có thể điều khiển Arduino GPIO.

Giải pháp đầu tiên tôi rất đơn giản và đơn giản.

Về tùy chọn thứ hai, tôi không biết cách gửi tin nhắn MQTT qua trang web. Tôi đọc rằng tôi cần sử dụng Websocket. Đúng không? Cần tôi viết mã bằng Javascript hay gì?

Câu hỏi thứ hai của tôi là: Nhà môi giới MQTT có thể quản lý cả MQTT và MQTT trên Websocket cùng một lúc không? Nếu không, tôi cần phải sử dụng Websocket cũng trên Arduino.

Một tùy chọn khác là xây dựng tập lệnh Python với GUI cho phép gửi tin nhắn MQTT đến Arduino.

Có cách nào tốt nhất không?

Cảm ơn đã giúp đỡ!

Câu trả lời:


5

Những gì bạn đã viết có vẻ hợp lý với tôi.

Theo truyền thống, MQTT chạy trên TCP 1 , nhưng trình duyệt của bạn không cho phép các trang web mở ổ cắm TCP thô. Có những đề xuất cho phép điều đó, nhưng tôi nghi ngờ chúng sẽ được thực hiện sớm. Vì vậy, trình duyệt của bạn không thể kết nối với nhà môi giới MQTT chỉ hỗ trợ kết nối TCP.

Giải pháp là, như bạn đã xác định, để sử dụng WebSocket Trămthese được trình duyệt hỗ trợ và do đó, một số mã JavaScript có thể được sử dụng để kết nối với nhà môi giới MQTT thông qua trang web. HiveMQ có một ví dụ bạn có thể chơi hoặc bạn có thể thử một thư viện như MQTT.js hỗ trợ giao tiếp WebSocket với nhà môi giới MQTT.

Hầu hết các nhà môi giới, và tất cả những gì tôi biết về việc không quan tâm đến việc khách hàng là khách hàng WebSocket hay TCP. Bạn có thể vui vẻ kết nối cả hai với một nhà môi giới và bạn có thể tìm thấy hướng dẫn về cách định cấu hình nhà môi giới Mosquitto trên Stack Overflow 2 .

Liên quan đến một cách tốt nhất ... tùy thuộc vào bạn. Nếu bạn hài lòng với JavaScript, thì không có vấn đề gì khi sử dụng nó. Nếu Python dễ hơn, hãy làm điều đó (bạn sẽ không cần thiết lập hỗ trợ WebSockets theo cách đó). Bạn thậm chí có thể chỉ sử dụng phần mềm máy khách dựng sẵn nếu bạn không quan tâm đến giao diện người dùng quá nhiều.


1 MQTT 3.1.1 cũng cho phép kết nối TLS hoặc WebSocket; xem phần 4.2 của thông số kỹ thuật . Có một biến thể, MQTT-SN , trong đó yêu cầu về TCP được nới lỏng. Dù bằng cách nào, có lẽ bạn không lo lắng về MQTT-SN cho trường hợp sử dụng của bạn.

2 Lưu ý rằng trên Windows, bản dựng Mosquitto không hỗ trợ WebSocket . Bạn sẽ cần phải tự xây dựng Mosquitto nếu bạn muốn sử dụng nó trên Windows. Ngoài ra, bạn có thể thử một nhà môi giới khác không hạn chế bạn theo cách này.


Cảm ơn Aurora0001 đã trả lời! Ý tưởng của tôi là xây dựng một trang web với mã JS gửi tin nhắn MQTT cho nhà môi giới (Raspberrry Pi). Mối quan tâm duy nhất của tôi là sự cùng tồn tại của kết nối MQTT TCP và Web Secket. Bạn nghĩ gì về Mosquitto Broker? Tôi có thể cài đặt Mosquitto Broker trên quả mâm xôi và chạy nó như một dịch vụ.
Federico

1
Như tôi nói, TCP và WebSockets có thể cùng tồn tại. Nếu bạn đi xuống tuyến WebSockets, thực sự không có vấn đề gì với máy chủ web của bạn (ngay cả một máy chủ tệp tĩnh sẽ hoạt động) vì đó là vấn đề về phía máy khách. Nếu bạn đã thực hiện kết nối MQTT thông qua Pi và sau đó muốn tạo một trang web để kiểm soát điều đó (không phải là websockets), Python có thể sẽ dễ sử dụng hơn vì nó có nhiều khung web hơn C.
Aurora0001

Ý tưởng của tôi là sử dụng một quả mâm xôi làm Nhà môi giới MQTT. Trang web mở một websocket để xuất bản tin nhắn về một chủ đề cụ thể. Cuối cùng, các tin nhắn được định tuyến bởi máy chủ môi giới (trong trường hợp của tôi là Raspberry)
Federico
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.