シュウジマブログ

Apple製品,技術系の話をするブログ

Raspberry Pi同士でインターネット双方向通信【CloudMQTT】(#3 Node-RED編)

f:id:masa_flyu:20190216134218p:plain

各記事リンク

  1. 説明編
  2. Broker準備編
  3. Node-RED編(本記事です)
  4. C言語Mosquitto送信編
  5. C言語Mosquitto受信編

本編へ

本記事では,Node-REDを用いたMQTT通信のテストを行います.

Node-REDとは

では続けてMQTTクライアントの設定を行います.今回はGUI環境で簡単に使える「Node-RED」を用います.

Node-REDではブロックを組み合わせ様々な通信をGUI上で実装できます.

今回はこのNode-REDを用いてMQTTの送受信を行い,CloudMQTTを経由した通信が可能であることを確認します.

f:id:masa_flyu:20190214004955p:plain

あくまで確認であり,次の記事のC言語プログラムとの関連性はありません.

めんどくさいという方は飛ばしていただいて結構です.

注意:セキュリティについて

本記事では簡単のため,暗号化を省いています.

サーバのユーザ名,パスワードなどが平文で送信されてしまいます.

通信後はパスワードを変更の上,本プログラムを実際の通信用途にそのまま用いることは控えてください.

本記事で用いるCloudMQTTやMosquittoは共に暗号化に対応していますので,追加で設定を行って下さい.

Node-REDの起動

Raspberry PiのOS RaspbianにはNode-REDが標準でインストールされています.

ターミナルで

node-red

と入力するか,デスクトップ左上のメニュー→プログラミングからNode-REDを選択することで,CUIで起動が行われます(この状態ではGUIはでてきません).

ここで,Raspberry Piのブラウザを用いてURLを入力する欄に以下を入力します.

localhost:1880

とすると,Node-REDというページに飛ぶはずです.

f:id:masa_flyu:20190213012007p:plain

Raspberry Piをリモートで動かしているなどの場合には,同一ネットワーク内にあるRaspberry PiのIPアドレスを用いて,「XXX.XXX.XXX.XXX:1880」と入力することで,他のPCからも同じく操作できます.

全体の構成

今回はNode-REDを用いて

データの作成
↓
MQTTによる送信
↓
MQTTによる受信
↓
データの表示

という手順を実装し,MQTTによる通信が可能であることを確認します.

そして,この各工程それぞれのノード(ブロック)がありますので,それを送信側,受信側それぞれに配置していきます.

送信側ノードの配置と結合

送信側のRaspberry PiでNode-REDを開き,以下の2つのノードを配置します.

  • inject(入力)
  • mqtt(出力)

f:id:masa_flyu:20190213222848p:plain

Node-REDの画面左にある一覧からinjectとmqtt(入力ではなく出力)を選んでそれぞれドラッグし,真ん中の空間に配置します.

injectは配置すると名前がtimestampに変わります.

そのあとで,それぞれのノードについている出っ張りの間をドラッグしてつなぎます.

送信側ノードの設定

mqttノード

配置したmqttノードをダブルクリックすると,設定画面が表示されます.

f:id:masa_flyu:20190213225330p:plain

サーバー設定

サーバの欄の右にある鉛筆マーク(編集ボタン)をクリックします.

名前の欄は適当な名前で大丈夫です.

接続タブ内にCloudMQTTの設定を入力します.

設定内容を以下の表に,また設定した様子を図に示します.

タブ Node-RED設定 入力内容(CloudMQTT設定)
名前 適当でよい
接続 サーバ Server
接続 ポート Port
接続 SSL/TLS接続を使用 チェック
セキュリティ ユーザ名 User
セキュリティ パスワード Password

f:id:masa_flyu:20190215225825j:plain

f:id:masa_flyu:20190213230727p:plain

これでサーバーの設定ができました.設定の右上にある「追加」をクリックすることで保存されます.

その他設定

f:id:masa_flyu:20190213234429p:plain

サーバがさきほど設定した名前になっていることを確認した上で,トピック,QoSを設定します.

トピック名は「topic1/sub1」とします(特に意味のある名前ではありません).

トピック名は情報を識別するために必要なもので,入力側と出力側で同じものを用いる必要があります.

またスラッシュ/で区切ることで,より詳細の分類を設定することができます.

injectionノード

injectionノードは情報を定期的に出力することができるノードで,初期設定では時刻を出力します(timestamp).

「繰り返し」を「指定した時間間隔」に設定してください.

名前は適当なもので大丈夫です.

f:id:masa_flyu:20190213235417p:plain

設定できたら設定画面右上の完了を押します.

デプロイ

以上で送信側の設定が完了です.

最後に右上の「デプロイ」をクリックします.

f:id:masa_flyu:20190214000139j:plain

「デプロイが成功しました」と出て,数秒後にmqttノードの下に「接続済」と出てくれば成功です.

接続済とならない場合

接続済が出ない場合はおそらくmqttの設定が間違っています.

SSL Portの番号があっているかなどを確認しましょう.またパスワードをリセットして再設定など試してみましょう.

それでも接続できない場合,Raspberry PiからCloudMQTTの通信が他の要素によって妨げられている可能性があります.

ネットワーク環境を変えたりして試してください.

受信側ノードの設定

受信側のRaspberry Piで同様の設定を行なっていきます.

f:id:masa_flyu:20190214002302j:plain

以下のノードをこの画像のように配置します.

  • mqtt(入力)
  • debug(出力)

mqttノード

mqttノードの設定は送信側と同様です.

f:id:masa_flyu:20190214001538j:plain

サーバの情報もすべて同じものを入力してください.

debugノード

設定項目はありません.

デプロイ

以上ができたらデプロイをクリックしてください.

デプロイが成功して,mqttノードの下に「接続済」と出たら,右のタブをデバッグに切り替えてください.

f:id:masa_flyu:20190214003448j:plain

増加していく数値が1秒ごとに表示されていったら成功です.

CloudMQTTサーバを介して,送信側から与えられた情報を受信することができています.

送信側の情報は日付でしたが,受信側で日付を正常に表示する方法はわかりませんでした.

まとめ

送信の確認ができたので,CloudMQTTまわりの設定は正常にできているということになります.

次の記事ではいよいよC言語でプログラムを書き,データの送受信を目指します.

参考

CloudMQTTを使ってRaspberry PIをクラウドに接続する - Qiita

当ブログをご利用いただく際には免責事項をお読みください。