MQTTって何?と思って試したのが↓。。
あれから2か月。
MQTTって、双方向でリアルタイムな通信ができるのが魅力かなぁ。
しかも、MosquittoやったらWebSocketに対応してるんで、端末に依存せぇへんWEBブラウザでデバイスを管理できる。
更に、デバイスの状態を同報できるんで、複数の端末でデバイスを管理できる。
で、とりあえず、あれこれ増えてきたRaspberry Piを管理するものを作ってみた。
下の写真
– 左側画面(Win10)と右側画面(Linux LMDE2へリモート接続して操作)
– 片方の画面で操作した結果が両方の画面に反映される。
作ったのは、Raspberry Pi と Raspberry Pi 2 + Apple Pi とチャットやデバッグ用の制御ができるFreeのForm。
操作感
構成
__MQTT Broker__
mosquitto version 1.4.8
MQTT v3.1 broker
Web Socketの設定
/etc/mosquitto/mosquitto.confに以下を追加
listener 1883 listener 9090 127.0.0.1 protocol websockets
__WEBクライアント__
Ajaxで実現している。
MQTTの処理はmqttws31.jsを使用。
__Raspberry Pi__
Publisher
mosquitto-clientsを使用。
自作の手間を省いてsystem関数でmosquitto_pubを実行。
Subscriber
libmosquitto0-devを使用して自作。
静的ライブラリ化したんで、使い勝手はエエ感じ。
参考にしたサイトは新しいバージョンのMosquittoの開発パッケージをダウンロードして使用してるけど、自分の場合はリポジトリを変えずにそのまま使用したんで、かなり古いバージョンがインストールされた。
バージョンによって関数の引数が異なっているんで、ちゃんとヘッダを確認しながら作りましょう。。ってことで、ヘッダは↓。
ヘッダ: /usr/include/mosquitto.h
Radioの制御
以前、赤外線のリモコンを使用して作ったネットラジオをMQTTでも制御できるよう変更。
今回はMQTTのMessage受信をイベントとしてMessageをリモコンのスイッチに読み替えて制御した。
フローの朱書き部分が今回追加した処理。
参考にしたサイト
Mosquitto .. An Open Source MQTT v3.1/v3.1.1 Broker
mosquittoでMQTTとWebSocket両方に対応させる
Eclipse Paho JavaScript Client
ピンバック: MQTTでIoTデバイスを管理 (ESP-WROOM-02で監視カメラ) | IT社会の崖下で...その2