注意:2021/03/29現在、wapi scan などが動作するようになっています。また、ビルド時点で esp32に書き込みできるnuttx.binが生成されますので、ご注意ください。
ビルドしてみてわかったことですが、2021年1月時点では、esp32向けのwifiはまだ初期段階の様子でwapiコマンドもクライアントモードで一部動作するもののステーションモード・APモードでは動作確認ができませんでした。また、どこかでスリープが入るのか、長時間のwifi接続の確認ができていません。とはいえ、wifiがやっと動作するようになりつつあるので、今回はwapiの設定をしてみることにしました。
ところで、wapiとは何かというと、ローレベルのwifiルーチン群でifconfigやwlconfigに対してインターフェースを提供するCのルーチン群だということだそうですが、nuttxのesp32ではコマンドラインにも対応しているので、以下、早速設定していきたいと思います。
なお、レポジトリやビルド環境のセットアップは前回と同じく、masterをクローンしてビルドしていますので、参考にしてください。
まず初めにコンフィグを読み込みます。
まだ開発途上という感じですが、これからが楽しみですね。今回は以上です。それでは。
cd /usr/src/nuttx-master/nuttx tools/configure.sh esp32-devkitc/wapi追記: 2021/03/29現在、renewコマンドはwapiコンフィグに既に含まれているので、以下不要です。 つづいて、設定を一部変更します。まず初めに、dhcpc renewコマンド(renew)をビルドするようにしておきます。
make menuconfig # /を入力してサーチモードに入り、以下を検索してenalbeしてください。 CONFIG_SYSTEM_DHCPC_RENEW基本的にwapiのコンフィグはこれだけです。つづいて前回( https://benedicam-te.blogspot.com/2021/01/nuttx-on-esp32-board-build-environment.html ) と同じように以下の様にします。
make -jX # 2021/03/29追記: nuttx.binはbuild時点でesp32に書き込まれる状態で生成されますので、以下2行はコメント化しました。 # rm nuttx.bin # esptool.py --chip esp32 elf2image --flash_mode dio --flash_size 4MB -o ./nuttx.bin nuttx # ttyUSB0は環境に合わせて下さい。 sudo chmod 666 /dev/ttyUSB0 esptool.py --chip esp32 --port /dev/ttyUSB0 --baud 921600 write_flash 0x1000 \ ~/bootloader.bin 0x8000 ~/partitions.bin 0x10000 nuttx.binなお、筆者の場合、/usr/local/binにflash-write-esp32という名前で、上述をshellコマンドにして使っています。
$ flash-write-esp32 esptool.py v2.9-dev esptool.py v2.9-dev Serial port /dev/ttyUSB0 Connecting.... Chip is ESP32D0WDQ6 (revision 1) Features: WiFi, BT, Dual Core, Coding Scheme None Crystal is 40MHz (中略) Hash of data verified. Leaving... Hard resetting via RTS pin... $ cat /usr/local/bin/flash-write-esp32 #!/bin/sh cd /usr/src/nuttx-master/nuttx rm nuttx.bin esptool.py --chip esp32 elf2image --flash_mode dio --flash_size 4MB -o ./nuttx.bin nuttx esptool.py --chip esp32 --port /dev/ttyUSB0 --baud 921600 write_flash 0x1000 ~/bootloader.bin \ 0x8000 ~/partitions.bin 0x10000 nuttx.binバイナリーをesp32にロードさせたら、つづいて接続・設定します。
minicom -D /dev/ttyUSB0 Welcome to minicom 2.8 OPTIONS: I18n Port /dev/ttyUSB0, 01:34:00 Press CTRL-A Z for help on special keys # パスフレーズを先に入力 nsh> wapi psk wlan0 MyPassPhrase 2 # 続いてルータなどのAPのESSIDを入力 nsh> wapi essid wlan0 MyESSID 1 I (381593) wifi:mode : sta (30:ae:ww:xx:yy:zz) I (381594) wifi:enable tsf I (381595) wifi:Set ps type: 0 I (381718) wifi:new:<11,0>, old:<1,0>, ap:<255,255>, sta:<11,0>, prof:1 I (381720) wifi:state: init -> auth (b0) I (381724) wifi:state: auth -> assoc (0) I (381729) wifi:state: assoc -> run (10) I (381744) wifi:connected with MyESSID, aid = 1, channel 11, BW20, bssid = cc:1a:ww:xx:yy:zz I (381744) wifi:security: WPA2-PSK, phy: bgn, rssi: -58 I (381823) wifi:pm start, type: 0 I (381824) wifi:AP's beacon interval = 102400 us, DTIM period = 1 # dhcpにてアドレスを取得 nsh> renew wlan0 # 動作確認 nsh> ping -c4 1.1.1.1 PING 1.1.1.1 56 bytes of data W (518016) wifi:なお、esp32-devkitc/wapiのデフォルトコンフィグレーションでは、設定をesp32のフラッシュに保存するようになっていてるのですが、コンフィグがコラプトするなどして読み込めず、esp32が正常に起動できない症状になることがありました。この場合、一旦、idx:0 (ifx:0, cc:1a:fa:c3:01:74), tid:0, ssn:0, winSize:64 No response from 1.1.1.1: icmp_seq=0 time=1000 ms 56 bytes from 1.1.1.1: icmp_seq=1 time=10 ms 56 bytes from 1.1.1.1: icmp_seq=2 time=10 ms 56 bytes from 1.1.1.1: icmp_seq=3 time=10 ms 4 packets transmitted, 3 received, 25% packet loss, time 4040 ms
CONFIG_ESP32_WIFI_SAVE_PARAMを、disableにして、
CONFIG_DEV_ZEROを、enableにしてビルドし、起動させ
dd if=/dev/zero of=/dev/esp32flash bs=1024 count 64などとして、フラッシュをクリアさせて、再度ビルド・ロードさせると復帰できました。
まだ開発途上という感じですが、これからが楽しみですね。今回は以上です。それでは。
Thanks for the update. I really appreciate the efforts you have made for this blog.
返信削除All the best !!!
JTAG