🐡

Raspberry Pi Pico WのMQTTサンプルを試してみる

に公開

はじめに

Pico Wで取得できるセンサーの値を、USB接続しなくても見れるようにしたいので、MQTTを使ってPCでデータを取得するサンプルを試してみました。

サンプルコードはこちらにあるものを使っています。
https://github.com/raspberrypi/pico-sdk

1. 環境準備

必要なもの

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