Contents
1. 必要なツールと前提条件
| ツール | 用途 | インストール方法 |
|---|---|---|
| MSVC C++ ビルドツール | Rust の rustc が Windows 用にリンクするためのコンパイラ・ライブラリ |
https://visualstudio.microsoft.com/visual-cpp-build-tools/ から Build Tools for Visual Studio をダウンロードし、C++ デスクトップ開発 ワークロード(MSVC v143)を選択 |
| Rustup / Rust stable | Rust 本体・標準ツールチェーンの管理 | rustup-init.exe(https://static.rust-lang.org/rustup/dist/x86_64-pc-windows-msvc/rustup-init.exe)を実行 |
| ESP‑IDF Tools Installer | ESP‑IDF 本体、Xtensa ツールチェーン、Python 環境の自動セットアップ | https://docs.espressif.com/projects/esp-idf/en/latest/esp32/get-started/windows-setup.html の ESP-IDF Tools Installer をダウンロード |
| OpenOCD(任意) | JTAG/SWD デバッグサーバ – VS Code からデバッガを呼び出す際に使用 | GitHub リリースページ https://github.com/openocd-org/openocd/releases から Windows 用 zip を取得し C:\OpenOCD\bin に展開 |
| VS Code + 拡張機能 | エディタ・IDE としてコード補完・デバッグを実現 | https://code.visualstudio.com/ からインストールし、拡張機能 rust-analyzer, ESP‑Debugger(または Cortex‑Debug) を追加 |
| probe‑run(probe‑rs スイート) | USB‑Serial 経由で ESP32 にフラッシュ/実行デバッグを行うコマンドラインツール | 後述の cargo install probe-run でインストール |
ポイント
- 上記すべては管理者権限の PowerShell から実行してください。
- Python がシステムに未インストールの場合、ESP‑IDF Tools Installer が自動的にミニマルな CPython を配置しますが、別途python.orgから最新版(3.9 以上)をインストールしても問題ありません。
2. Rust 本体と組込みターゲットのセットアップ
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
# 1️⃣ rustup のインストール(管理者権限で実行) Invoke-WebRequest -Uri https://static.rust-lang.org/rustup/dist/x86_64-pc-windows-msvc/rustup-init.exe -OutFile rustup-init.exe .\rustup-init.exe -y --default-toolchain stable # 2️⃣ インストール確認 rustc --version # e.g. rustc 1.xx.x (xxxx-xx-xx) cargo --version # e.g. cargo 1.xx.x (xxxx-xx-xx) # 3️⃣ ESP32 用 Xtensa ターゲットの追加 rustup target add xtensa-esp32-none-elf # 4️⃣ 必要なサポートクレート(esp-idf-sys 等)をビルドできるように環境変数を設定 # ESP‑IDF のインストールディレクトリが %USERPROFILE%\.espressif\tools にある前提です。 $env:IDF_PATH = "$HOME\.espressif\esp-idf" $env:PATH += ";$HOME\.espressif\tools\xtensa-esp32-elf\bin" |
注意
rustup target add xtensa-esp32-none-elfだけではコンパイルに必要なリンカや標準ライブラリが不足します。ESP‑IDF が提供する Xtensa ツールチェーン(上記$env:PATHに追加したもの)と、esp-idf-sysクレートが利用できるようにIDF_PATHを設定してください。
3. 補助ツールのインストール
|
1 2 3 4 5 6 7 8 9 10 |
# プロジェクトテンプレート作成用 cargo install cargo-generate # デバッグ/書き込み(probe‑rs スイート) cargo install probe-run # 実行デバッグコマンド cargo install probe-cli # 低レベル CLI ユーティリティ # (任意)ARM 系ボード向けの cargo-embed cargo install cargo-embed |
インストール後、%USERPROFILE%\.cargo\bin が PATH に含まれていることを必ず確認してください。
4. VS Code のセットアップ
- VS Code 本体 を公式サイトからダウンロードしてインストール
- 拡張機能パネルで次の拡張子を検索し、Install ボタンをクリック
| 拡張機能 | 目的 |
|---|---|
rust-analyzer |
高速なコード補完・診断 |
ESP-Debugger(または Cortex-Debug) |
ESP32 用デバッグ設定のテンプレート提供 |
- ユーザー設定 (
settings.json) に以下を追記し、OpenOCD のスクリプトパスを環境変数で柔軟に指定できるようにします。
|
1 2 3 4 5 6 7 8 9 10 |
{ "rust-analyzer.cargo.loadOutDirsFromCheck": true, "rust-analyzer.procMacro.enable": true, "[rust]": { "editor.formatOnSave": true }, // OpenOCD のスクリプトは %USERPROFILE%\.espressif\tools\openocd-*/share/openocd/scripts にあります "esp-debugger.openOcdConfigPath": "${env:HOME}/.espressif/tools/openocd-*/share/openocd/scripts" } |
5. OpenOCD と ESP‑IDF の設定例
5‑1. OpenOCD(任意)
|
1 2 3 4 5 6 7 |
# GitHub から zip を取得し解凍 → C:\OpenOCD\bin に配置済みと仮定 [Environment]::SetEnvironmentVariable( "Path", $Env:Path + ";C:\OpenOCD\bin", "Machine" ) |
launch.json で参照するパスは次のように変数化しておくと環境依存を回避できます。
|
1 2 3 4 5 6 7 8 9 10 11 12 |
{ "type": "espidf", "request": "launch", "name": "Debug on ESP32", "target": "esp32", "program": "${workspaceFolder}/target/xtensa-esp32-none-elf/debug/blinky.elf", "openOcdConfig": [ "${env:HOME}/.espressif/tools/openocd-*/share/openocd/scripts/board/esp-wroom-32.cfg" ], "preLaunchTask": "cargo build --target xtensa-esp32-none-elf" } |
5‑2. ESP‑IDF Tools Installer のインストール手順(Python 含む)
- 上記リンクから ESP‑IDF Tools Installer をダウンロードし実行
- インストーラが表示するチェックリストで “Add Python to PATH” と “Install Xtensa toolchain” に必ずチェックを入れる
- 完了後、PowerShell で次のコマンドが成功すればインストールは完了です。
|
1 2 3 |
python --version # 例: Python 3.11.x idf.py --version # ESP-IDF のバージョン表示 |
6. 実践:LED 点滅(blinky)サンプルの作成・ビルド・書き込み
6‑1. テンプレート取得
|
1 2 3 |
cargo generate --git https://github.com/esp-rs/esp-hal-template.git --name blinky cd blinky |
Cargo.toml の依存関係に esp-idf-sys = { version = "0", features = ["native"] } が自動で追加されます。
6‑2. ビルド(デバッグモード)
|
1 2 3 |
cargo build --target xtensa-esp32-none-elf # 出力例: target/xtensa-esp32-none-elf/debug/blinky.elf |
ビルドが通らない場合は次を確認してください。
| エラー | 原因例 | 対処 |
|---|---|---|
cannot find crate 'std' |
ターゲット未追加または Xtensa ツールチェーンが PATH に無い | rustup target list --installed で確認し、必要なら再度 rustup target add xtensa-esp32-none-elf |
リンカエラー (ld.exe: fatal error) |
ESP‑IDF の環境変数 IDF_PATH が未設定 |
$env:IDF_PATH = "$HOME\.espressif\esp-idf" を PowerShell に書き込む |
6‑3. 書き込み & デバッグ(probe‑run)
|
1 2 3 |
# USB‑Serial 経由でフラッシュし、同時に GDB デバッグサーバを起動 probe-run --chip esp32 target/xtensa-esp32-none-elf/debug/blinky.elf |
probe-run は内部で esptool.py を呼び出すため、追加のスクリプトインストールは不要です。
代替手段
-cargo embed --target xtensa-esp32-none-elf --release(ARM 用に最適化された場合のみ)
-idf.py flash monitor(ESP‑IDF 標準コマンド)
6‑4. 動作確認
シリアルモニタが自動で起動し、次のようなログが表示されれば成功です。
|
1 2 |
Hello, world! ESP32 is blinking... |
LED が点滅すればハードウェア側も正しく接続できています。
7. トラブルシューティングまとめ
| 現象 | 主な原因 | 解決策 |
|---|---|---|
probe-run: No probes found |
USB ドライバが未インストール、または PowerShell が管理者権限でない | デバイスマネージャで COM ポートを確認し、PowerShell を 管理者 で再起動 |
ビルド時に undefined reference to __wrap_* |
Xtensa ツールチェーンのパスが通っていない | $env:PATH += ";$HOME\.espressif\tools\xtensa-esp32-elf\bin" を実行し、再度ビルド |
デバッグ中に target remote :3333 がタイムアウト |
OpenOCD の設定ファイルパスが間違っている | launch.json の openOcdConfig パスを ${env:HOME}/.espressif/tools/openocd-*/share/openocd/scripts/board/... に修正 |
| Python が見つからない | ESP‑IDF Installer で「Add to PATH」にチェックし忘れた | python -m pip install --upgrade esptool で手動インストール、または再度インストーラを実行 |
8. 今後のステップ
- コード更新 →
cargo build … && probe-run …のサイクルで開発 - 外部クレート活用(例:
embedded-hal,esp-idf-svc)で Wi‑Fi や BLE も組み込む - CI/CD(GitHub Actions +
cross) を導入すれば Windows 以外でも同一手順でビルド可能
以上で、Windows 環境における Rust + ESP32 の開発基盤が整いました。質問や不具合は GitHub リポジトリの Issue、もしくは本稿のコメント欄からお気軽にどうぞ!