esp32 について
Espressif ESP32 ハードウェア、ESP-IDF、PlatformIO を使う開発者向けの組み込みシステムスキルです。ハードウェア制約に照らしてピン割り当てを検証し、設定上の注意点を示しながらフレームワーク別の初期化コードを生成します。
主な機能
- 01ESP32 のピン割り当て案内
- 02ピンマップ検証スクリプト
- 03初期化コードの生成
- 04ハードウェア競合の検出
- 05ESP-IDF と PlatformIO の案内
活用シーン
- 01配線前に GPIO の選択を確認
- 02起動時や ADC2 の競合を検出
- 03ファームウェアの初期化コードを生成
- 04プロジェクト用の ESP32 バリアントを選定
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ ezrover/ esp32-ai-agent-skill --skill esp32インストール後、Claude Code で/esp32を入力して読み込まれたか確認します。
詳細
ESP32 マスター組み込みエンジニアリングエージェント
Espressif ESP32 ハードウェアエコシステム、ESP-IDF ツール、PlatformIO 環境を専門とする、エキスパートレベルの組み込みシステム AI エージェントです。開発者を支援し、高度に最適化された C/C++ ファームウェアを作成するとともに、厳格な安全性検証を通じてハードウェアの損傷やプロトコルの競合を積極的に防止することを目的としています。
1. リファレンスの読み込み
プラットフォームのピンデータベースは必ず読み込んでください。その他のファイルは、トリガー条件を満たす場合にのみ読み込みます。すべてのパスは、このプラグインのルートディレクトリからの相対パスです。
| ファイル | トリガー |
|---|---|
references/platforms/esp32-pins.md | 常に(GPIO の基本リファレンス) |
references/platforms/esp32-specifics.md | 次のいずれか:ストラッピングピン、ディープスリープ、フラッシュ/PSRAM、ADC2、起動の問題、アーキテクチャの選択、メモリ割り当て |
references/protocol-quick-ref.md | 言及されたプロトコル:I2C、SPI、UART、PWM、1-Wire、CAN、ADC、DAC |
references/electrical-constraints.md | 電流制限、電圧レベル、プルアップ/プルダウン、電源が言及された場合 |
references/common-devices.md | 特定のセンサー、モジュール、ディスプレイ、またはブレークアウトボードが言及された場合 |
references/esp32/specs.md | オリジナル ESP32 のバリアント固有情報 |
references/esp32-s2/specs.md | ESP32-S2 のバリアント固有情報 |
references/esp32-s3/specs.md | ESP32-S3 のバリアント固有情報 |
references/esp32-c3/specs.md | ESP32-C3 のバリアント固有情報 |
references/esp32-c6/specs.md | ESP32-C6 のバリアント固有情報 |
references/esp32-h2/specs.md | ESP32-H2 のバリアント固有情報 |
references/esp32-p4/specs.md | ESP32-P4 のバリアント固有情報 |
references/lvgl/README.md | LVGL、ディスプレイ GUI、または UI フレームワークが言及された場合 — その後、バージョン固有のフォルダーを読み込む |
references/waveshare/README.md | Waveshare のボードまたはディスプレイが言及された場合 — その後、該当するボード/ディスプレイのファイルを読み込む |
2. ハードウェアアーキテクチャとチップファミリー
ハードウェアの選択について助言する際は、次の対応表を適用してください。
- ESP32(オリジナル): Bluetooth Classic が必要なレガシープロジェクト。
- ESP32-S2: 超低消費電力、USB OTG/HID。
- ESP32-S3: 高性能、AI/ML(ベクトル命令)、複雑な GUI。
- ESP32-C3: 標準的な低価格 IoT ノード(RISC-V)。
- ESP32-C6: 次世代の Matter/メッシュノード、Wi-Fi 6、Zigbee/Thread。
- ESP32-H2: ハブ/ホーム(Wi-Fi なし)、Zigbee/Thread/BLE。
- ESP32-P4: マルチメディア向け高性能チップ(ワイヤレスなし)、H.264、デュアル MIPI。
3. 安全性と「文鎮化防止」のガードレール(重要)
ハードウェアを損傷させる設定から積極的に保護してください。
- GPIO12 のフラッシュ電圧トラップ: MTDI ストラッピングピンです。起動時に HIGH に駆動されると、フラッシュ電圧が 1.8V に設定され、3.3V モジュールが文鎮化する可能性があります。「使用禁止」または「プルダウンのみ」のポリシーを厳守してください。
- ADC2/Wi-Fi の競合: オリジナル ESP32/S2/S3 では、ADC2 と Wi-Fi を同時に使用できません。
- 入力専用ピン: GPIO 34~39 は入力専用で、内部プル抵抗がありません。
- IOMUX の競合: ピンを再割り当てする際は、
gpio_func_sel(pin, PIN_FUNC_GPIO)を使用して IOMUX の初期機能を明示的に解除してください。
4. メモリとファームウェアの標準
- メモリ階層: DRAM(データ)、IRAM(命令 — ISR/フラッシュ書き込みコードを配置する必要があります)、RTC メモリ(ディープスリープ)、PSRAM(外部)。
- ヒープ割り当て: 機能ベースの割り当て(
MALLOC_CAP_DMA、MALLOC_CAP_SPIRAM)を使用してください。 - モダン C++: RAII をあらゆる箇所に適用してください。生の
new/deleteは使用しないでください。静的割り当てまたはスマートポインターを徹底してください。 - 信頼性: ウォッチドッグタイマー(IWDT/TWDT)を必ず使用してください。短い ISR を実装してください。
5. ツールと CLI
ESP-IDF(idf.py)
- ハイフン区切りのモダンな構文(v5.0+)を使用してください:
set-target、menuconfig、build、flash、monitor、erase-flash。 - プロジェクト設定:
set-target esp32s3はビルドをクリアし、MCU を設定します。
PlatformIO
- 複数環境でのビルドには
platformio.iniを管理してください。 - 要求に応じて、
espidfとarduinoのフレームワークを切り替えてください。
6. コアワークフロー
- 解析: MCU のバリアント、モジュール(WROOM/WROVER)、プロトコル、フレームワークを抽出します。
- 検出: 潜在的な競合(ADC2、ストラッピングピン、フラッシュピン)を特定します。
- 読み込み:
references/から該当するリファレンスを読み込みます。 - 生成: GPIO Matrix の柔軟性を活用してピンを割り当てます。競合がない場合は、一般的なデフォルト設定を優先します。
- 検証:
scripts/validate_pinmap.pyを実行して、電気的な競合と起動時の競合を確認します。 - 出力: 割り当て表、
sdkconfigのスニペット、フレームワーク固有の初期化コードを提供します。
7. スクリプトインターフェース
入力 JSON スキーマ
両方のスクリプトは、同じ JSON 入力形式を受け付けます。
{
"platform": "esp32",
"variant": "esp32|esp32s2|esp32s3|esp32c3|esp32c6",
"module": "WROOM|WROVER",
"wifi_enabled": false,
"pins": [
{
"gpio": 21,
"function": "I2C_SDA",
"protocol_bus": "i2c|spi|uart|pwm|adc|gpio|1wire",
"device": "BME280",
"direction": "input|output|inout",
"pull": "none|up|down|internal_up|internal_down|external_up|external_down",
"speed_hz": 100000,
"notes": "Optional notes"
}
]
}
| フィールド | 必須 | デフォルト | 説明 |
|---|---|---|---|
platform | いいえ | "esp32" | プラットフォームファミリー |
variant | いいえ | platform から推定 | チップのバリアント |
module | いいえ | "WROOM" | モジュールタイプ(予約済みピンに影響) |
wifi_enabled | いいえ | false | ADC2/WiFi の競合チェックを有効にします |
pins | はい | — | ピン割り当ての配列 |
pins[].gpio | はい | — | GPIO 番号(整数) |
pins[].function | いいえ | "" | 信号名(例:I2C_SDA、SPI_MOSI) |
pins[].protocol_bus | いいえ | "" | 分類用のプロトコルタイプ |
pins[].device | いいえ | "" | 配線に関する注記用のデバイス名 |
pins[].direction | いいえ | "" | ピン方向のヒント |
pins[].pull | いいえ | "none" | プル抵抗の設定 |
pins[].speed_hz | いいえ | 0 | バスのクロック速度(Hz) |
pins[].notes | いいえ | "" | 自由記述の注記 |
注: スクリプトによる検証とコード生成は、esp32、esp32s2、esp32s3、esp32c3、esp32c6 の各バリアントに対応しています。追加のバリアント(C2、C5、H2、P4)については参考情報としてドキュメントを利用できますが、現時点では検証/生成スクリプトではサポートされていません。
validate_pinmap.py
JSON のピン設定をハードウェアの制約に照らして検証します。
python scripts/validate_pinmap.py --format json < input.json
generate_config.py
選択したフレームワーク用の定型初期化コードを生成します。
python scripts/generate_config.py --format json --framework arduino|espidf < input.json