はじめに
非同期の双方向通信を使いたくて探していたらMQTTというものを見つけました。
Python, Javaで実装してみたのでそれぞれ記事を分けて紹介します。
- 【MQTT】コマンドベースでMQTTの導入(本記事)
- 【MQTT/Python】MQTTのPub/Subをするクラスを実装した(次回)
- 【MQTT/Java】MQTTのPub/Subをするクラスを実装した(次々回)
動作環境
- Windows 10
- Linux
- Ubuntu 18.04 LTS
- Rasbian buster
MQTT概要
ブローカーを経由してPublish,Subscribeしてデータのやり取りをする通信方法です。
ロボット用のソフトウェアであるROSと同じPub/Subの通信型ですね。(ROS2ではなくROS1の方です)
トピック名とブローカーのホスト名を指定して通信を行います。
このような図が説明としてよく用いられます。ブローカーを通じて双方向通信、一対多の通信ができることがわかります。
細かい説明は下記サイトなど参考にしてください。
ロボットエンジニアのためのMQTT (Message Queue Telemetry Transport) 入門
MQTTライブラリ Paho Python を理解しようとしてみる
JavaでMQTT入門 ローカル環境でPubSubの動作を検証してみる
必要ソフトのインストール
mosquitto(MQTTブローカー/クライアント)のインストール
まずはmosquittoと呼ばれるものをインストールしましょう。
Windowsの場合はインストーラーから、Linuxの場合はコマンドでインストールできます。
1. windowsの場合
以下のサイトの、「Binary Installation」⇒「Windows」のところから自身の環境に合わせてインストーラーをダウンロードしてください。
https://mosquitto.org/download/
2. Linuxの場合
以下の2つのコマンドを実行してください。
# Mosquitto(Broker)をインストール
$ sudo apt-get install mosquitto
# Mosquittoクライアントをインストール
$ sudo apt-get install mosquitto-clients
クライアントライブラリのインストール
次回以降に使うPythonとJavaのクライアントライブラリのインストール方法も記載しておきます。
Python
ライブラリpahoのインストール
$ pip install paho-mqtt
Java
jarファイルを使用しました。
以下のリンクからorg.eclipse.paho.client.mqttv3_1.2.3.jarをダウンロードしてください。
https://repo.eclipse.org/content/repositories/paho-releases/org/eclipse/paho/org.eclipse.paho.client.mqttv3/
起動
① broker(mosquitto)の起動
1. windowsの場合
コマンドプロンプト等を開いて、mosquittoがインストールされたディレクトリに移動します。
※環境変数に追加しておけばディレクトリの移動は必要ないです。
$ cd C:\Program Files (x86)\mosquitto
その後,、-v
オプションをつけて起動します。
$ mosquitto -v
ポートが使用中などのエラーが出る際はwindowsのサービスとして既に起動している可能性があります。アプリの検索で「サービス」と検索して一覧から 「Mosquitto Broker」を探してください。以下のように実行中となっていれば大丈夫です。
ない場合はファイアウォール設定から1883ポートの設定を見直してください。
再起動後は上記のサービスに登録され、手動でmosquittoを起動することが不要な場合があります。
2. Linuxの場合
ブローカーの開始と確認、停止は以下のコマンドで行います。
# システムの起動
$ sudo systemctl start mosquitto
# システムの状態確認
$ sudo systemctl status mosquitto
# システムの終了
$ sudo systemctl stop mosquitto
② Publisher,Subscriberの起動
ここでは、ホスト名は localhost、トピック名はtestとします。
トピック名は自由ですが、送受信したい PublisherとSubscriberで合わせてください。
オプションの -h
でホスト名、-t
でトピック名を指定します。Publisherの場合、送信メッセージは-m
で指定します。
※Windowsの場合はインストール先のディレクトリに移動するか、環境変数にインストール先のディレクトリを追加してください。
インストール先のディレクトリ:C:\Program Files (x86)\mosquitto
(環境によります)
# WindowsもLinux も同じコマンド
$ mosquitto_sub -h localhost -t test
次に,新しいコマンド画面を立ち上げて、
# WindowsもLinux も同じコマンド
$ mosquitto_pub -h localhost -t test -m "test message"
publishするときに指定したメッセージ内容(test message)がSubsciberの画面に出てくれば成功です。
今回は同一のPC内でしたが、brokerはホスト名を指定すればよいので外部のPCにつなぐこともできます。
おわりに
MQTTの導入を行いました。
次からは実際のプログラムで使っていこうと思います!
⇒Pythonの例、Javaの例です。