MQTTを介してarduinoを制御する


8

いくつかのarduinoボードを使用していて、Webインターフェースを介してそれらを制御する必要があります。

Webインターフェースを介してGPIOをアクティブ化したい。

私には2つのアイデアがあります。

  1. 各arduinoはWebサーバーとして機能し、Arduino Webページを介してGPIOを制御できます。基本的に、各arduinoに対して1つのブラウザタブ。
  2. MQTTプロトコルを使用して、arduinoボードとメッセージを交換します。さらに、ラズベリーをWebサーバーおよびMQTTブローカーとして使用すると思います。各arduinoボードは特定のトピックにサブスクライブされてお​​り、ラズベリーでホストされているWebページを通じて、Arduino GPIOを制御できます。

最初の解決策は非常に迅速かつ簡単です。

2番目のオプションに関しては、Webページを介してMQTTメッセージを送信する方法がわかりません。Websocketを使用する必要があると読みました。正しいですか?Javascriptでコードを書く必要がありますか?

私の2番目の質問は、MQTTブローカーがWebSocketを介してMQTTとMQTTの両方を同時に管理できるかどうかです。それ以外の場合は、ArduinoでもWebsocketを使用する必要があります。

別のオプションは、MQTTメッセージをArduinoに送信できるGUIを備えたPythonスクリプトを構築することです。

最善の方法はありますか?

助けてくれてありがとう!

回答:


5

あなたが書いたことはすべて私には理にかなっているようです。

MQTTは伝統的にTCP 1で実行されますが、ブラウザーはWebページが未加工のTCPソケットを開くことを許可しません。それを可能にする提案はありますが、すぐに実装されるとは思えません。そのため、ブラウザーは、TCP接続のみをサポートするMQTTブローカーに接続できません。

解決策は、ご存じのとおり、WebSocketを使用することです。これらはブラウザーでサポートされているため、一部のJavaScriptコードを使用して、Webページ経由でMQTTブローカーに接続できます。HiveMQには、使用できる例があり、またはMQTTブローカーとのWebSocket通信をサポートするMQTT.jsなどのライブラリを試すことができます。

ほとんどのブローカー(そして私が知っているすべてのブローカー)は、クライアントがWebSocketクライアントであるかTCPクライアントであるかを気にしません。両方を1つのブローカーにうまく接続できます。また、Stack Overflow 2で Mosquittoブローカーを構成する方法についての説明を見つけることができます。

最善の方法に関して...それはあなた次第です。JavaScriptに満足していれば、それを使用しても問題はありません。Pythonの方が簡単な場合は、それを行ってください(WebSocketサポートをそのように設定する必要はありません)。UIをあまり気にしない場合は、ビルド済みのクライアントソフトウェアを使用することもできます。


1 MQTT 3.1.1では、TLSまたはWebSocket接続も可能です。仕様のセクション4.2を参照してください。バリアントMQTT-SNがあり、TCPの要件が緩和されています。どちらの方法でも、MQTT-SNについてはユースケースで心配する必要はないでしょう。

2 Windowsでは、MosquittoビルドでWebSocketサポートが有効になっていません。WindowsでMosquittoを使用する場合は、自分でビルドする必要があります。または、このように制限しない別のブローカーを試すこともできます。


返信してくれてありがとうAurora0001!私のアイデアは、MQTTメッセージをブローカー(Raspberrry Pi)に送信するJSコードを使用してWebページを作成することです。私の唯一の懸念は、TCPとWeb Secket MQTT接続の共存でした。Mosquitto Brokerについてどう思いますか?Mosquitto Brokerをラズベリーにインストールして、サービスのように実行できます。
フェデリコ

1
私が言うように、TCPとWebSocketは幸せに共存できます。WebSocketsのルートをたどると、クライアント側のJSが問題になるため、Webサーバーが何であるかは(静的ファイルホストでも機能します)実際には問題になりません。あなたはパイを通じてMQTT接続を行なったし、それから(つまり、WebSocketをしない)、Pythonは、おそらくそれはC.よりも多くのWebフレームワーク持っているとして使用する方が簡単だとコントロールにWebページを作成したい場合
Aurora0001

私の考えは、MQTTブローカーとしてラズベリーを使用することです。WebページはWebSocketを開いて、特定のトピックに関するメッセージを公開します。最後に、ブローカーサーバー(私の場合はRaspberry)によってルーティングされたメッセージ
Federico
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.