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

  • 4
    Like
  • 0
    Comment

はじめに

 Raspberry PIやESP-WROOM-02などをネットに接続して、外出先からムフムフしたい、IoTしたい、という方が多くなったと感じます。そこでMQTTを使ったデバイスのIoT化について、簡単ですが説明しようと思い立ちました。
 Qiitaへの投稿は初めてです。読みにくい、情報が足りない、など拙い部分がありますが、生暖かい目で見ていただければ幸いです。

 MQTTは、IoT向けにメッセージ電文を極力軽量化したPub/Sub型メッセージキューイングシステムです。
 本説明におけるシステム構成を以下の図で示します。
s1.PNG

スマホ←→CloudMQTT(Broker)←→CloudServer(Heroku)
              ←→Raspberry PI
と、各々の間でデータをやり取りする方法を説明します。

手順概要

 大きく3つに分けて説明します。

  1. Internet上にあるCloudMQTTの設定(インスタンス設定)
    • message送信、受信テスト
    • MQTTのWebsocket画面から topic “test” にAAAAA、BBBBの2回送信
  2. Internet上にあるCloudServer(Heroku)にてNode-RED起動 subscribe
  3. LAN上にあるRaspberry PIにてNode-RED起動 publish/subscribe
    • message送信、受信テスト
    • Raspberry PI上のNode-REDからタイムスタンプ値を1回送信

1. CloudMQTTの設定

 クラウド上で0円から使用できるCloudMQTTを例に設定例を示します。CloudMQTTのアカウント取得方法は、「CloudMQTT」で検索して下さい。e-mailアドレスがあれば作成できます。

CloudMQTT上でbroker作成

 CloudMQTTでは複数のbrokerインスタンスが作成できます。

  • Control PanelでCreateボタンを押しbrokerを作成します。
  • 無料プランでも複数個設定できます。1インスタンスの同時接続は10までです。

s2.PNG

名前、利用するリージョン、支払い方法の設定

 図に示す箇所に入力します。無料プランを選んでいます。
s3.PNG

インスタンスを確認

 publish/subscribeする場合に必要な情報をメモしておきます。

  • 下記の画面で表示されていない下部分に、アカウント毎に接続要否を設定できます。 s4.PNG

MQTT over websocketsを使って試してみる

 デフォルトで使用できるWebsocketクライアント画面から実行してみます。

  • 当画面から2回メッセージを送信しています。
  • 他のpublisherから1回メッセージが到着しています。

s5.PNG

2. CloudServerの設定

 Herokuを使用していますが、Herokuの加入や設定は省略します。
 Node-REDを悩み無く使うにはBlueMIXが最適だと思いますが、クレジットを登録することがイヤだったためHerokuをゴニョゴニョして使っています。
※HerokuでNode-RED環境を作る場合は、Heroku buttonというワンクリックインストールが利用できます。ただし、中で使用しているaddinのためクレジットの登録(課金されません。0円です)が必要です。「Heroku Node-RED」で検索してみてください。

  • Heroku上のNode-RED画面です。
  • subscriberノードにてメッセージを受信してデバック画面に表示しています。
  • MQTTノードの設定は「3. LAN内のRaspberry PIの設定」と同じのため、そちらで説明します。

s6.PNG

3. LAN内のRaspberry PIの設定

 Raspberry PIの標準OSであるRaspbian(Jessie)はNode-REDがプレインストールされています。入っていない場合は、www.nodered.orgサイトのdocument配下にあるraspberry piの説明を見てインストールして下さい。

Publisher,Subscriberの設定

 Publisher,SubscriberともにServer名入力欄の横の鉛筆マークをクリックすることで詳細なダイアログが出てきます。図は詳細なダイアログを使ってMQTTの設定を行っています。

s8.PNG

s9.PNG

Raspberry PI上でpublish/subscribe

 図はRaspberry PI上のNode-RED画面です。

  • Raspberry PIはLAN上にあります。つまり、publisherかsubscriberであればNATを通過できるためファイアーウォールに穴を空けなくても良いということです。
  • もちろん、LAN側をbrokerにしてInternet側からアクセスするためにはファイアウォールに穴を空ける必要が出てきます。なお、素のNode-REDにはbroker機能(ノード)はありません。

s7.PNG

注意

 セキュリティに細心の注意を払いましょう。

  • WebsocketでCloudMQTTに接続する場合は、CloudMQTTのサンプルHTMLを見ると分かりますが、ID、Pass、Key、URL、PORTがベタ書きで丸見えなので、セキュリティに注意が必要です(認証/認可できたユーザにだけhttpsでHTMLを送るなどの対策が必要)。
  • 通信はSSL/TLSを使用しましょう。
  • http:、ws: 、mqtt:で来たらブロックするかhttps等にリダイレクトする処理をいれましょう。

 細心の注意が必要とはいえ、LAN側にWebServerを立ち上げ、Internet上からアクセスさせる(ファイアーウォールに穴を空ける)ことに比べれば多少かもしれませんが難易度は下がります。Webアプリを作る人にとって常識的な、アプリセキュリティの作法を守ることで通常のWebアプリと同様に開発できます。

 それでは皆さんIoTライフをお楽しみ下さい。

This post is the No.25 article of Node-RED Advent Calendar 2016