D0 - D3にロータリーディップSWをつないで使用しました。
症状:特定の数値の時にハングしたりLED点灯しっぱなしになったり。
原因:D1(PC1)とD3(PC3)がブート時に特殊機能を持つピンだった。
- D1(PC1) = DEEP_SLEEP_ESCAPE_PIN:
- ArduinoLowPower.cppの escape_hatch() が setup() より前に実行される
- D1がLOW → LED_BUILTIN点灯 + 無限ループ (ユーザーコードに到達しない)
- D3(PC3) = GeckoブートローダーGPIOアクティベーションピン:
- Geckoブートローダーが escape_hatch() よりさらに前に実行される
- D3がLOW → ブートローダーがUART XMODEM待機モードに入りアプリ未起動
ということだそうです……(白目
D1とD3は、出力ピンとして使いましょうね。
まぁXIAO ESP32 C3も使えないピンがたくさんあって苦労しましたが、Seeed JPの方のブログに救われました。XIAO MG24についてはwikiに特に警告ないので、何も考えずにピンアサインしたのですが……いやはや。
まぁClaude Opusさんに救われました。症状が出た時に「動かないのは気のせいだろ」「起動しない場合はパスコンを追加するといいですよ」とか言われたんですが(意訳)、「ブートモードにでもハマってるのではございませんか? 他のピンに変えたいけど、安全なピンをお探しくだせえ」とヒントを投げたら、ドキュメントやソースコードを深く深く掘り下げて原因を見つけ出してくれました。
私だったらあんな山のようなドキュメントやソース読む気力ないから、D0-D3全部入れ替えちゃえ!って無駄な苦労をしてたでしょうね(笑)。