Pi Pico W でWi-Fi 通信をやってみる(3)


前回pico-examples のビルドをパスしていたので今回はやってみます。

pico-examplesのpico_wフォルダーにはwifi とbt (Bluetooth)の2つのサンプル集が納められています。

wifiの中の2つのサンプルを覗いてみます。

tcp_server、tcp_clientとwifi_scan です。

tcp_server、tcp_clientでは、Pico W 同士で通信してみます。

wifi_scan では、参照可能な Wi-Fi アクセス ポイントのリストを取得します。

 

これまでと同様に母艦にはラズパイ4 Model B を使います。

 


改めてpico-sdkのインストールからやってみます。

picoディレクトリを作成し、そこにpico-sdkをクローンします。

picoディレクトリにpico-examplesをインストールします。

ここでmake -j4 を実行すると全ソースが一挙にコンパイルされてuf2ファイルが生成されますが、めっぽう時間がかかります(といっても10分くらいですが)。

examples のサンプルを一通りやってみたい場合は実行してみてください。

ただmakeを実行してもここで眼目のpico_wのプロジェクトは生成されません。

makeは個別に実行します。

 


USBシリアルのモニタリングを有効にします。

現状のままでは、minicom などでシリアルポートをモニターしても何も見えません。

ソースのCMakeLists.txtを編集します。

wifi_scan

~/pico/pico-examples/pico_w/wifi/wifi_scan/CMakeLists.txtを開きます。

2行あるpico_add_extra_outputsの上に以下をそれぞれ追加します。

pico_enable_stdio_usb(picow_wifi_scan_background 1)
pico_enable_stdio_usb(picow_wifi_scan_poll 1)

 

tcp_server

~/pico/pico-examples/pico_w/wifi/tcp_server/CMakeLists.txtを編集。

pico_enable_stdio_usb(picow_tcpip_server_background 1)
pico_enable_stdio_usb(picow_tcpip_server_poll 1)

 

tcp_client

~/pico/pico-examples/pico_w/wifi/tcp_client/CMakeLists.txtを編集。

pico_enable_stdio_usb(picow_tcpip_client_background 1)
pico_enable_stdio_usb(picow_tcpip_client_poll 1)

 


wifi_scan

 

 

 

 

 

 

 

 

 

 

 

 

 

 

makeを実行します。

以下のSSIDとPASSWORD は個別の環境のもので書き換えてください。

実行

これでwifi_scanをビルドできるようになります。

buildフォルダー内のwifi_scanに移動してmake実行

~/pico/pico-examples/build/pico_w/wifi/wifi_scanに以下のファイルが生成されています。

どちらを使ってもかまいません。

picow_wifi_scan_background.uf2
picow_wifi_scan_poll.uf2

 

picoのBOOTSELボタンを押しながらラズパイにUSBケーブルで接続してRPI-RP2フォルダーを開いてuf2をドラッグ・ドロップ。

 

 

 

 

 

 

 

 

 

 

 

minicomを使ってシリアルポートをモニターできます。

 

こんな感じです。minicomを開いてしばらくすると、Wi-FiのAPがリストされます。

 

 

 

 

 

 

 

 


Pico 同士で通信してみます。

 

 

 

 

 

 

 

 

 

 

tcp_server

wifi_scanのところでSSIDとPASSWORDを使ったcmakeが実行されているので、後はmakeするだけです。

buildフォルダー内のtcp_serverに移動してmake。

~/pico/pico-examples/build/pico_w/wifi/tcp_serverに以下のファイルが生成されています。

picow_tcpip_server_background.uf2
picow_tcpip_server_poll.uf2

RPI-RP2フォルダーを開いてuf2をドラッグ・ドロップ。

 

 

 

 

 

 

 

 

 

 

minicom で確認

 

 

 

 

 

 

 

 

 

 

tcp_client

 

serverと通信するので、serverのIPアドレスを使ってcmakeを実行しておく必要があります。

SSIDとPASSWORDはご自分のものに変更。

IPアドレスもtcp_serverを起動して確認したものに変更してください。

cmake -DPICO_BOARD=pico_w -DWIFI_SSID="SSID" -DWIFI_PASSWORD="PASSWORD" -DTEST_TCP_SERVER_IP="192.168.0.25" ..

make実行

~/pico/pico-examples/build/pico_w/wifi/tcp_clientに以下のファイルが生成されています。

picow_tcpip_client_background.uf2
picow_tcpip_client_poll.uf2

RPI-RP2フォルダーを開いてuf2をドラッグ・ドロップ。

 

serverをモニターしているminicom を見てみます。Clientとの通信結果が表示されています。イテレーションの変数に10がセットされているので、同じものが10回繰り返されています。

Writing 2048 bytes to client
tcp_server_sent 1460
tcp_server_sent 588
Waiting for buffer from client
tcp_server_recv 1460/0 err 0
tcp_server_recv 588/1460 err 0
tcp_server_recv buffer ok

 

 

 

 

 

 

 

 

 

 

 

 

 

 


Appendix

その他のexamples

uf2ファイルの作成の仕方は上記と同じです。

ntp_server

Pico は内部に時計を持っていないのでそのままでは現在時刻を知ることはできません。

Pico W は通信チップを持っているので外部の時刻同期サーバに接続すれば現在時を知ることができます。

こんな感じです。時刻同期サーバが pool.ntp.org なので時刻は+9 することが必要です。

 

 

 

 

 

 

 

 

 

udp_beacon

udpポートに信号をブロードキャストします。端末側でポートを開けて待っていればメッセージを受信します。

受信コード(Python)

ポート番号:4444

udp_receive.py

Pico W でudp_beaconを実行、パケットを送信します。

 

 

 

 

 

 

 

 

端末で受信実行

 

 

 

 

 

 

 

 

 

iperf

使用可能なネットワーク帯域幅を知ることができるそうですが……使い方が分かりませんでした。

 

 

 

 

 

 

 

 

 

以上です。


Pi Pico W でWi-Fi 通信をやってみる(1) – Server-Client (メモ)

Pi Pico W でWi-Fi 通信をやってみる(2)


 

Be the first to comment

Leave a Reply

Your email address will not be published.


*