GB-Power-Market-JJ esp-idf-helper
Help develop, build, flash, and debug ESP32/ESP8266 firmware using Espressif ESP-IDF on Linux/WSL. Use when the user asks about ESP-IDF project setup, configuring targets, menuconfig, building, flashing via esptool/idf.py, serial monitor, partition tables, sdkconfig, troubleshooting build/flash/monitor errors, or automating common idf.py workflows from the command line.
git clone https://github.com/GeorgeDoors888/GB-Power-Market-JJ
T=$(mktemp -d) && git clone --depth=1 https://github.com/GeorgeDoors888/GB-Power-Market-JJ "$T" && mkdir -p ~/.claude/skills && cp -r "$T/openclaw-skills/skills/547895019/esp-idf-helper" ~/.claude/skills/georgedoors888-gb-power-market-jj-esp-idf-helper && rm -rf "$T"
T=$(mktemp -d) && git clone --depth=1 https://github.com/GeorgeDoors888/GB-Power-Market-JJ "$T" && mkdir -p ~/.openclaw/skills && cp -r "$T/openclaw-skills/skills/547895019/esp-idf-helper" ~/.openclaw/skills/georgedoors888-gb-power-market-jj-esp-idf-helper && rm -rf "$T"
openclaw-skills/skills/547895019/esp-idf-helper/SKILL.mdesp-idf-helper
Goal
Provide a repeatable, command-line-first workflow for ESP-IDF development on Linux/WSL: configure → build → flash → monitor → debug/troubleshoot.
Quick start (typical loop)
Method 1: Activate ESP-IDF first (Recommended)
# 1) Source the ESP-IDF environment (once per terminal session) cd /path/to/esp-idf . ./export.sh # 1.1) Enable ccache to speed up compilation (recommended) export IDF_CCACHE_ENABLE=1 # 2) Go to your project and build cd /path/to/your/project idf.py set-target <target> # Set target chip (once per project) idf.py build # Compile idf.py -p <PORT> -b <BAUD> flash # Flash to device (optional)
Common commands
— Set chip target: esp32, esp32s2, esp32s3, esp32c3, esp32p4idf.py set-target <target>
— Configure project settings (must run in a new terminal window)idf.py menuconfig
— Build the projectidf.py build
— Update project component dependenciesidf.py update-dependencies
— Build partition table and print partition entriesidf.py partition-table
— Flash partition table to deviceidf.py partition-table-flash
— Flash storage filesystem partitionidf.py storage-flash
— Show firmware size informationidf.py size
— Flash firmware (default baud: 1152000)idf.py -p <PORT> -b <BAUD> flash
— Open serial monitoridf.py -p <PORT> monitor
— Open serial monitor with specific baud (e.g. 1152000)idf.py -p <PORT> -b <BAUD> monitor
— Flash then monitoridf.py -p <PORT> -b <BAUD> flash monitor
— Auto attach serial (usbipd) and retry monitor on open failurebash {baseDir}/scripts/monitor_auto_attach.sh --project <PROJECT_DIR> --idf <IDF_DIR> --port <PORT> --baud <BAUD>
— Flash with real-time progress output (supports auto usbipd attach retry, error summary, and second retry)bash {baseDir}/scripts/flash_with_progress.sh --project <PROJECT_DIR> --idf <IDF_DIR> --port <PORT> --mode <MODE>
flash_with_progress 使用示例
# 普通烧录整个固件(带进度) bash {baseDir}/scripts/flash_with_progress.sh \ --project <PROJECT_DIR> \ --idf <IDF_DIR> \ --port <PORT> \ --mode flash # 加密烧录 app(带进度) bash {baseDir}/scripts/flash_with_progress.sh \ --project <PROJECT_DIR> \ --idf <IDF_DIR> \ --port <PORT> \ --mode encrypted-app-flash # 仅烧录分区表(带进度) bash {baseDir}/scripts/flash_with_progress.sh \ --project <PROJECT_DIR> \ --idf <IDF_DIR> \ --port <PORT> \ --mode partition-table-flash # 仅烧录文件系统分区(storage,带进度) bash {baseDir}/scripts/flash_with_progress.sh \ --project <PROJECT_DIR> \ --idf <IDF_DIR> \ --port <PORT> \ --mode storage-flash # 指定波特率并关闭自动串口映射重试 bash {baseDir}/scripts/flash_with_progress.sh \ --project <PROJECT_DIR> \ --idf <IDF_DIR> \ --port <PORT> \ --baud 460800 \ --mode flash \ --no-auto-attach # 串口异常时自动二次重试(默认 retries=2,也可手动指定) bash {baseDir}/scripts/flash_with_progress.sh \ --project <PROJECT_DIR> \ --idf <IDF_DIR> \ --port <PORT> \ --mode encrypted-app-flash \ --retries 2
— Clean build directoryidf.py fullclean
在新窗口打开 monitor(Windows + WSL2)
推荐用脚本方式,避免 PowerShell/cmd 引号和 UNC 路径问题。
在新窗口打开 menuconfig(必须)
menuconfig 是 TUI 交互界面,必须在新窗口打开(不要在非交互后台中运行)。
- 在 WSL 直接运行(你已在独立终端时):
bash {baseDir}/scripts/run_menuconfig.sh \ --project <PROJECT_DIR> \ --idf <IDF_DIR>
- 从 Windows PowerShell 拉起新窗口运行:
Start-Process powershell -ArgumentList '-NoExit','-Command','wsl.exe -d <DISTRO> --cd / -- bash {baseDir}/scripts/run_menuconfig.sh --project <PROJECT_DIR> --idf <IDF_DIR>'
打开串口失败时自动映射并重试
当
idf.py monitor 因串口打开失败(端口不存在/被占用)报错时,可自动执行 usbipd 串口映射脚本并重试一次:
bash {baseDir}/scripts/monitor_auto_attach.sh \ --project <PROJECT_DIR> \ --idf <IDF_DIR> \ --port <PORT> \ --baud <BAUD> \ --keyword "ESP32"
- 在 WSL 创建启动脚本:
cat >/tmp/run_monitor.sh <<'EOF' #!/usr/bin/env bash set -e cd /path/to/your/project source /path/to/esp-idf/export.sh exec idf.py -p <PORT> -b 1152000 monitor EOF chmod +x /tmp/run_monitor.sh
- 在 Windows PowerShell 新开窗口执行:
Start-Process cmd.exe -WorkingDirectory C:\ -ArgumentList '/k','wsl.exe -d <DISTRO> -- bash /tmp/run_monitor.sh'
说明:
- 使用
可以避免cmd.exe -WorkingDirectory C:\
UNC 路径导致工作目录掉到\\wsl.localhost\...
。C:\Windows - 退出 monitor:
。Ctrl+]
Workflow decision tree
- If the user has no project yet → create from example/template; confirm target chip and IDF version.
- If build fails → collect the first error lines; identify missing deps/toolchain/cmake/python packages; confirm IDF env.
- If flash fails → confirm PORT permissions/WSL USB passthrough, baud rate, boot mode, correct chip target.
- If monitor is gibberish → wrong baud (monitor uses app baud), wrong serial adapter settings, or wrong console encoding.
- If boot loop / panic → request panic backtrace; decode with
(oraddr2line
built-in) and check partition/sdkconfig.idf.py monitor - If
→ serial port is occupied by another process; force release it with:[Errno 11] Could not exclusively lock port <PORT>sudo fuser -k <PORT>
What to ask the user for (minimal)
- Chip target: e.g.
,esp32
,esp32s2
,esp32s3
,esp32c3
.esp32p4 - ESP-IDF version + how it’s installed/activated (IDF Tools installer vs git clone;
/IDF_PATH
).ESPIDF_ROOT - Project path + whether it’s an ESP-IDF project (has
,CMakeLists.txt
,main/
).sdkconfig - Serial port path: use
(e.g.<PORT>
,/dev/ttyUSB0
, or WSL mapped/dev/ttyACM*
)./dev/ttyS* - Exact failing command + the first error block in output.
串口设备获取(Windows + WSL2)
先在 Windows PowerShell 找到串口号,再在 WSL2 里映射 USB 设备。
安装 usbipd-win(Windows,推荐)
在 管理员模式 PowerShell 中执行:
winget install dorssel.usbipd-win
然后查看并映射设备:
# Windows PowerShell:查看 USB 设备与 BUSID usbipd list # 将设备挂载到 WSL(每次重新插拔 USB 后都要重新执行) usbipd attach --wsl --busid=<BUSID>
串口自动映射(推荐)
可直接使用脚本自动选择并挂载串口设备(优先选择 Connected 区域中的 serial 设备,且优先 STATE=Shared):
bash {baseDir}/scripts/usbipd_attach_serial.sh
常用参数:
# 指定 BUSID bash {baseDir}/scripts/usbipd_attach_serial.sh --busid <BUSID> # 指定发行版 bash {baseDir}/scripts/usbipd_attach_serial.sh --distro <DISTRO> # 按关键词筛选设备(如 ESP32 / COMxx / CP210x) bash {baseDir}/scripts/usbipd_attach_serial.sh --keyword "ESP32" # 仅预览,不执行 bash {baseDir}/scripts/usbipd_attach_serial.sh --dry-run
说明:
- 每次 USB 设备重新插拔后,
可能变化,需要重新BUSID
或重新运行自动映射脚本。usbipd list - 重新插拔 USB 后,通常都要再执行一次
(脚本会自动执行)。usbipd attach --wsl --busid=<BUSID> - 在 WSL2 内可用
确认串口节点。ls /dev/ttyUSB* /dev/ttyACM* 2>/dev/null
首次需要手动加载内核模块(WSL 2.3.11+)
在较新的 WSL 版本中,内核采用模块化设计,
vhci_hcd(虚拟主机控制器接口)驱动可能不会自动加载。
在 WSL 终端执行:
sudo modprobe vhci_hcd
New Feature: Create ESP-IDF Projects
- Description: Create a new ESP-IDF project or create a project from an example in the ESP Component Registry.
- Usage:
idf.py create-project <project_name> <project_path> idf.py create-project-from-example <example_name> <project_path>
Flash Encryption Support (加密烧录)
直接使用
idf.py 执行加密/非加密应用烧录:
# 加密烧录整个固件 (bootloader + partition table + app) idf.py -p <PORT> encrypted-flash # 加密烧录 app 分区 idf.py -p <PORT> encrypted-app-flash # 非加密烧录 app 分区 idf.py -p <PORT> app-flash # 非加密烧录整个固件 (bootloader + partition table + app) idf.py -p <PORT> flash
Bundled resources
references/
— concise command patterns + what to paste back when reporting errors.references/esp-idf-cli.md
— capturedreferences/idf-py-help.txt
output for quick lookup/search.idf.py --help
To refresh the help text for your installed ESP-IDF version, run:
scripts/capture_idf_help.sh
assets/
Not used by default.