MQTTはIoT機器のコントロールなどに必要な、少量のデータを効率よくやり取りするためのプロトコルです。 httpなどに比べて効率が良く、小さなコンピュータにも組み込みやすいです。
ここではMQTTを使うためにMosauittoをインストールします。 MosquittoはMQTTブローカー(=サーバー)です。それをテストするPublish/Subscribeコマンドも含まれてます。 MQTTの説明は以下などを見てください。
https://www.advanet.co.jp/2020/10/14/mqtt-introduction/
Mosquittoは、Linux, macOS, Windowsなど各種が配布されています。
Raspberry Pi OSでインストールする方法は以下で説明されています。
https://qiita.com/ekzemplaro/items/ab90dd630c3ad8e819ab
要するに、
sudo apt install mosquitto mosquitto-clients
でインストールできて、
sudo systemctl start mosquitto
でMQTTサーバをスタートできます。OS起動時に自動的に起動するように設定するためには、以下のようにします。
sudo systemctl enable mosquitto.service
MosquittoはmacOSやWindowsにもインストールできます。サーバとして立ち上げない場合でも、クライアントの機能が使えるのでインストールしておくと便利です。
ここではmacOSの場合を説明します。インストールには、Home Brewを使うのが簡単です。
インストール方法はこちらにあります。
https://qiita.com/yohei1126/items/de355f540a83743213fb
要するに、
brew install mosquitto
です。macOSでサーバを立ち上げないならば、これだけです。インストール後に、mosquitto_subとかmosquitto_pubとかタイプして動作を確かめてください。引数なしで起動すると、ヘルプが出ます。 また--versionでバージョンを確認できます。
% mosquitto_pub --version mosquitto_pub version 2.0.10 running on libmosquitto 2.0.10.
動作を確認します。 ここでは、192.168.0.134のRaspberry PiでMosquittoサーバが動いていて、 Macからこれを利用します。 Macのターミナルを二つ開きます。
一つのターミナルから、topic名を決めて、メッセージをsubscribe(購読)します。 topicもmessageも任意です。 ここでは、switchというtopic名のメッセージを購読することにします。-vをつけるとメッセージだけでなくトピック名も表示してくれます。
% mosquitto_sub -h 192.168.0.134 -t switch -v
購読してもメッセージが来ないと何も返事はないです。止めたい場合にはコントロールcで止めます。しばらく走らせておきます。
もう一つ、別のターミナルウィンドウから、switchというトピックでtrueを送ってみましょう(出版してみましょう)。
% mosquitto_pub -h 192.168.0.134 -t switch -m true
次にfalseを送ってみます。
% mosquitto_pub -h 192.168.0.134 -t switch -m false
受信用に走らせていた先程のターミナルウィンドウに、これらのメッセージが表示されるはずです。
% mosquitto_sub -h 192.168.0.134 -t switch -v switch true switch false
これで動作確認できました。購読する際のトピック名を、全てに当てはめることもできます。これには#を使います。例えば、
% mosquitto_sub -h 192.168.0.134 -t # -v
とすれば、全てのメッセージを購読できます。
最近のmosquittoのバージョンからセキュリティのデフォルト設定が厳しめになったようです。
まずは、同じマシンからアクセスする場合(アドレスがlocalhostの場合)は、今まで通り、デフォルトの設定のままアクセス可能です。
% mosquitto_sub -h localhost -t switch -v
他のマシンから(IPアドレスを指定して)アクセスする場合は、
/etc/mosquitto/mosquitto.conf
に以下の設定が必要です。
listener 1883
1883ポート(MQTTのデフォルト)をチェックしてくれるようになり、外部からのアクセスが可能になります。
この他のmoaquitto.confの説明は公式ページがわかりやすいです。
https://mosquitto.org/man/mosquitto-conf-5.html
こちらに詳しく書いてありました。