Help us understand the problem. What is going on with this article?

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

More than 3 years have passed since last update.

はじめに

 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ライフをお楽しみ下さい。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした