【ESP32】Snapdragon ARM64のSurfaceでスマートファームキットを動かすまでの全記録

Keyestudio ESP32 IoT Smart Farm Kit(KS0567)を購入した。ESP32でセンサーやモーターを制御して、スマートファームを作るキットだ。

ところが、自分のPCはSurface(Snapdragon X Plus)。ARM64 Windowsという、開発環境としてはなかなかのハードモードだった。

ようやくLEDが光るまでの道のりを記録しておく。

組み立て完成

スマートファーム 完成外観
完成したスマートファームの外観。ファン、ソーラーパネル、LCD、超音波センサーなどが見える
スマートファーム 裏面配線
裏面の配線。ESP32ボード、バッテリーホルダー、リレーモジュールが見える

キットの中身

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

ESP32 Smart Farm 全体配線図
ESP32 Smart Farm 全体配線図

センサー(入力)

ピンモジュール用途
io35蒸気センサー雨量検知
io34光抵抗明るさ検知
io33水位センサー水位検知
io32土壌湿度センサー土の水分
io23PIRモーションセンサー人感検知
io17DHT11温度・湿度
io5ボタンユーザー入力
io12/13超音波SR01距離計測

アクチュエータ(出力)

ピンモジュール用途
io27白色LED照明
io26サーボ餌やりドア
io25リレー→ポンプ自動灌漑
io18/19ファンモーター温度制御
io16ブザーアラーム
I2CLCD 1602データ表示
ESP32 Smart Farm モジュール別配線カード
各モジュールの配線カード
ESP32 Smart Farm ピンリファレンスシート
ピンリファレンスシート(左側=ANALOG、右側=DIGITAL)

ハマりポイント1: CH340ドライバが入らない

ESP32をUSBで接続すると、デバイスマネージャーに「USB Serial」がError状態で表示された。

キット同梱のCH340ドライバは2009年版。ARM64 Windows非対応でインストール失敗。

CH340ドライバ インストール失敗
CH340ドライバのインストールが「Driver install failure!」で失敗

解決策: WCH公式サイト(https://wch-ic.com/downloads/CH341SER_EXE.html)から最新版をダウンロードしてインストール。COM3として認識された。

ハマりポイント2: ESP32ボードパッケージがインストールできない

Arduino IDEのボードマネージャーでESP32(v2.0.6)をインストールしようとすると、xtensa-esp32-elf-gccのダウンロードでエラー。ARM64用のツールチェーンが存在しない。

ESP32ボードパッケージ インストールエラー
ESP32 v2.0.6のインストールがxtensaツールチェーンのエラーで失敗

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コンパイラが正常に動作しなかった。

ESP32 Dev Module 選択画面
Arduino IDEでESP32 Dev Moduleは選択できるが、コンパイルが通らない

解決策: 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モジュール全部動かすのが目標だ。

この記事を書いた人

tsubasatwi( つばさ)

国立工業高専卒業(新居浜工業高等専門学校)
「イベント×IT×営業」のカスタマーサクセスマネージャーとして活躍。セールス→構築管理運用まで全体プロジェクト管理の豊富な経験あり。

・主にITに関するイベント集客/法人営業/開発を担当
・大手通信会社を中心にエンタープライズのIT導入を担当(B2B)

DMMで日本初の NoCodeサロン を運営
「NoCodeCamp プログラミングを使わないIT開発 」
https://lounge.dmm.com/detail/2549/