Pi Pico W でWi-Fi 通信をやってみる – Server-Client (メモ)はArduino IDE 版でしたので、今回はC/C++版です。(MicroPython を使いたい場合はこちらを参照)
ServerにはRaspberry Pi 4 Model B を使います。
Raspberry Pi 4 のOSイメージはRaspberry Pi OS (64-bit) Desktopを使います。
サンプルでは、Pico W に搭載された温度センサーのデータを10秒間隔で母艦のラズパイに送信して表示してみます。
Raspberry Pi 4 にPico-SDKインストールしておきます。
pico-examplesをクローンしておきます。
後々にexamplesを使う場合はビルドしておきますが今回はパス。pico-examplesからマイコン用の軽量TCP/IPスタックのlwipのファイルをお借りします。
注:pico-examples/pico_wにはwifiやbt(Bluetooth)のサンプルがたくさん同梱されていて参考になりますが、そのままではUSBシリアルがモニターできません。ソースに同梱されているCMakeLists.txtに以下を追加記述します。
pico_enable_stdio_usb(xxxxxxx 1)
xxxxxxxの部分はpico_add_extra_outputsの引数を参照
プロジェクトフォルダー(pico-network)を作成します。
最終的にはこんな構造になります。
~/pico/
├── pico-network/
│ ├─ client.c
│ ├─ build/
│ ├─ CMakeLists.txt
│ ├─ lwipopts.h
│ └─ pico_sdk_import.cmake
│
├── pico-examples/
├── pico-sdk/
│ ├── cmake
Client
pico-networkフォルダーにファイルを作成します。
元ネタ The Pico/W In C: Simple Web Client
【client.c】
クライアントコードを記述します。
下記のフルコードには内部温度取得のコードが混ざっています。
温度取得コードの部分はこんな感じです。
温度表示のフォームはこういうふうにしてみます。
連番:InnerTemp->温度
フルコード
Server を起動するRaspberry Pi 4 のIPアドレス(192.168.0.34)、Wi-Fi のSSID、PASSWORDの部分は書き換えてください。
Server のポートは8000番を使います。問題があればここも書き換えてください。
【CMakeLists.txt】
CMakeLists.txtを記述します。
内部温度取得用に、target_link_librariesにhardware_adcが追加されています。
pico_sdk_import.cmakeをコピーしておきます。lwIP スタックに必要なファイルもコピーしておきます。
ビルド
Client用のファームウェアを作成します。
buildフォルダーに client.uf2が作成されているのを確認。
Server起動
サーバー側はPython で記述してみます。
サーバーのアドレスはラズパイのそれで、8000番のポートを使います。Client側でポート番号を変更した場合はこちらでも変更してください。
192.168.0.34の部分はご自分の環境で書き換えてください。
【server.py】
まず、Server を起動しておきます。
Client 起動
PicoのBOODELボタンを押しながらMicroUSBケーブルで接続すると、RPI-RP2フォルダーが開きます。
フォルダーにclient.uf2をドラッグ・ドロップするとPicoが再起動します。。
プログラムが実行されて10秒間隔でデータが送られ、サーバー側で表示します。
Pico W 側のシリアルポート確認してみます。
minicomを使います。
起動
Pico とラズパイをケーブルで再接続します(今回はBOOTSELボタンは使いません)。
minicomの画面にIPアドレスなどの情報が表示されています。
Pi Pico W でWi-Fi 通信をやってみる(1) – Server-Client (メモ)
Leave a Reply