★祝200投稿★
スイッチサイエンス: M5Stamp C3U Mate (Rev.3)
これは問題なかったが、
秋月電子: Wi-Fiモジュール ESP32-C3-WROOM-02-N4 (Rev.4)
これは非同期のWiFiScanが失敗してしまう。同期では成功するのでコードを確認してみると同期と非同期で違うタイムアウト値になっていて同期と同じタイムアウト値で実行した場合は成功する。非同期のタイムアウト値が小さすぎるだけの問題のようだが、そもそも同期と非同期で違うタイムアウト値にしている意味がわからない。単なるコーディングミスなのかな? とりあえず次のようにして解決。
1 2 3 4 5 |
#if CONFIG_IDF_TARGET_ESP32C3 scanNetworks(true, false, false, 500); #else scanNetworks(true); #endif |
その他、
・SoftwareSerialは動作しない。(処理能力不足?)
・IDEからSPIFFS用のデータを書き込む機能がない。(現在対応中?)
・IDEからネットワーク書き込みすると”書き込み中...”のままになる。IDE再起動が必要。(バグ?)
のような問題がある。1番目はHWシリアルが2ポート使えるのでなんとかなると思うが困ってしまうのが2番目と3番目だ。ESP32シリーズ共通の問題だと思うが対応されるまでのつなぎとしてSPIFFSデータの書き込みとArduinoOTA用のバッチファイルを作ってみた。但し、下記ボードの特定バージョンに依存しているので他のバージョンやボードではツールパス等の修正が必要になる。
【M5Stack by M5Stack official version 2.0.6】
https://m5stack.oss-cn-shenzhen.aliyuncs.com/resource/arduino/package_m5stack_index.json
処理手順としては作業ディレクトリ内から.inoファイルを検索した後、Arduino-IDEのコンパイル出力先ディレクトリ内(%TEMP%/arduino/sketches/xxxxx)からスケッチのコンパイル結果が格納されているディレクトリを特定し必要なデータを取り出して処理する。
【修正】
2024-11-20
ボードをアップデートしたらバッチ内のツール・パスを修正すればいいと考えていたが、暫くたつと忘れてしまってどうすればいいのかわからなくなってしまうためツール・パスを自動検索するように改良してみた。但し、ボード名(BOARD)の設定だけは必須となる。
設定例: set BOARD=ERS32 or m5stack
しかし、いつになったらデータ書き込み機能に対応するんだろう?対応されるまではspiffs.batで書き込みするのが唯一の方法となるのかな?
※コンパイル成功後にスケッチフォルダを作業ディレクトリとしてバッチファイルを実行する必要があることに注意しよう。
【spiffs.bat】
spiffs ポート名(COMxx)
スケッチ・フォルダのDATAサブフォルダ内のファイルをまとめて書き込む。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 |
@echo off rem rem SPIFFS Data Write Script rem if "%1"=="" ( echo Usage: spiffs port-name goto exit ) rem rem port rem set PORT=%1 set BAUD=921600 rem rem spiffs folder rem set DATA=data rem rem Compiler Temporary rem set TEMPORARY="%TEMP%\arduino\sketches" rem rem tool path rem set BOARD=m5stack set PACKAGE=%USERPROFILE%\AppData\Local\Arduino15\packages\%BOARD% set MKSPIFFS= set ESPTOOL= set PARTITION=partitions.csv rem rem search mkspiffs.exe rem for /r %PACKAGE%\tools %%f in (mkspiffs.exe) do if exist %%f set MKSPIFFS=%%f if not exist "%MKSPIFFS%" ( echo "not found: mkspiffs.exe" goto exit ) rem rem search esptool.exe rem for /r %PACKAGE%\tools %%f in (esptool.exe) do if exist %%f set ESPTOOL=%%f if not exist "%ESPTOOL%" ( echo "not found: esptool.exe" goto exit ) rem rem run rem for %%a in (*.ino) do ( for /r %TEMPORARY% %%b in (%%~nxa.bin) do ( if exist %%b ( for /F "eol=# tokens=3-5 delims=, " %%c in (%%~dpb%PARTITION%) do ( if "%%c"=="spiffs" ( %MKSPIFFS% -c %DATA% -b 4096 -p 256 -s %%e spiffs.data %ESPTOOL% --chip auto --port %PORT% --baud %BAUD% write_flash -z %%d spiffs.data goto exit ) ) ) ) ) :exit pause |
【otaupd.bat】
otaupd IPアドレス(192.168.XX.XX)
コンパイル結果をネットワーク経由(ArduinoOTA)で書き込む。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 |
@echo off rem rem OTA Upload Script rem if "%1"=="" ( echo Usage: otaupd ip-address goto exit ) rem rem ip-address rem set ADDR=%1 rem rem Compiler Temporary rem set TEMPORARY="%TEMP%\arduino\sketches" rem rem tool path rem set BOARD=m5stack set PACKAGE=%USERPROFILE%\AppData\Local\Arduino15\packages\%BOARD% set ESPOTA= rem rem search espota.exe rem for /r %PACKAGE%\hardware %%f in (espota.exe) do if exist %%f set ESPOTA=%%f if not exist "%ESPOTA%" ( echo "not found: espota.exe" goto exit ) rem rem run rem for %%a in (*.ino) do ( for /r %TEMPORARY% %%b in (%%~nxa.bin) do ( if exist %%b ( %ESPOTA% -r -d -i %ADDR% -p 3232 -f %%b goto exit ) ) ) :exit rem pause |