ラズパイにMQTT Broker、Windows11にMQTTXをインストールしてみる

お仕事でMQTTの話が出てくることが多いので、どんなものか理解するために家のラズパイにMQTTの環境を作ってみました。

## Raspberry Pi 5にMQTT Brokerをインストールする

今回はMQTTのパッケージとしてmosquittoを使っていきます。

### mosquittoパッケージのインストール
```
sudo apt install mosquitto mosquitto-clients
```

### mosquitto(MQTT Broker)の有効化
```
sudo systemctl enable mosquitto
```

実行結果
```
Synchronizing state of mosquitto.service with SysV service script with /lib/systemd/systemd-sysv-install.
Executing: /lib/systemd/systemd-sysv-install enable mosquitto
```

### mosquittoが有効になったか確認
```
sudo systemctl status mosquitto
```

実行結果
```
● mosquitto.service - Mosquitto MQTT Broker
     Loaded: loaded (/lib/systemd/system/mosquitto.service; enabled; preset: en>
     Active: active (running) since Sun 2025-01-12 19:52:40 JST; 3min 20s ago
       Docs: man:mosquitto.conf(5)
             man:mosquitto(8)
   Main PID: 1927 (mosquitto)
      Tasks: 1 (limit: 9564)
        CPU: 18ms
     CGroup: /system.slice/mosquitto.service
             mq1927 /usr/sbin/mosquitto -c /etc/mosquitto/mosquitto.conf

Jan 12 19:52:40 raspberrypi5 systemd[1]: Starting mosquitto.service - Mosquitto>
Jan 12 19:52:40 raspberrypi5 systemd[1]: Started mosquitto.service - Mosquitto >
```

## ローカルでMQTTのテスト

ラズパイにssh接続

### サブスクライバーを起動
```
mosquitto_sub -v -t test/message
```

実行画面
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/28184/839fa996-c357-07b5-3086-0ea0256487e0.png)

### パブリッシャーを起動
Hello Worldを送信してみます。
```
mosquitto_pub -t test/message -m 'Hello World!'
```
実行画面
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/28184/00f4af6e-85e2-d6d6-1c40-7e9483cbb231.png)

サブスクライバーの方で受け取れました。

実行画面(サブスクライバー側)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/28184/e8eb17b7-79e0-b954-3ea4-3219e91b5830.png)

## リモート接続の準備

WindowsにMQTTクライアントのMQTTXをインストールして、ラズパイ上で動作しているMQTT Broker経由で送受信してみます。

### ユーザ認証の準備

```
sudo mosquitto_passwd -c /etc/mosquitto/passwd [ユーザ名]
```

実行結果
```
nomura@raspberrypi5:~ $ sudo mosquitto_passwd -c /etc/mosquitto/passwd nomura
Password:
Reenter password:
```

/etc/mosquittoにpasswdといファイルができます。

```
nomura@raspberrypi5:~ $ ls /etc/mosquitto/passwd
/etc/mosquitto/passwd
```

設定ファイルを変更します。

```
sudo vi /etc/mosquitto/mosquitto.conf
```
以下の設定を追加します。

```:mosquitto.conf
listener 1883
allow_anonymous false
password_file /etc/mosquitto/passwd
```

mosquittoを再起動します。
```
sudo systemctl restart mosquitto
```

再起動して状態確認

```
nomura@raspberrypi5:~ $ sudo systemctl restart mosquitto
nomura@raspberrypi5:~ $ sudo systemctl status mosquitto
● mosquitto.service - Mosquitto MQTT Broker
     Loaded: loaded (/lib/systemd/system/mosquitto.service; enabled; preset: enabled)
     Active: active (running) since Mon 2025-01-13 10:22:46 JST; 26s ago
       Docs: man:mosquitto.conf(5)
             man:mosquitto(8)
    Process: 1938 ExecStartPre=/bin/mkdir -m 740 -p /var/log/mosquitto (code=exited, status=0/SUCCESS)
    Process: 1939 ExecStartPre=/bin/chown mosquitto /var/log/mosquitto (code=exited, status=0/SUCCESS)
    Process: 1940 ExecStartPre=/bin/mkdir -m 740 -p /run/mosquitto (code=exited, status=0/SUCCESS)
    Process: 1941 ExecStartPre=/bin/chown mosquitto /run/mosquitto (code=exited, status=0/SUCCESS)
   Main PID: 1942 (mosquitto)
      Tasks: 1 (limit: 9564)
        CPU: 13ms
     CGroup: /system.slice/mosquitto.service
             mq1942 /usr/sbin/mosquitto -c /etc/mosquitto/mosquitto.conf

Jan 13 10:22:46 raspberrypi5 systemd[1]: Starting mosquitto.service - Mosquitto MQTT Broker...
Jan 13 10:22:46 raspberrypi5 systemd[1]: Started mosquitto.service - Mosquitto MQTT Broker.
```

### Windows PCにMQTTXをインストール
設定したユーザ認証が有効になっているか動作確認するためにMQTTXを使ってみます。

https://mqttx.app/

今回はWindows PCにインストールしてテストしました。

#### ダウンロード（Windows版）

https://mqttx.app/downloads?os=windows

ダウンロードページのWindows x86-64用をダウンロードしてインストールしました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/28184/170b820f-4b02-9d73-ef98-d999761bcdbd.png)

インストールすると以下のような画面が立ち上がります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/28184/3991c96f-19d0-3ca0-41c9-7b853515fe2b.png)

#### MQTTXの設定
New Connectionボタンを押下して、新しいコネクションを作成していきます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/28184/ccffe7fa-cd47-5958-da9c-6366cc9c80f7.png)

Brokerの名前、Brokerの動作しているラズパイのIPアドレス、上記で設定したユーザ名、パスワードを記載してConnetを押下します。
※Brokerの名前はあとからわかりやすものをつけておくと良いです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/28184/f2663978-8a40-f498-7ee9-9e4ea97e1003.png)

ラズパイ上のBroker(mosquitto)に接続されると以下のような画面になります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/28184/82a74f99-765c-edf5-fdc3-e25b9789f132.png)

#### データの送信
トピックを設定して送信ボタンを押します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/28184/3de82233-40c0-cc06-2784-dfafc9d8721f.png)

#### データの受信準備

サブスクライバーの設定をします。
送信のところで設定したトピックと同じものを設定します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/28184/62632f2a-68fc-178b-48a9-02162d9434ed.png)

登録されました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/28184/164c48aa-5438-5d13-43a9-e2326395ca78.png)

#### 再送信してみます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/28184/9d6188bc-75d4-cec1-d75b-cbc6c1402910.png)

Receivedタブにすると、受信したことが確認できます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/28184/f7cf993e-0116-ab78-032d-c0f10045eda7.png)

ALLタブにすると両方の状態が見られます。
ほぼチャットツールの画面だな。w
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/28184/3ec41b1a-56da-b680-7655-6301ee7c9bf0.png)

Raspberry PiにmosquittoをインストールしてMQTT Brokerを動作させるところまでは確認できたので、次はM5Stack Core2やM5StickC Plus2などを使ってIoTっぽいことをしていこうかと考えております。

## 今回参考にしたサイト
https://raspberrytips.com/mqtt-broker-raspberry-pi/?utm_source=Twitter&utm_medium=social&utm_campaign=01-11-25-Setting-up-an-M