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

システム開発エンジニアの西田五郎が運営しております。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でタッチアプリ開発(その1)ハードウェア構成・開発環境等

Raspberry Piで簡単なタッチアプリを開発する手順について書きます。もちろんですがこれからの手順は一例です。他にもいろいろな方法があると思いますので必要な場合は最適と思われる方法を検討して選択 …

Raspberry Piをモニターとキーボードなしで導入する(その2)初期設定とリモートデスクトップ

(※2021/05/02追記 現時点で最新版のRaspberry PI OSでモニターとキーボードなしで導入する手順を書きました。ぜひこちらを見て下さい。) Raspberry Piをモニターとキーボ …

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

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

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

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

ESP-WROOM-02でもセンサネットワーク稼働試験

ESP-WROOM-02でもセンサネットワークを稼働してみます。ESP-WROOM-02でもというのは今までRaspberry Piで稼働してきたのでESP-WROOM-02でも稼働してみようというこ …