# ESP32S3 固件（ESP-IDF 6.0.1）

这是 guguji 真实机器人桥接固件，当前要求 ESP-IDF `>=6.0.1,<6.1.0`。

底层驱动已经迁移到 ESP-IDF 6 新接口：

- I2C：`driver/i2c_master.h` 句柄式 master bus/device API
- TWAI：`esp_twai.h` + `esp_twai_onchip.h` node API
- RMT：`driver/rmt_tx.h` + bytes encoder API
- LEDC：ESP-IDF 6 LEDC API

默认功能：

- WiFi AP：`guguji-robot` / `guguji1234`
- UDP 命令端口：`7777`
- UDP 遥测回传：发给最近一次命令来源地址
- TWAI/CAN：1Mbps，控制 RS00 MIT 协议电机
- I2C：读取 QMI8658A 和 QMC6309
- GPIO42：无源蜂鸣器状态提示
- GPIO45：WS2812 RGB LED 状态提示
- 20ms 控制周期，200ms 命令超时停止电机

## VSCode 配置

在 VSCode 命令面板执行：

```text
ESP-IDF: Configure ESP-IDF Extension
```

选择 ESP-IDF `6.0.1`。随后单独打开本目录作为工作区：

```text
/home/corvin/Project/guguji_simulation/guguji_real_robot/firmware/esp32s3_espidf
```

通过 `ESP-IDF: Open ESP-IDF Terminal` 打开终端，确认版本：

```bash
idf.py --version
```

输出中应包含 `v6.0.1`。

## 首次从旧版本切换

旧 ESP-IDF 生成的 `build/` 和 `sdkconfig` 不能直接复用。首次切换到 6.0.1 时执行：

```bash
rm -rf build sdkconfig sdkconfig.old managed_components dependencies.lock
idf.py set-target esp32s3
```

`main/idf_component.yml` 会阻止使用低于 6.0.1 或高于等于 6.1.0 的 IDF 误编译。

## 编译

```bash
idf.py set-target esp32s3
idf.py build
```

## 刷写和监视

```bash
idf.py -p /dev/ttyUSB0 flash monitor
```

如果开发板枚举为 `/dev/ttyACM0`，把端口名称替换掉。串口监视器使用 `Ctrl+]` 退出。

请先修改 `main/config.h` 中的引脚，再修改 `main/robot_config.h` 中的 CAN ID、方向和零偏。

状态提示：

- 蓝灯慢闪：等待主机
- 青色慢闪：失能/安全保持
- 绿灯常亮：运行中
- 黄灯双闪：命令超时
- 红灯快闪：急停或电机故障
- 紫灯慢闪：传感器离线或反馈超时警告
