🐡
Raspberry Pi Pico WのMQTTサンプルを試してみる
はじめに
Pico Wで取得できるセンサーの値を、USB接続しなくても見れるようにしたいので、MQTTを使ってPCでデータを取得するサンプルを試してみました。
サンプルコードはこちらにあるものを使っています。
1. 環境準備
必要なもの
- Raspberry Pi Pico W
- USBケーブル(データ転送対応)
- PC
- 無線NW環境
PC側の準備
PCはUbuntuを使っています。
MQTTブローカーとして、mosquittoをインストールします。
sudo apt install mosquitto mosquitto-clients
/etc/mosquitto/conf.d/mosquitto.conf に以下を追加
allow_anonymous true
listener 1883 0.0.0.0
sudo systemctl restart mosquitto で再起動
2. ビルド方法
CMakeLists.txtの変更
シリアル通信で動作結果などを確認する際、USBシリアル出力の有効化の設定が必要になります。
CMakeLists.txtにあるpico_enable_stdio_usbを以下のように変更します。
pico_enable_stdio_usb(bmp280_i2c 1)
また、WiFiのSSIDとパスワードも記載しておきます。ファイルに書き込むのはセキュリティ的に気になる、という場合は環境変数などで設定しておきます。
set(WIFI_SSID "mywifi")
set(WIFI_PASSWORD "mypass")
...
target_compile_definitions(picow_mqtt_client PRIVATE
WIFI_SSID="${WIFI_SSID}"
WIFI_PASSWORD="${WIFI_PASSWORD}"
MQTT_SERVER="<pcのIPアドレス>"
)
pico_w用にビルド
cmake -DPICO_BOARD=pico_w -DMQTT_SERVER=<pcのipアドレス> ..
make picow_mqtt_client
成功するとMQTTのトピックのpublishが行われます。
PC側のターミナルで
mosquitto_sub -h <ipアドレス> -t '/temperature'
としていると、pico wから温度情報が送られて来ます。
また、PCから
mosquitto_pub -h <ipアドレス> -t '/led' -m "On"
とpublishすると、pico wがサブスクライブして、LEDが点灯します。
消したいときは
mosquitto_pub -h <ipアドレス> -t '/led' -m "Off"
としましょう。
Discussion