Makato-kan が 2022年10月08日20時21分06秒 に編集
ラズパイでテストできるようにした
タイトルの変更
ラズベリーパイにMQTTブローカーの設定をする
ラズベリーパイにMQTTブローカーの設定して pub/subを試してみる。
本文の変更
ラズベリーパイにMQTTブローカーの設定をする方法です。 すいません、かなり雑な説明です。詳しい事はCQ出版社の月刊誌インターフェース11月号の付録を 読まれると良いかと思います。
## 初めに: ラズベリーパイにMQTTブローカーの設定をする方法です。 MQTTはaptコマンドでインストールできるmosquittoを使います。 センサーデータを転送する目的に使うので、パスワード設定だけしています。 ## 用語: ブローカー データの受信・配信をする機能 パブリッシャー データの送信をする機能 サブスクライバー データの配信をうける機能 トピック 配信するデータの事 ※トピック以外はプログラムで、ブローカーとパブリッシャーが常時起動しているプログラムになるイメージです。 ※ここではmosquittoというプログラムを使います。
![MQTTのイメージ](https://camo.elchika.com/4f3606bb298a9d463481acf54afd1ecd2ff9901a/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f66373831653764372d303336352d343131662d613663362d3663623238333931346464342f31613865346631382d653637372d343661352d396464342d393339633663303337326634/)
パブリッシャー: データを送信している人 ブローカー:パブリッシャーからのデータを受信する人 データをサブスクライバーに送信する人 サブスクライバー: パブリッシャーのデータを受け取る人 トピック:配信するデータのこと
### 必要な物:
無線LANの親機
ラズベリーパイ (ラズパイ3以上のモデルが良いです)
M5StickやらESP-WROOM-02等
ネットワーク接続された、M5StickやらESP-WROOM-02等
### 概要: ラズベリーパイにMQTTのブローカーを設定します ESP-WROOM-02などでMQTTのパブリッシャーを設定し データを送信できるようにします
### 操作1:
ラズベリーパイにMQTTブローカーとサブスクライバーを設定し データを受信できるようにします。
### ブローカーの設定: ソフトのダウンロード
ソフト(mosquitto)のダウンロード
``` $ sudo apt install mosquitto ```
インストール終了するとmosquittoというサーバーが 動くようになります。
インストール始まると色々聞いてきますが、yesで答えると良いです。 終了するとmosquittoというサーバーが動くようになります。 ``` $ ps ax |grep mosquitt 704 ? Ss 20:53 /usr/sbin/mosquitto -c /etc/mosquitto/mosquitto.conf ```
### パスワードの設定:
パスワードは テキストエディタなどで "ユーザ名:パスワード"のファイルを作り
テキストエディタなどでパスワードファイルを新規作成し、
```
$ mosquitto_passwd
sudo vi /etc/mosquitto/passwd.txt
```
コマンドで暗号化します。 暗号化したファイル名を/etc/mosquitto/mosquitto.confに 指定すれば出来上がりです。
中身は ``` pi:password ``` といったファイルを作成します。
### パブリッシャーの設定: M5StickCでMQTTのパブリッシャーを使った記事があります。 [M5StickCで二酸化炭素と温度・湿度の測定値をMQTT送信します。](https://elchika.com/article/7c2fd4bb-3b37-45d0-b8e9-d75bdd828f0a/) 他にESP-WROOM-02で設定して温度湿度データを送信する記事があります。 [ESP-WROOM-02とDHT11で温度・湿度をMQTT送信するよ](https://elchika.com/article/44f9743e-ecd2-4b92-9204-5a124d91d3ea/) ### サブクスライバーの設定: ソフトのダウンロード
"ユーザ名:パスワード"のファイルを作り暗号化します。
```
$ sudo mosquitto_passwd ``` 暗号化したファイル名を /etc/mosquitto/mosquitto.confに 追記すれば出来上がりです。 追記はどこでもいいです 追記例 ``` password_file /etc/mosquitto/passwd.txt ``` ## 操作2: ラズベリーパイで動作試験もしたいので以下のソフトを組み込みます。 これはラズベリーパイにパブリッシャーとサブスクライバーのソフトをインストールしています。 ```
$ sudo apt install mosquitto-clients ```
サブスクライバーコマンド例 ``` $ mosquitto_sub -h MQTT.local -u pi -P password -t sensor1 -F @Y,@m,@d,"@H:@M",%p
## データ送受信のテスト: ラズベリーパイでデータの送信受信を試してみます。 ターミナル画面を2つ用意して1つを送信、もう一つを受信用につかいます。 -tで指定するトピックはsensor1です データ受信コマンド
```
受信データを記録したい場合は標準出力をファイルにしてコマンド実行しました。
mosquitto_sub -h MQTT.local -u pi -P password -t sensor1 -F @Y,@m,@d,"@H:@M",%p
```
$ mosquitto_sub -h MQTT.loca -u pi -P password l -t sensor1 -F @Y,@m,@d,"@H:@M",%p >>/home/pi/senser.csv
コマンド実行するとプロンプト表示がなくなり 受信待ち状態になります。 ### パブリッシャーのテスト: もう一つのターミナル画面で以下のコマンドを実行します。
```
※ブローカーホスト名 MQTT.local トピック名 sensor1
mosquitto_pub -h MQTT.local -u pi -P password -t sensor1 -m testt ``` そうするとmosquitto_subを実行しているターミナルに受信時刻とtesttという文字が表示されます そうすれば 送受信成功です。
### ちょっとした事: 一つのトピック名で複数のパブリッシャーがあると そのトピック名を指定したサブスクライバーは複数の パブリッシャーから送られたデータをすべて受け取る事になります。 ある意味便利かもしれませんが、同じタイミングでデータ送信 された場合取りこぼしなく受け取れるかは試した事ありません。
## その他: 拙い文章ですが、M5StickCとESP-WROOM-02でセンサーの値をMQTTで送信する記事を 作成しておりました。 ご参考になれば幸いです。 [M5StickCで二酸化炭素と温度・湿度の測定値をMQTT送信します。](https://elchika.com/article/7c2fd4bb-3b37-45d0-b8e9-d75bdd828f0a/) 他にESP-WROOM-02で設定して温度湿度データを送信する記事があります。 [ESP-WROOM-02とDHT11で温度・湿度をMQTT送信するよ](https://elchika.com/article/44f9743e-ecd2-4b92-9204-5a124d91d3ea/)