株式会社インデペンデンスシステムズ横浜

システム開発エンジニアの西田五郎が運営しております。Raspberry Pi や Arduino その他新規開発案件のご依頼をお待ちしております。

IoT Raspberry Pi

Raspberry PiでIoT(MQTTで遠隔操作編 その1)MQTTでの通信

投稿日:2017年4月23日 更新日:

Raspberry PiでIoTのMQTTで遠隔操作編のシリーズを始めます。実際に動作させてみるということを重点として進めます。ここでの遠隔操作は2台のRaspberry Pi間でインターネット経由のMQTTを利用して操作します。遠隔操作の動作としては相手側のRaspberry PiのGPIOを制御します。以下の記事で書いたリレーを使ってAC100Vのクリップ型のライトをオンオフします。
Raspberry PiでAC100V(ソリッド・ステート・リレー)制御

今回のシリーズ一覧です
RaspiでIoT(MQTTで遠隔操作編 その1)MQTTでの通信
RaspiでIoT(MQTTで遠隔操作編 その2)MQTT Brokerの構築とPythonでのpub/sub
RaspiでIoT(MQTTで遠隔操作編 その3)Raspberry PiのGPIOとHeroku連動Sub編
RaspiでIoT(MQTTで遠隔操作編 その4)Raspberry PiのGPIOとHeroku連動Pub編

以下のような構成です

以下のようにライトのOn/Offを切り替えます。

今回のシリーズその1は遠隔操作を可能にするMQTTについてです。以下のような内容で進めます。

1.MQTTとは
2.MQTTの通信のポイント
3.Mosquittoのインストール
4.Mosquittoで通信の確認

1.MQTTとは
MQTTとはIoTでもよく利用されているプロトコルです。IBM社とEurotech社のメンバーにより考案されたプロトコルで、Publish(パブリッシュ)/Subscribe(サブスクライブ)型プロトコルです。

より詳細は、以下等を参照して下さい。
MQTT Version 3.1.1
今現在の最新(Ver3.1.1)より前のバージョン(Ver3.1)のようですが、以下の日本語でのページもあります。
MQTT V3.1 プロトコル仕様

2.MQTTの通信のポイント
実際に通信を行うためのポイントです。まず、実際のPublish/Subscribeでの通信は以下のようになります。

Publisherがメッセージの送信側で、Subscriberがメッセージの受信側になりbroker(ブローカー)がメッセージの中継を行います。

このメッセージ通信をTopic(トピック)という仕組みで行います。このトピックは/(スラッシュ) 区切りで指定します。このTopicを指定してメッセージを送信します。

他にも、QoS 、Will、Retain等の仕様がありますが、ここではMQTT自体を実装するのではなくて利用してみるということで仕様はこのあたりにします。次に実際にMosquitto(MQTTのオープンソース実装)で通信を試してみます。

3.Mosquittoのインストール
MosuittoはMQTTのオープンソース実装です。Raspberry Piでは比較的簡単にインストール出来てPublish/Subscribeの処理が確認出来ます。Raspberry Piが複数台あれば、Broker、Publisher、Subscriberと分けて動作させると分かりやすいと思いますが、ここでは1台で試します。

Mosquittoのサイトは以下です。
Mosquitto.org

Mosquitto(Broker)をインストールします。
$ sudo apt-get install mosquitto
以下のように完了しました。(※何回かやり直したので実際のメッセージとは違う場合もあるかとは思います。ご了承下さい。)

これで以下のように状態を確認します。
$ sudo service mosquitto status

activeが確認出来ます。
Mosquittoクライアントをインストールします。
$ sudo apt-get install mosquitto-clients

以上でインストールは完了です。

4.Mosquittoで通信の確認
ここではとにかく簡単なやりとりを確認します。まず、subscriberを起動します。
$ mosquitto_sub -h localhost -t tp1/sub1
これで、localhostのBroker(サーバ)のtp1/sub1というトピックをsubscribeします。待ちの状態になります。

次に、publishを実行します。こちらはすぐに完了します。
$ mosquitto_pub -h localhost -t tp1/sub1 -m Hello

subscriber側を確認します。Helloが届いています。

実際にはもっといろいろと指定出来ますが、ここではここまでにします。

今回はここまでにします。次回はインターネット上にBrokerを構築します。実際にはHerokuを使ってCloudMQTTを構築します。

AdSense

AdSense

-IoT, Raspberry Pi

執筆者:

関連記事

SkyWayでRaspberry Piの遠隔操作(その2)SkyWayからの操作

前回の続きです。全体的にはSkyWayを利用してRaspberry Piの遠隔操作をしてみようという内容です。 前回はRaspberry Pi側でのブラウザ(JavaScript)からMQTT ove …

Raspberry Pi 3でモニタとキーボードなしで設定する方法

Raspberry Pi 3でモニタとキーボードなしで設定する方法についてです。 以下のような条件ごとに方法を確認しました。あちらこちらで書いてしまったのでここで整理させてください。当然環境によって違 …

Raspberry PiでのNode.jsの導入(その2)Webサーバ的なプログラム

Raspberry PiでのNode.jsの導入の2回目です。前回はインストールと動作確認でした。今回はもう少しWebサーバ的なプログラムを作成してみます。今現在で日本のNode.jsの公式ページにも …

Raspberry PiでIoT(MQTTで遠隔操作編 その3)Raspberry PiのGPIOとHeroku連動Sub編

Raspberry PiでIoT MQTTで遠隔操作編の3回目です。2台のRaspberry Piでインターネット経由でGPIOを操作するというテーマで書いています。前回はHerokuでMQTT Br …

Raspberry PiでC言語版Lチカを試す(その1)デバイスドライバ利用

Raspberry PiでC言語を使ったLEDの点灯、消灯(いわいるLチカ)を試してみました。やはりGPIOの入出力に関してはこのLチカをやってみないと始まらないというところでしょうか。今回はGPIO …