おんどとりでIoT その5 MQTT

node-REDでMQTTブローカ経由で温度データをやり取りする

 温度を測定して、どこかに保存するとき、受け取るプログラムは常に受け取る準備をして待っていなくてはなりません。データを送信する側と受け取る側の両方を同時に開発して、テストを行わないと動作確認ができません。

 MQTTブローカというサーバにセンサを送ると、送るだけ、受け取るだけが独立して動作します。三つから構成され、node-REDには最初から利用できるノード・アイコンが用意されています。

  • センサ・データを送るパブリッシャ
  • 中継のMQTTブローカ
  • MQTTブローカからセンサ・データを取り出すサブスクライバ

 MQTTブローカは、インターネット上にフリーで使えるサーバもありますが、ここではラズパイを使います。ラズパイではnode-REDを起動していると、裏で動いています。

MQTTブローカに温度データを送る

 左のノード・パレットからmqttパブリッシャを置き、ダブルクリックで編集画面を開きます。MQTTで重要なのが、Topicです。ここでは「ondo」と入れます。ラズパイではUTF-8が扱えるので漢字も入りますが、アスキ・コードにしておきます。QoSは確実に通信経路でデータを送る「2」にします。近距離で安定している家庭内LANなので、0、1のいずれでもよいと思います。

 MQTTブローカのURLの入力は、欄の右にある鉛筆のアイコンをクリックします。ラズパイのIPアドレスを入れます。

MQTTブローカからデータを受信する

 次に、左のノード・パレットからmqttサブスクライバを置き、ダブルクリックで編集画面を開きます。MQTTブローカのURLはすでに入っていると思いますが、確認します。Topicは「ondo」を入れます。

 Deployを押し、get temp(inject)のボタンを押すと、MQTTパブリッシャとサブスクライバがMQTTブローカにconnectします。通信できました。

 debug欄に温度が表示されます。

 MQTTブローカには、いろいろなパブリッシャからデータが送られます。サブスクライバから自分にとって必要なデータを得るにはtopicの文字列(ここでは「ondo」)を同じにすればよいのです。

連続して温度データを送る

 1秒ごとに、温度データを送る設定をします。get temp(inject)をダブルクリックし、編集画面で、Repeatのnoneをintervalに変更します。デフォルトで1秒間隔になっているので、完了をクリックします。

 debugタブのうち上の二つの右にあるボタンを押して非表示にします。Deployを押すと、次の動作を行います。

  • 1秒ごとにおんどとりに温度を送るように要求を出し
  • 受け取ったデータからch1の温度データを取り出し
  • MQTTブローカに温度データをパブリッシュし
  • MQTTブローカから温度データをサブクライブし、debug欄に表示する

どこでも受信

 MQTTブローカをtest.mosquitto.orgに変更します。Deployを押して、正常に動作することを確認します。

 AndroidタブレットにGooglePlayからMQTT Clientをインストールします。Serverはtest.mosquitto.orgにつなぎ、Topicはondoにしたら、ラズパイが送った温度を受信します。