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

システム開発エンジニアの西田五郎が運営しております。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

執筆者:

関連記事

Raspberry PiでC言語版Lチカを試す(その2)レジスタを操作する

Raspberry PiでC言語を使ったLEDの点灯、消灯(いわいるLチカ)を試してみました。今回は2回目です。前回デバイスドライバを利用する方法を書きました。今回はレジスタを直接操作する方法を使いま …

Raspberry Piでタッチスクリーン付3.5インチTFTを使ってみた

Raspberry Piでタッチスクリーン付モニタを使ってみました。PiScreenという商品名で3.5インチTFT(480×320) でタッチスクリーン付です。以下の商品です。以下は完成品 …

Raspberry Pi 3でのコンソールケーブル利用と初期設定

Raspberry Pi 3 でコンソールケーブルを利用する方法と初期設定についてです。 以下のページ等で今までこのテーマについて書きました。 Raspberry Piをモニターとキーボードなしで導入 …

Raspberry PiでIoT(温度・湿度・気圧データ編 その3)データ表示とグラフ表示

Raspberry PiでIoT 温度・湿度・気圧データ編の3回目です。前回までで、Raspberry Piから温度、湿度、気圧データをWebサーバへ送信してそのデータを蓄積出来るようになりました。今 …

レーザーカッターでセンサーのケースを作ってみた

前回のセンサー(温湿度センサーBME280)のケースをレーザーカッターで作ってみました。もちろん3Dプリンターで作る方法もあると思いますが単純なボックス型ならレーザーカッターの方が加工時間が短いと思っ …


Notice: Trying to access array offset on value of type null in /virtual/indpsys/public_html/independence-sys.net/main/wp-content/plugins/amazonjs/amazonjs.php on line 637

Notice: Trying to access array offset on value of type null in /virtual/indpsys/public_html/independence-sys.net/main/wp-content/plugins/amazonjs/amazonjs.php on line 637