Keyestudio ESP32 IoT Smart Farm Kit(KS0567)を購入した。ESP32でセンサーやモーターを制御して、スマートファームを作るキットだ。
ところが、自分のPCはSurface(Snapdragon X Plus)。ARM64 Windowsという、開発環境としてはなかなかのハードモードだった。
ようやくLEDが光るまでの道のりを記録しておく。
組み立て完成


キットの中身
ESP32 PLUSボードを中心に、センサー8種・アクチュエータ6種、計14モジュールが入っている。

センサー(入力)
| ピン | モジュール | 用途 |
|---|---|---|
| io35 | 蒸気センサー | 雨量検知 |
| io34 | 光抵抗 | 明るさ検知 |
| io33 | 水位センサー | 水位検知 |
| io32 | 土壌湿度センサー | 土の水分 |
| io23 | PIRモーションセンサー | 人感検知 |
| io17 | DHT11 | 温度・湿度 |
| io5 | ボタン | ユーザー入力 |
| io12/13 | 超音波SR01 | 距離計測 |
アクチュエータ(出力)
| ピン | モジュール | 用途 |
|---|---|---|
| io27 | 白色LED | 照明 |
| io26 | サーボ | 餌やりドア |
| io25 | リレー→ポンプ | 自動灌漑 |
| io18/19 | ファンモーター | 温度制御 |
| io16 | ブザー | アラーム |
| I2C | LCD 1602 | データ表示 |


ハマりポイント1: CH340ドライバが入らない
ESP32をUSBで接続すると、デバイスマネージャーに「USB Serial」がError状態で表示された。
キット同梱のCH340ドライバは2009年版。ARM64 Windows非対応でインストール失敗。

解決策: WCH公式サイト(https://wch-ic.com/downloads/CH341SER_EXE.html)から最新版をダウンロードしてインストール。COM3として認識された。
ハマりポイント2: ESP32ボードパッケージがインストールできない
Arduino IDEのボードマネージャーでESP32(v2.0.6)をインストールしようとすると、xtensa-esp32-elf-gccのダウンロードでエラー。ARM64用のツールチェーンが存在しない。

v3.x系に変更したら、x86_64版をダウンロードしてくれた。が、今度は「ディスク容量不足」。Cドライブの空きが0GBだった。
解決策: npm-cache(18GB)、Tempフォルダ(3GB)、Dockerデータ(2GB)等を削除して25GB確保。v3.x系のインストールに成功。
ハマりポイント3: コンパイルが通らない
ボードパッケージはインストールできたが、Verifyすると「Unable to find executable file at …elf」エラー。ARM64 Windows上のx86エミュレーション(Prism)ではxtensaコンパイラが正常に動作しなかった。

解決策: Windows側のArduino IDEを諦め、WSL2(Ubuntu)上にarduino-cliをインストール。ARM64ネイティブのLinuxツールチェーンなら問題なく動く。
# arduino-cliインストール
curl -fsSL https://raw.githubusercontent.com/arduino/arduino-cli/master/install.sh | BINDIR=$HOME/bin sh
# ESP32環境セットアップ
arduino-cli config init
arduino-cli config add board_manager.additional_urls https://espressif.github.io/arduino-esp32/package_esp32_index.json
arduino-cli core update-index
arduino-cli core install esp32:esp32@2.0.6
USBデバイスはusbipdでWSLに接続する。
# Windows管理者PowerShell
usbipd bind --busid 1-2
usbipd attach --wsl --busid 1-2
# WSL側
sudo chmod 666 /dev/ttyUSB0
arduino-cli compile --fqbn esp32:esp32:esp32 ./sketch
arduino-cli upload --fqbn esp32:esp32:esp32 -p /dev/ttyUSB0 ./sketch
ハマりポイント4: 書き込みが失敗する
コンパイルは成功したが、アップロード時に「Failed to communicate with the flash chip」エラー。
原因はESP32のGPIO12(ストラッピングピン)に超音波センサーのTRIGワイヤーが接続されていたこと。GPIO12は起動時にフラッシュメモリの電圧を決定するピンで、ここにセンサーが繋がっているとフラッシュへの書き込みが阻害される。
解決策: アップロード時だけIO12の青いワイヤー(超音波TRIG)を抜く。書き込み完了後に戻す。
ハマりポイント5: LEDが光らない
書き込み成功したのにLEDが光らない。原因は単純で、ピンの差し間違い。
ESP32 PLUSボードのピン配置は説明書の図と実際のボード上の位置が一致しにくい。ボードには左右2列のピンヘッダーがあり:
- 左側(ANALOG): io35, io34, io33, io32, io4 — センサー系
- 右側(DIGITAL): io27, io26, io25, io23, io19, io18, io17, io16, io13, io12, io5 — 制御系
io27は右側のピンヘッダーにある。ボード上の小さな印字をよく確認すること。
ようやくLED点灯
ここまでの道のりを経て、ついに1.1Blink(LED1秒間隔点滅)が動いた。
Snapdragon ARM64のSurfaceでESP32開発をするのは正直ハードモードだが、WSL2 + arduino-cli + usbipdの組み合わせで問題なく開発できる。むしろネイティブARM64で動くので、x86エミュレーション経由のArduino IDEより高速かもしれない。
次回予告
次は、PWMによるLED調光、ボタン入力の読み取り、そしてPIRセンサーとブザーを組み合わせた警報システムをやっていく。14モジュール全部動かすのが目標だ。


