mcpField
X
xiao-esp32s3

xiao-esp32s3

github.com/shain1912开发062 次安装7 周前更新
代码仓库

关于 xiao-esp32s3

面向 XIAO ESP32S3 开发的 Arduino CLI 技能,提供 Windows 上的配置、编译、上传与验证指导。内容基于真实硬件验证,并汇集示例草图、引脚信息和常见故障说明。

主要功能

  1. 01Arduino CLI 配置与烧录流程
  2. 0211 个已验证示例草图
  3. 03引脚映射与草图注意事项
  4. 04串口、深度睡眠故障排查

适用场景

  1. 01在 Windows 上编译并上传 ESP32S3 草图
  2. 02根据示例实现 LED、传感器或网络功能
  3. 03排查串口消失、上传失败等问题

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/shain1912/esp32-skills --skill xiao-esp32s3

安装后在 Claude Code 中输入/xiao-esp32s3确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

assets/sketches/01_chip_info/
01_chip_info.ino
assets/sketches/02_blink/
02_blink.ino
assets/sketches/03_serial_echo/
03_serial_echo.ino
assets/sketches/04_touch/
04_touch.ino
assets/sketches/05_wifi_scan/
05_wifi_scan.ino
assets/sketches/06_ble_scan/
06_ble_scan.ino
assets/sketches/07_pwm_fade/
07_pwm_fade.ino
assets/sketches/08_analog_read/
08_analog_read.ino
assets/sketches/09_softap_led/
09_softap_led.ino
assets/sketches/10_deep_sleep/
10_deep_sleep.ino
assets/sketches/11_ble_server/
11_ble_server.ino
references/
examples.md
scripts/
read_serial.ps1
watch_port.ps1

详细介绍

通过 arduino-cli 使用 XIAO ESP32S3(Windows)

以下所有内容均已在真实硬件上验证(esp32 core 3.3.10,2026-07)。 严格按此操作,无需排查问题。

以下路径均相对于此技能文件夹。<PORT> 是开发板的 COM 端口,<SKETCH_DIR> 是用户工作区中的草图文件夹。

一次性设置(已满足的步骤可跳过)

arduino-cli version                          # confirm arduino-cli exists
arduino-cli core list                        # is esp32:esp32 3.x installed?
# if not (this downloads ~1 GB and can take several minutes — use a long timeout):
arduino-cli core update-index
arduino-cli core install esp32:esp32

查找开发板

arduino-cli board list

XIAO 通常会显示为无法识别的 “Serial Port (USB)”——该行对应的端口(例如 COM4)就是 <PORT>。如果没有出现端口:开发板可能处于深度睡眠状态(端口仅在唤醒时存在——参见问题 2),或者需要进入引导加载程序模式(插入 USB 时按住 BOOT 按钮;端口号可能会改变)。

标准工作流

# sketch layout rule: folder name and .ino name must match:  my_sketch\my_sketch.ino

# compile (first compile of a session takes 1-3 min; cached after)
arduino-cli compile --fqbn esp32:esp32:XIAO_ESP32S3 <SKETCH_DIR>

# upload
arduino-cli upload -p <PORT> --fqbn esp32:esp32:XIAO_ESP32S3 <SKETCH_DIR>

# read serial for 10 s (NEVER `arduino-cli monitor` — it blocks forever)
powershell -File scripts\read_serial.ps1 -Port <PORT> -Seconds 10

# optional: send a line to the board and read the response
powershell -File scripts\read_serial.ps1 -Port <PORT> -Seconds 10 -Send "hello"

PowerShell 5.1 不支持 &&。请使用 ; 或 if ($?) { ... } 链接命令。

已验证的示例草图

assets/sketches/ 包含 11 个已在真实硬件上成功编译、上传并运行的草图。请将最接近需求的草图复制到用户工作区作为起点,而不是从头编写。请参阅 references/examples.md,了解每个草图的验证内容及其预期输出。

避免错误的草图规则

  • 在首次打印前,先调用 Serial.begin(115200);,再执行 delay(3000);——USB CDC 需要时间完成枚举,否则早期输出会被静默丢弃。
  • 用户 LED 为 LED_BUILTIN(GPIO21),且为反相:LOW = 开,HIGH = 关。analogWrite(LED_BUILTIN, 0) = 最高亮度。
  • ADC:调用 analogReadResolution(12);使用 analogRead(A0) 读取原始值,使用 analogReadMilliVolts(A0) 读取毫伏值。未连接的引脚会读到有噪声的 60–160 原始值——这是正常现象,不是错误。
  • 触摸:使用 touchRead(T2)(T2 = GPIO2 = 引脚 D1)。基线约为 17,500;触摸时数值会升至 40,000 以上(与原始 ESP32 相反)。
  • 在使用 WiFi.mode(WIFI_STA) 启动 WiFi 之前,WiFi.macAddress() 会返回 00:00:00:00:00:00——这不是错误。
  • core 3.x 中的网络功能:使用 NetworkClient / NetworkServer(旧名称 WiFiClient / WiFiServer 可能不存在)。

引脚映射(XIAO ESP32S3)

标记GPIO备注
D01A0,触摸 T1
D12A1,触摸 T2
D23A2,触摸 T3
D34A3,触摸 T4
D45SDA,触摸 T5
D56SCL,触摸 T6
D643UART TX(Serial1)
D744UART RX(Serial1)
D87SPI SCK
D98SPI MISO
D109SPI MOSI
用户 LED21反相(LOW = 开)

已知陷阱——开始“调试”前请先阅读

  1. 打开 COM 端口会重置开发板(DTR 切换 → rst:0x15 USB_UART_CHIP_RESET)。每次串口读取都会从全新启动开始。这也会清除 RTC_DATA_ATTR 变量,因此无法通过串口监视器观察深度睡眠启动次数。这不是崩溃。
  2. 深度睡眠会让 COM 端口消失。 睡眠期间 USB CDC 会断电,因此端口会消失,Windows 每个周期都会播放断开/连接提示音。这是正常现象,也是睡眠正常工作的正确证据。使用 scripts\watch_port.ps1 -Port <PORT> 验证周期(记录端口出现/消失的时间戳),不要打开端口。要重新刷写处于睡眠状态的开发板,请抓住短暂的唤醒窗口,或插入 USB 时按住 BOOT 按钮(进入引导加载程序模式;端口号可能会变化)。
  3. arduino-cli monitor 永远不会退出。 在自动化会话中,它会卡住 shell。请始终使用有截止时间的 scripts\read_serial.ps1。
  4. PSRAM 默认读取为 0 字节。 默认构建会禁用 PSRAM。如果草图需要 PSRAM(摄像头、大型缓冲区),请在编译和上传命令中都添加 --board-options PSRAM=opi。
  5. netsh wlan show networks 使用缓存,可能无法显示开发板刚创建的 SoftAP。请相信开发板的串口输出(“AP IP address: 192.168.4.1”);改用手机测试 AP。
  6. 上传失败/端口忙: 确保没有串口读取程序仍在运行(一次只能有一个进程占用端口)。如果开发板看起来已变砖,请使用引导加载程序模式(陷阱 2)。
  7. 首次编译很慢(缓存为空,工具链较大)。至少等待约 3 分钟后再终止;请设置较宽裕的超时时间。
  8. 串口会话后开发板可能卡在复位状态(只打印 ROM 横幅 ESP-ROM:esp32s3-...,应用程序始终无法启动,SoftAP/服务停止)。原因:PC 关闭端口时留下了 DTR/RTS 线路状态。使用 arduino-cli upload 恢复(esptool 的复位序列可以修复此问题)。如果无头演示(Web 服务器等)必须持续运行,请完全避免打开串口;改用 mDNS 或路由器的 DHCP 列表查找开发板,而不要通过串口读取其 IP。
  9. 替换同名 Edge Impulse 库需要使用 --clean。 将 <project>_inferencing 库替换为重新构建的副本(版本相同)后,arduino-cli 缓存中会残留过期对象——表现为 objs.a ... is not an object 链接错误,或修改看起来没有效果。替换库后的首次编译务必传入 --clean。

不依靠人眼进行验证

  • LED/PWM:每个周期也将状态打印到串口,以便通过日志证明其行为。
  • WiFi 扫描/BLE 扫描:成功标志=显示编号的网络/设备列表。
  • SoftAP:成功标志=串口打印 AP IP;完整的 HTTP 测试需要使用手机。
  • 深度睡眠:成功标志=watch_port.ps1 显示稳定的端口消失/出现周期,与设定的睡眠时间相符(唤醒时间约 + 3 秒)。

评论

支持 Markdown