Compare commits
8 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 9e0f8ae611 | |||
| dd7e931c80 | |||
| f475b4cbb1 | |||
| c78d7f2568 | |||
| 177901c974 | |||
| 29bf765947 | |||
| 90311fc8fb | |||
| 3e86f0adaf |
+18
-19
@@ -26,13 +26,13 @@ jobs:
|
||||
with:
|
||||
fetch-depth: 0
|
||||
|
||||
- name: Test release tooling
|
||||
- name: Test build tooling
|
||||
run: python -m unittest discover -s scripts/tests -v
|
||||
|
||||
- id: list
|
||||
name: Get all variant list
|
||||
run: |
|
||||
echo "all_variants=$(python scripts/release.py --list-boards --json)" >> $GITHUB_OUTPUT
|
||||
echo "all_variants=$(python scripts/build.py --list-boards --json)" >> $GITHUB_OUTPUT
|
||||
|
||||
- id: select
|
||||
name: Select variants based on changes
|
||||
@@ -61,7 +61,7 @@ jobs:
|
||||
CHANGED=$(git diff --name-only "$BASE_SHA" "$HEAD_SHA")
|
||||
echo -e "Changed files:\n$CHANGED"
|
||||
|
||||
SELECTED=$(printf '%s\n' "$CHANGED" | python scripts/release.py --select-changed)
|
||||
SELECTED=$(printf '%s\n' "$CHANGED" | python scripts/build.py --select-changed)
|
||||
echo "variants=$SELECTED" >> $GITHUB_OUTPUT
|
||||
|
||||
build:
|
||||
@@ -83,7 +83,7 @@ jobs:
|
||||
shell: bash
|
||||
run: |
|
||||
source $IDF_PATH/export.sh
|
||||
python scripts/release.py ${{ matrix.board }} --name ${{ matrix.name }}
|
||||
python scripts/build.py ${{ matrix.board }} --name ${{ matrix.name }}
|
||||
|
||||
- name: Upload artifacts
|
||||
uses: actions/upload-artifact@v4
|
||||
@@ -92,29 +92,28 @@ jobs:
|
||||
path: build/merged-binary.bin
|
||||
if-no-files-found: error
|
||||
|
||||
compatibility-idf5:
|
||||
name: IDF 5.5 compatibility - ${{ matrix.name }}
|
||||
if: ${{ github.event_name == 'pull_request' }}
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
include:
|
||||
- board: xmini-c3
|
||||
name: xmini-c3
|
||||
- board: esp-p4-function-ev-board
|
||||
name: esp-p4-function-ev-board
|
||||
esp32s31-idf61:
|
||||
name: Build ESP32-S31 with IDF 6.1
|
||||
runs-on: ubuntu-latest
|
||||
container:
|
||||
image: espressif/idf:v5.5.4
|
||||
image: espressif/idf:release-v6.1
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: Build compatibility variant
|
||||
- name: Build ESP32-S31 preview variant
|
||||
shell: bash
|
||||
run: |
|
||||
source $IDF_PATH/export.sh
|
||||
python scripts/release.py ${{ matrix.board }} --name ${{ matrix.name }}
|
||||
python scripts/build.py espressif/esp32-s31-function-coreboard-1 \
|
||||
--name esp32-s31-function-coreboard-1
|
||||
|
||||
- name: Upload artifact
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: xiaozhi_espressif-esp32-s31-function-coreboard-1_${{ github.sha }}
|
||||
path: build/merged-binary.bin
|
||||
if-no-files-found: error
|
||||
|
||||
blufi-idf6:
|
||||
name: IDF 6 BluFi option
|
||||
@@ -131,7 +130,7 @@ jobs:
|
||||
source $IDF_PATH/export.sh
|
||||
idf.py -B build-blufi \
|
||||
-DSDKCONFIG=build-blufi/sdkconfig \
|
||||
-DSDKCONFIG_DEFAULTS="sdkconfig.defaults;sdkconfig.defaults.esp32s3;scripts/ci/blufi.sdkconfig.defaults" \
|
||||
-DSDKCONFIG_DEFAULTS="sdkconfig.defaults;scripts/ci/blufi.sdkconfig.defaults" \
|
||||
-DIDF_TARGET=esp32s3 \
|
||||
-DBOARD_NAME=bread-compact-wifi \
|
||||
-DBOARD_TYPE=bread-compact-wifi \
|
||||
|
||||
@@ -18,7 +18,7 @@ Use ESP-IDF v6.0.2 when possible. IDF 5.5.x is retained only for documented lega
|
||||
- `main/mcp_server.*`: common device-side MCP tools and dispatch.
|
||||
- `main/Kconfig.projbuild`: board and feature configuration.
|
||||
- `main/CMakeLists.txt`: source, board, locale, font, and asset selection.
|
||||
- `scripts/release.py`: canonical board/variant build entry point.
|
||||
- `scripts/build.py`: canonical board/variant build entry point.
|
||||
|
||||
Read the closest existing implementation before adding a new one. Prefer the narrowest owning layer; do not put board-specific behavior into core modules.
|
||||
|
||||
@@ -42,7 +42,7 @@ Read the closest existing implementation before adding a new one. Prefer the nar
|
||||
|
||||
Board selection is a coupled chain:
|
||||
|
||||
`config.json` -> `scripts/release.py` -> `main/Kconfig.projbuild` -> `main/CMakeLists.txt` -> board source and `config.h`.
|
||||
`config.json` -> `scripts/build.py` -> `main/Kconfig.projbuild` -> `main/CMakeLists.txt` -> board source and `config.h`.
|
||||
|
||||
When adding a board or variant, update every relevant link in that chain. Include a unique board identity, correct chip target, flash/partition settings, exactly one `DECLARE_BOARD`, and board documentation. Follow `docs/custom-board.md`.
|
||||
|
||||
@@ -57,12 +57,12 @@ idf.py --version
|
||||
|
||||
```sh
|
||||
# Discover exact board and variant names
|
||||
python3 scripts/release.py --list-boards
|
||||
python3 scripts/build.py --list-boards
|
||||
|
||||
# Canonical variant build
|
||||
python3 scripts/release.py <board-directory> --name <variant-name>
|
||||
python3 scripts/build.py <board-directory> --name <variant-name>
|
||||
|
||||
# Host-side release tests
|
||||
# Host-side build tests
|
||||
python3 -m unittest discover -s scripts/tests -v
|
||||
|
||||
# Format/check touched files
|
||||
@@ -70,7 +70,7 @@ clang-format -i <files>
|
||||
clang-format --dry-run -Werror <files>
|
||||
```
|
||||
|
||||
The release script changes local `sdkconfig` and build state. Do not assume the build directory still represents a previous target.
|
||||
The build script changes local `sdkconfig` and build state. Do not assume the build directory still represents a previous target.
|
||||
|
||||
## Validation
|
||||
|
||||
|
||||
@@ -14,7 +14,7 @@ As a voice interaction entry, the XiaoZhi AI chatbot leverages the AI capabiliti
|
||||
|
||||
## Recent Updates
|
||||
|
||||
- The mainline now targets ESP-IDF v6.0 or later, with v6.0.2 as the preferred stable SDK. The previous 157-variant baseline was validated on ESP-IDF v6.0.1; the current matrix contains 172 variants after enabling ESP32-P4 Rev < 3 builds with ESP-SR 2.4.7.
|
||||
- The mainline now targets ESP-IDF v6.0 or later, with v6.0.2 as the preferred stable SDK. The previous 157-variant baseline was validated on ESP-IDF v6.0.1; the current matrix contains 171 variants, of which 170 support IDF 6.0.x and the ESP32-S31 variant requires IDF 6.1 or later.
|
||||
- MQTT and BluFi cryptographic code has migrated to PSA Crypto. IDF 6 component splits and third-party dependency compatibility have also been addressed.
|
||||
- Audio pipeline concurrency, MQTT/UDP packet validation, and release-matrix selection have been hardened.
|
||||
- ESP-IDF v5.5 is retained only for documented legacy boards. ESP32-P4 Rev1 and Rev3 are both supported on IDF 6 with ESP-SR 2.4.7; see the [ESP-IDF 6.0 Migration Guide](docs/esp-idf-6-migration.md) for full compatibility and board-validation details.
|
||||
@@ -30,7 +30,7 @@ As a voice interaction entry, the XiaoZhi AI chatbot leverages the AI capabiliti
|
||||
- Battery display and power management
|
||||
- 38 interface languages, with localized voice prompts where available and English fallback
|
||||
- ESP32, ESP32-C3, ESP32-C5, ESP32-C6, ESP32-S3, and ESP32-P4 chip platforms
|
||||
- Wi-Fi provisioning through hotspot, acoustic signaling, or BluFi
|
||||
- Wi-Fi provisioning through hotspot or BluFi
|
||||
- Device-side MCP for device control (Speaker, LED, Servo, GPIO, etc.)
|
||||
- Cloud-side MCP to extend large model capabilities (smart home control, PC desktop operation, knowledge search, email, etc.)
|
||||
- Customizable wake words, fonts, emojis, and chat backgrounds with online web-based editing ([Custom Assets Generator](https://github.com/78/xiaozhi-assets-generator))
|
||||
@@ -47,10 +47,10 @@ Breadboard demo:
|
||||
|
||||

|
||||
|
||||
### Supports 138 Board Directories and 172 Release Variants (Partial List)
|
||||
### Supports 138 Board Directories and 171 Release Variants (Partial List)
|
||||
|
||||
- <a href="https://oshwhub.com/li-chuang-kai-fa-ban/li-chuang-shi-zhan-pai-esp32-s3-kai-fa-ban" target="_blank" title="LiChuang ESP32-S3 Development Board">LiChuang ESP32-S3 Development Board</a>
|
||||
- <a href="https://github.com/espressif/esp-box" target="_blank" title="Espressif ESP32-S3-BOX3">Espressif ESP32-S3-BOX3</a>
|
||||
- <a href="https://github.com/espressif/esp-box" target="_blank" title="Espressif ESP32-S3-BOX-3">Espressif ESP32-S3-BOX-3</a>
|
||||
- <a href="https://docs.m5stack.com/zh_CN/core/CoreS3" target="_blank" title="M5Stack CoreS3">M5Stack CoreS3</a>
|
||||
- <a href="https://docs.m5stack.com/en/atom/Atomic%20Echo%20Base" target="_blank" title="AtomS3R + Echo Base">M5Stack AtomS3R + Echo Base</a>
|
||||
- <a href="https://gf.bilibili.com/item/detail/1108782064" target="_blank" title="Magic Button 2.4">Magic Button 2.4</a>
|
||||
|
||||
+4
-4
@@ -14,7 +14,7 @@
|
||||
|
||||
## 最近の更新
|
||||
|
||||
- メインラインはESP-IDF v6.0以降へ移行し、推奨安定版はv6.0.2です。従来の157リリースバリアントはESP-IDF v6.0.1でビルド検証済みで、ESP-SR 2.4.7によってESP32-P4 Rev < 3を有効化した現在のマトリクスは172バリアントです。
|
||||
- メインラインはESP-IDF v6.0以降へ移行し、推奨安定版はv6.0.2です。従来の157リリースバリアントはESP-IDF v6.0.1でビルド検証済みです。現在のマトリクスは171バリアントで、そのうち170はIDF 6.0.xに対応し、ESP32-S31バリアントにはIDF 6.1以降が必要です。
|
||||
- MQTTとBluFiの暗号処理をPSA Cryptoへ移行し、IDF 6のコンポーネント分割およびサードパーティ依存関係にも対応しました。
|
||||
- オーディオパイプラインの並行処理、MQTT/UDPパケット検証、リリースマトリクス選択処理を強化しました。
|
||||
- ESP-IDF v5.5は、文書で明記された旧式ボード向けにのみ残しています。ESP-SR 2.4.7を使用すると、ESP32-P4 Rev1とRev3の両方がIDF 6に対応します。詳細な互換性とボード検証状況は、[ESP-IDF 6.0移行ガイド](docs/esp-idf-6-migration.md)を参照してください。
|
||||
@@ -30,7 +30,7 @@
|
||||
- バッテリー表示と電源管理
|
||||
- 38言語の画面表示に対応し、音声プロンプトはローカライズ済みリソースを優先して、未収録時は英語へフォールバック
|
||||
- ESP32、ESP32-C3、ESP32-C5、ESP32-C6、ESP32-S3、ESP32-P4チッププラットフォーム
|
||||
- ホットスポット、音響信号、BluFiによるWi-Fiプロビジョニング
|
||||
- ホットスポットまたはBluFiによるWi-Fiプロビジョニング
|
||||
- デバイス側MCPによるデバイス制御(音量・明るさ調整、アクション制御など)
|
||||
- クラウド側MCPで大規模モデル能力を拡張(スマートホーム制御、PCデスクトップ操作、知識検索、メール送受信など)
|
||||
- カスタマイズ可能なウェイクワード、フォント、絵文字、チャット背景、オンラインWeb編集に対応 ([カスタムアセットジェネレーター](https://github.com/78/xiaozhi-assets-generator))
|
||||
@@ -47,10 +47,10 @@ Feishuドキュメントチュートリアルをご覧ください:
|
||||
|
||||

|
||||
|
||||
### 138のボードディレクトリと172のリリースバリアントに対応(一部のみ表示)
|
||||
### 138のボードディレクトリと171のリリースバリアントに対応(一部のみ表示)
|
||||
|
||||
- <a href="https://oshwhub.com/li-chuang-kai-fa-ban/li-chuang-shi-zhan-pai-esp32-s3-kai-fa-ban" target="_blank" title="立創・実戦派 ESP32-S3 開発ボード">立創・実戦派 ESP32-S3 開発ボード</a>
|
||||
- <a href="https://github.com/espressif/esp-box" target="_blank" title="楽鑫 ESP32-S3-BOX3">楽鑫 ESP32-S3-BOX3</a>
|
||||
- <a href="https://github.com/espressif/esp-box" target="_blank" title="楽鑫 ESP32-S3-BOX-3">楽鑫 ESP32-S3-BOX-3</a>
|
||||
- <a href="https://docs.m5stack.com/zh_CN/core/CoreS3" target="_blank" title="M5Stack CoreS3">M5Stack CoreS3</a>
|
||||
- <a href="https://docs.m5stack.com/en/atom/Atomic%20Echo%20Base" target="_blank" title="AtomS3R + Echo Base">M5Stack AtomS3R + Echo Base</a>
|
||||
- <a href="https://gf.bilibili.com/item/detail/1108782064" target="_blank" title="マジックボタン2.4">マジックボタン2.4</a>
|
||||
|
||||
+4
-4
@@ -14,7 +14,7 @@
|
||||
|
||||
## 近期更新
|
||||
|
||||
- 项目主线现已迁移到 ESP-IDF v6.0 或以上版本,首选稳定版为 v6.0.2;此前的 157 个发布变体已在 ESP-IDF v6.0.1 上通过构建验证,使用 ESP-SR 2.4.7 启用 ESP32-P4 Rev < 3 后,当前矩阵包含 172 个变体。
|
||||
- 项目主线现已迁移到 ESP-IDF v6.0 或以上版本,首选稳定版为 v6.0.2;此前的 157 个发布变体已在 ESP-IDF v6.0.1 上通过构建验证。当前矩阵包含 171 个变体,其中 170 个支持 IDF 6.0.x,ESP32-S31 变体需要 IDF 6.1 或以上版本。
|
||||
- MQTT 和 BluFi 加密已迁移到 PSA Crypto,同时完成了 IDF 6 组件拆分及第三方依赖兼容处理。
|
||||
- 加固了音频流水线并发、MQTT/UDP 数据包校验和发布矩阵选择逻辑。
|
||||
- ESP-IDF v5.5 仅保留用于文档明确标注的旧版板卡;使用 ESP-SR 2.4.7 时,ESP32-P4 Rev1 和 Rev3 均支持 IDF 6。完整兼容性和板卡验证状态请参阅 [ESP-IDF 6.0 迁移文档](docs/esp-idf-6-migration.md)。
|
||||
@@ -30,7 +30,7 @@
|
||||
- 电量显示与电源管理
|
||||
- 提供 38 种界面语言;语音提示优先使用本地化资源,缺失时自动回退到英文
|
||||
- 支持 ESP32、ESP32-C3、ESP32-C5、ESP32-C6、ESP32-S3、ESP32-P4 芯片平台
|
||||
- 支持热点、声波和 BluFi 三种 Wi-Fi 配网方式
|
||||
- 支持热点和 BluFi 两种 Wi-Fi 配网方式
|
||||
- 通过设备端 MCP 实现设备控制(音量、灯光、电机、GPIO 等)
|
||||
- 通过云端 MCP 扩展大模型能力(智能家居控制、PC桌面操作、知识搜索、邮件收发等)
|
||||
- 自定义唤醒词、字体、表情与聊天背景,支持网页端在线修改 ([自定义Assets生成器](https://github.com/78/xiaozhi-assets-generator))
|
||||
@@ -47,10 +47,10 @@
|
||||
|
||||

|
||||
|
||||
### 支持 138 个板卡目录、172 个固件发布变体(仅展示部分)
|
||||
### 支持 138 个板卡目录、171 个固件发布变体(仅展示部分)
|
||||
|
||||
- <a href="https://oshwhub.com/li-chuang-kai-fa-ban/li-chuang-shi-zhan-pai-esp32-s3-kai-fa-ban" target="_blank" title="立创·实战派 ESP32-S3 开发板">立创·实战派 ESP32-S3 开发板</a>
|
||||
- <a href="https://github.com/espressif/esp-box" target="_blank" title="乐鑫 ESP32-S3-BOX3">乐鑫 ESP32-S3-BOX3</a>
|
||||
- <a href="https://github.com/espressif/esp-box" target="_blank" title="乐鑫 ESP32-S3-BOX-3">乐鑫 ESP32-S3-BOX-3</a>
|
||||
- <a href="https://docs.m5stack.com/zh_CN/core/CoreS3" target="_blank" title="M5Stack CoreS3">M5Stack CoreS3</a>
|
||||
- <a href="https://docs.m5stack.com/en/atom/Atomic%20Echo%20Base" target="_blank" title="AtomS3R + Echo Base">M5Stack AtomS3R + Echo Base</a>
|
||||
- <a href="https://gf.bilibili.com/item/detail/1108782064" target="_blank" title="神奇按钮 2.4">神奇按钮 2.4</a>
|
||||
|
||||
+2
-2
@@ -5,7 +5,7 @@ This document explains how to enable and use BluFi (BLE-based WiFi provisioning)
|
||||
## Prerequisites
|
||||
|
||||
- A chip and firmware configuration that support BLE.
|
||||
- In `idf.py menuconfig`, enable `WiFi Configuration Method -> Esp Blufi` (`CONFIG_USE_ESP_BLUFI_WIFI_PROVISIONING=y`). If you want to use BluFi, disable the Hotspot option in the same menu; otherwise hotspot provisioning wins by default.
|
||||
- In `idf.py menuconfig`, enable `WiFi Configuration Method -> ESP-BluFi` (`CONFIG_USE_ESP_BLUFI_WIFI_PROVISIONING=y`). If you want to use BluFi, disable the Hotspot option in the same menu; otherwise hotspot provisioning wins by default.
|
||||
- Keep the default NVS and event-loop initialization provided by the project's `app_main`.
|
||||
- Exactly one of `CONFIG_BT_BLUEDROID_ENABLED` / `CONFIG_BT_NIMBLE_ENABLED` must be selected; they are mutually exclusive.
|
||||
|
||||
@@ -18,7 +18,7 @@ This document explains how to enable and use BluFi (BLE-based WiFi provisioning)
|
||||
|
||||
## Steps
|
||||
|
||||
1. **Configure**: turn on `Esp Blufi` in menuconfig, then build and flash the firmware.
|
||||
1. **Configure**: turn on `ESP-BluFi` in menuconfig, then build and flash the firmware.
|
||||
2. **Trigger provisioning**: at first boot with no stored WiFi credentials the device enters provisioning automatically.
|
||||
3. **Phone side**: open the EspBlufi app (or another BluFi client), scan and connect to the device, optionally enable encryption, then enter the WiFi SSID / password and send them.
|
||||
4. **Observe the result**:
|
||||
|
||||
+2
-2
@@ -7,7 +7,7 @@ BluFi
|
||||
## 前置条件
|
||||
|
||||
- 需要支持 BLE 的芯片与固件配置。
|
||||
- 在 `idf.py menuconfig` 中启用 `WiFi Configuration Method -> Esp Blufi`(`CONFIG_USE_ESP_BLUFI_WIFI_PROVISIONING=y`
|
||||
- 在 `idf.py menuconfig` 中启用 `WiFi Configuration Method -> ESP-BluFi`(`CONFIG_USE_ESP_BLUFI_WIFI_PROVISIONING=y`
|
||||
)。如果想使用 BluFi,必须关闭同一菜单下的 Hotspot 选项,否则默认使用 Hotspot 配网模式。
|
||||
|
||||
- 保持默认的 NVS 与事件循环初始化(项目的 `app_main` 已处理)。
|
||||
@@ -21,7 +21,7 @@ BluFi
|
||||
|
||||
## 使用步骤
|
||||
|
||||
1. 配置:在 menuconfig 开启 `Esp Blufi`。编译并烧录固件。
|
||||
1. 配置:在 menuconfig 开启 `ESP-BluFi`。编译并烧录固件。
|
||||
2. 触发配网:设备首次启动且没有已保存的 Wi‑Fi 时会自动进入配网。
|
||||
3. 手机端操作:打开 EspBlufi App(或其他 BluFi 客户端),搜索并连接设备,可以选择是否加密,按提示输入 Wi‑Fi SSID/密码并发送。
|
||||
4. 观察结果:
|
||||
|
||||
+66
-24
@@ -4,7 +4,7 @@ This guide describes how to add a new board to the XiaoZhi AI voice assistant pr
|
||||
|
||||
## Important
|
||||
|
||||
> **Warning**: for a custom board whose IO configuration differs from an existing board, never overwrite the original board's configuration. Always create a new board type - or use the `builds` array in `config.json` to produce a distinct firmware name with different `sdkconfig` macros. Use `python scripts/release.py [board-directory]` to build and package the firmware.
|
||||
> **Warning**: for a custom board whose IO configuration differs from an existing board, never overwrite the original board's configuration. Always create a new board type - or use the `builds` array in `config.json` to produce a distinct firmware name with different `sdkconfig` macros. Use `python scripts/build.py [board-directory]` to build the firmware.
|
||||
>
|
||||
> Overwriting an existing board's configuration is dangerous because OTA updates may replace your custom firmware with the stock firmware for the original board. Every board must have a unique identity and its own firmware update channel.
|
||||
|
||||
@@ -14,7 +14,7 @@ A board directory typically contains:
|
||||
|
||||
- `xxx_board.cc` - board-level initialization and glue code.
|
||||
- `config.h` - pin assignments and board-level settings.
|
||||
- `config.json` - build configuration consumed by `scripts/release.py`.
|
||||
- `config.json` - reported board type and release configuration consumed by CMake and `scripts/build.py`.
|
||||
- `README.md` - board-specific notes.
|
||||
|
||||
Boards can live directly under `main/boards/` or be grouped by manufacturer under `main/boards/<manufacturer>/<board>/` (see [Manufacturer Sub-directories](#manufacturer-sub-directories) below).
|
||||
@@ -89,10 +89,11 @@ Example (from `lichuang-c3-dev`):
|
||||
|
||||
#### config.json
|
||||
|
||||
`config.json` drives `scripts/release.py`:
|
||||
`config.json` defines the compatibility-sensitive reported type and drives `scripts/build.py`:
|
||||
|
||||
```json
|
||||
{
|
||||
"type": "my-custom-board",
|
||||
"target": "esp32s3",
|
||||
"builds": [
|
||||
{
|
||||
@@ -107,32 +108,40 @@ Example (from `lichuang-c3-dev`):
|
||||
```
|
||||
|
||||
**Fields**:
|
||||
- `type`: compatibility-sensitive board family reported by the firmware. Keep it stable after release.
|
||||
- `target`: target chip, must match the real hardware (`esp32`, `esp32s3`, `esp32c3`, `esp32c6`, `esp32p4`, ...).
|
||||
- `name`: firmware package name; typically matches the directory name.
|
||||
- `name`: compatibility-sensitive firmware variant name reported by release builds; typically matches `type`.
|
||||
- `sdkconfig_append`: extra sdkconfig lines merged into the defaults.
|
||||
|
||||
Both `type` and `name` must contain only lowercase letters, digits, periods
|
||||
(`.`), and hyphens (`-`). Underscores, spaces, and uppercase letters are not
|
||||
allowed.
|
||||
|
||||
**Common `sdkconfig_append` entries**:
|
||||
|
||||
```json
|
||||
// Flash size
|
||||
"CONFIG_ESPTOOLPY_FLASHSIZE_4MB=y"
|
||||
"CONFIG_ESPTOOLPY_FLASHSIZE_8MB=y"
|
||||
"CONFIG_ESPTOOLPY_FLASHSIZE_16MB=y"
|
||||
|
||||
// Partition table
|
||||
"CONFIG_PARTITION_TABLE_CUSTOM_FILENAME=\"partitions/v2/4m.csv\""
|
||||
"CONFIG_PARTITION_TABLE_CUSTOM_FILENAME=\"partitions/v2/8m.csv\""
|
||||
"CONFIG_PARTITION_TABLE_CUSTOM_FILENAME=\"partitions/v2/16m.csv\""
|
||||
|
||||
// Language
|
||||
"CONFIG_LANGUAGE_EN_US=y"
|
||||
"CONFIG_LANGUAGE_ZH_CN=y"
|
||||
|
||||
// Wake word configuration
|
||||
// Audio pipeline
|
||||
"CONFIG_USE_DEVICE_AEC=y" // enable on-device AEC
|
||||
"CONFIG_WAKE_WORD_DISABLED=y" // disable wake word detection
|
||||
```
|
||||
|
||||
The project defaults to 16MB flash and `partitions/v2/16m.csv` on applicable
|
||||
targets. Do not repeat values that already match the effective project and
|
||||
target defaults; use `sdkconfig_append` only for actual board-specific
|
||||
overrides.
|
||||
|
||||
Do not select a language or a specific wake word in a board `config.json`.
|
||||
Those are user build options and must be configured consistently through
|
||||
`menuconfig` or build-script parameters so CLI, agent, and online builds can
|
||||
share the same interface.
|
||||
|
||||
### 3. Implement the Board Class
|
||||
|
||||
Create `my_custom_board.cc` containing the board-level implementation.
|
||||
@@ -310,7 +319,7 @@ Open `main/CMakeLists.txt` and extend the board-type chain:
|
||||
|
||||
```cmake
|
||||
elseif(CONFIG_BOARD_TYPE_MY_CUSTOM_BOARD)
|
||||
set(BOARD_TYPE "my-custom-board") # must match the directory name
|
||||
set(BOARD_DIR "my-custom-board")
|
||||
set(BUILTIN_TEXT_FONT font_puhui_basic_20_4) # pick a font for the display
|
||||
set(BUILTIN_ICON_FONT font_awesome_20_4)
|
||||
set(DEFAULT_EMOJI_COLLECTION twemoji_64) // optional, for emoji display
|
||||
@@ -356,18 +365,51 @@ Emoji collections:
|
||||
idf.py flash monitor
|
||||
```
|
||||
|
||||
#### Option B - use `release.py` (recommended)
|
||||
#### Option B - use `build.py` (recommended)
|
||||
|
||||
If the board directory contains a `config.json`, you can build and package automatically:
|
||||
If the board directory contains a `config.json`, you can configure and build it automatically:
|
||||
|
||||
```bash
|
||||
python scripts/release.py my-custom-board
|
||||
python scripts/build.py my-custom-board
|
||||
```
|
||||
|
||||
Language and wake-word selection are user build options:
|
||||
|
||||
```bash
|
||||
python scripts/build.py my-custom-board \
|
||||
--language en-US \
|
||||
--wake-word wn9_jarvis_tts
|
||||
```
|
||||
|
||||
`--language` accepts a locale listed under `main/assets/locales/`.
|
||||
`--wake-word` accepts an ESP-SR model name, `nihaoxiaozhi` (which selects the
|
||||
compatible model for the target), or `disabled`. ESP32-C3/C5/C6 targets support
|
||||
WakeNet9s (`wn9s_*`) models; ESP32-S3/P4/S31 builds automatically use the AFE
|
||||
wake-word engine.
|
||||
|
||||
Query the accepted values in text or machine-readable form:
|
||||
|
||||
```bash
|
||||
python scripts/build.py --list-languages
|
||||
python scripts/build.py --list-languages --json
|
||||
python scripts/build.py --list-wake-words
|
||||
python scripts/build.py --list-wake-words --json
|
||||
```
|
||||
|
||||
The wake-word list is read from the currently resolved ESP-SR component, so
|
||||
run `idf.py reconfigure` first if `managed_components/` has not been populated.
|
||||
|
||||
The script:
|
||||
- Reads `target` from `config.json` and calls `idf.py set-target`.
|
||||
- Appends the entries listed in `sdkconfig_append`.
|
||||
- Builds and packages the firmware.
|
||||
- Prints help when run without arguments. Use `--list-boards` to list board
|
||||
types and variants.
|
||||
- Prompts for a variant when the selected board has multiple builds. In
|
||||
non-interactive environments, pass `--name <variant>`.
|
||||
- Reads `target` from `config.json`. It calls `idf.py set-target` only when the
|
||||
target changes, then regenerates `sdkconfig` from defaults and the selected
|
||||
build's `sdkconfig_append`.
|
||||
- Passes the selected build's `name` as the reported firmware variant name.
|
||||
- Builds `build/merged-binary.bin` without creating a ZIP by default. Pass
|
||||
`--zip` to recreate `releases/v<version>_<name>.zip`.
|
||||
|
||||
### 6. Write the README
|
||||
|
||||
@@ -377,18 +419,19 @@ In `README.md`, describe the board, hardware requirements, build instructions, a
|
||||
|
||||
Boards can be grouped by manufacturer under `main/boards/<manufacturer>/<board>/`. This is the recommended layout when a single vendor ships several variants - for example `main/boards/waveshare/esp32-p4-nano/` or `main/boards/lceda-course-examples/eda-tv-pro/`.
|
||||
|
||||
To enable the layout, set the `MANUFACTURER` variable in `main/CMakeLists.txt` for your board:
|
||||
For a board in a manufacturer sub-directory, add the same value to `config.json`, for example `"manufacturer": "waveshare"`. The firmware reports it as `board.manufacturer` together with `board.type` and `board.name`. Flat community boards without this field report an empty manufacturer string.
|
||||
|
||||
Set `BOARD_DIR` to the complete path relative to `main/boards/`:
|
||||
|
||||
```cmake
|
||||
elseif(CONFIG_BOARD_TYPE_WAVESHARE_ESP32_P4_NANO)
|
||||
set(MANUFACTURER "waveshare")
|
||||
set(BOARD_TYPE "esp32-p4-nano")
|
||||
set(BOARD_DIR "waveshare/esp32-p4-nano")
|
||||
set(BUILTIN_TEXT_FONT font_puhui_basic_30_4)
|
||||
set(BUILTIN_ICON_FONT font_awesome_30_4)
|
||||
set(DEFAULT_EMOJI_COLLECTION twemoji_64)
|
||||
```
|
||||
|
||||
When `MANUFACTURER` is set, the build system globs source files from `main/boards/${MANUFACTURER}/${BOARD_TYPE}/`. When it is empty, it falls back to the flat `main/boards/${BOARD_TYPE}/` layout.
|
||||
The build system loads sources from `main/boards/${BOARD_DIR}/` and reads the reported board type from that directory's `config.json`. If `config.json` or its top-level `type` is absent, the full `BOARD_DIR` with `/` replaced by `-` is used as the fallback type.
|
||||
|
||||
Rules of thumb:
|
||||
- Use the manufacturer layout when you have two or more boards from the same vendor that share drivers, assets, or documentation.
|
||||
@@ -437,7 +480,6 @@ Supported LCD families include:
|
||||
- `Button` - standard push buttons (click, long-press, multi-click).
|
||||
- `Knob` - rotary encoder wrapper.
|
||||
- `PressToTalkMcpTool` - push-to-talk tool that registers itself through MCP.
|
||||
- `AfskDemod` - AFSK demodulator used by some acoustic provisioning flows.
|
||||
- `SystemReset` - helper that performs a safe factory reset when a button is held at boot.
|
||||
|
||||
### MCP integration
|
||||
|
||||
+56
-19
@@ -4,7 +4,7 @@
|
||||
|
||||
## 重要提示
|
||||
|
||||
> **警告**: 对于自定义开发板,当IO配置与原有开发板不同时,切勿直接覆盖原有开发板的配置编译固件。必须创建新的开发板类型,或者通过config.json文件中的builds配置不同的name和sdkconfig宏定义来区分。使用 `python scripts/release.py [开发板目录名字]` 来编译打包固件。
|
||||
> **警告**: 对于自定义开发板,当IO配置与原有开发板不同时,切勿直接覆盖原有开发板的配置编译固件。必须创建新的开发板类型,或者通过config.json文件中的builds配置不同的name和sdkconfig宏定义来区分。使用 `python scripts/build.py [开发板目录名字]` 来编译固件。
|
||||
>
|
||||
> 如果直接覆盖原有配置,将来OTA升级时,您的自定义固件可能会被原有开发板的标准固件覆盖,导致您的设备无法正常工作。每个开发板有唯一的标识和对应的固件升级通道,保持开发板标识的唯一性非常重要。
|
||||
|
||||
@@ -14,7 +14,7 @@
|
||||
|
||||
- `xxx_board.cc` - 主要的板级初始化代码,实现了板子相关的初始化和功能
|
||||
- `config.h` - 板级配置文件,定义了硬件管脚映射和其他配置项
|
||||
- `config.json` - 编译配置,指定目标芯片和特殊的编译选项
|
||||
- `config.json` - 上报开发板类型及发布配置,供 CMake 和 `scripts/build.py` 使用
|
||||
- `README.md` - 开发板相关的说明文档
|
||||
|
||||
## 定制开发板步骤
|
||||
@@ -87,10 +87,11 @@ mkdir main/boards/my-custom-board
|
||||
|
||||
#### config.json
|
||||
|
||||
在`config.json`中定义编译配置,这个文件用于 `scripts/release.py` 脚本自动化编译:
|
||||
在`config.json`中定义兼容性相关的上报类型和自动化编译配置:
|
||||
|
||||
```json
|
||||
{
|
||||
"type": "my-custom-board", // 固件上报的开发板类型,发布后应保持稳定
|
||||
"target": "esp32s3", // 目标芯片型号: esp32, esp32s3, esp32c3, esp32c6, esp32p4等
|
||||
"builds": [
|
||||
{
|
||||
@@ -107,31 +108,37 @@ mkdir main/boards/my-custom-board
|
||||
```
|
||||
|
||||
**配置项说明:**
|
||||
- `manufacturer`: 厂商子目录名称;使用厂商目录时必须填写,并作为 `board.manufacturer` 上报。平铺社区板可以省略,上报为空字符串
|
||||
- `type`: 固件上报的开发板系列类型,发布后应保持稳定
|
||||
- `target`: 目标芯片型号,必须与硬件匹配
|
||||
- `name`: 编译输出的固件包名称,建议与目录名一致
|
||||
- `name`: release 构建上报的固件变体名称,通常与 `type` 一致
|
||||
- `sdkconfig_append`: 额外的 sdkconfig 配置项数组,会追加到默认配置中
|
||||
|
||||
`type` 和 `name` 只能包含小写字母、数字、点(`.`)和连字符(`-`),
|
||||
不允许使用下划线、空格或大写字母。
|
||||
|
||||
**常用的 sdkconfig_append 配置:**
|
||||
```json
|
||||
// Flash 大小
|
||||
"CONFIG_ESPTOOLPY_FLASHSIZE_4MB=y" // 4MB Flash
|
||||
"CONFIG_ESPTOOLPY_FLASHSIZE_8MB=y" // 8MB Flash
|
||||
"CONFIG_ESPTOOLPY_FLASHSIZE_16MB=y" // 16MB Flash
|
||||
|
||||
// 分区表
|
||||
"CONFIG_PARTITION_TABLE_CUSTOM_FILENAME=\"partitions/v2/4m.csv\"" // 4MB 分区表
|
||||
"CONFIG_PARTITION_TABLE_CUSTOM_FILENAME=\"partitions/v2/8m.csv\"" // 8MB 分区表
|
||||
"CONFIG_PARTITION_TABLE_CUSTOM_FILENAME=\"partitions/v2/16m.csv\"" // 16MB 分区表
|
||||
|
||||
// 语言配置
|
||||
"CONFIG_LANGUAGE_EN_US=y" // 英语
|
||||
"CONFIG_LANGUAGE_ZH_CN=y" // 简体中文
|
||||
|
||||
// 唤醒词配置
|
||||
// 音频处理
|
||||
"CONFIG_USE_DEVICE_AEC=y" // 启用设备端 AEC
|
||||
"CONFIG_WAKE_WORD_DISABLED=y" // 禁用唤醒词
|
||||
```
|
||||
|
||||
对于适用的目标芯片,项目默认使用 16MB Flash 和
|
||||
`partitions/v2/16m.csv`。如果板子配置与项目及目标芯片的有效默认值相同,
|
||||
不要在 `sdkconfig_append` 中重复填写;这里应只保留板子确实需要的覆盖项。
|
||||
|
||||
不要在板子的 `config.json` 中选择语言或具体唤醒词。这些属于用户构建选项,
|
||||
应统一通过 `menuconfig` 或构建脚本参数配置,方便 CLI、Agent 和在线编译接口
|
||||
共用同一套参数。
|
||||
|
||||
### 3. 编写板级初始化代码
|
||||
|
||||
创建一个`my_custom_board.cc`文件,实现开发板的所有初始化逻辑。
|
||||
@@ -321,7 +328,7 @@ endchoice
|
||||
```cmake
|
||||
# 在 elseif 链中添加你的开发板配置
|
||||
elseif(CONFIG_BOARD_TYPE_MY_CUSTOM_BOARD)
|
||||
set(BOARD_TYPE "my-custom-board") # 与目录名一致
|
||||
set(BOARD_DIR "my-custom-board") # 相对于 main/boards 的完整路径
|
||||
set(BUILTIN_TEXT_FONT font_puhui_basic_20_4) # 根据屏幕大小选择合适的字体
|
||||
set(BUILTIN_ICON_FONT font_awesome_20_4)
|
||||
set(DEFAULT_EMOJI_COLLECTION twemoji_64) # 可选,如果需要表情显示
|
||||
@@ -374,18 +381,48 @@ endif()
|
||||
idf.py flash monitor
|
||||
```
|
||||
|
||||
#### 方法二:使用 release.py 脚本(推荐)
|
||||
#### 方法二:使用 build.py 脚本(推荐)
|
||||
|
||||
如果你的开发板目录下有 `config.json` 文件,可以使用此脚本自动完成配置和编译:
|
||||
|
||||
```bash
|
||||
python scripts/release.py my-custom-board
|
||||
python scripts/build.py my-custom-board
|
||||
```
|
||||
|
||||
语言和唤醒词属于用户构建参数:
|
||||
|
||||
```bash
|
||||
python scripts/build.py my-custom-board \
|
||||
--language en-US \
|
||||
--wake-word wn9_jarvis_tts
|
||||
```
|
||||
|
||||
`--language` 接受 `main/assets/locales/` 下已有的 locale;`--wake-word`
|
||||
接受 ESP-SR 模型名、`nihaoxiaozhi`(自动选择与目标芯片兼容的模型)或
|
||||
`disabled`。ESP32-C3/C5/C6 仅支持 WakeNet9s(`wn9s_*`)模型;
|
||||
ESP32-S3/P4/S31 构建会自动使用 AFE 唤醒引擎。
|
||||
|
||||
可以用文本或 JSON 格式查询可用值:
|
||||
|
||||
```bash
|
||||
python scripts/build.py --list-languages
|
||||
python scripts/build.py --list-languages --json
|
||||
python scripts/build.py --list-wake-words
|
||||
python scripts/build.py --list-wake-words --json
|
||||
```
|
||||
|
||||
唤醒词列表从当前已解析的 ESP-SR 组件读取。如果尚未生成
|
||||
`managed_components/`,请先运行 `idf.py reconfigure`。
|
||||
|
||||
此脚本会自动:
|
||||
- 读取 `config.json` 中的 `target` 配置并设置目标芯片
|
||||
- 应用 `sdkconfig_append` 中的编译选项
|
||||
- 完成编译并打包固件
|
||||
- 不传参数时打印帮助;使用 `--list-boards` 列出所有开发板类型和变体
|
||||
- 如果开发板有多个变体,交互式提示选择;非交互环境使用 `--name <变体>`
|
||||
- 读取 `config.json` 中的 `target`,仅在目标芯片变化时调用
|
||||
`idf.py set-target`,然后根据 defaults 和所选变体的
|
||||
`sdkconfig_append` 重新生成 `sdkconfig`
|
||||
- 将所选 build 的 `name` 作为固件上报的变体名称
|
||||
- 默认生成 `build/merged-binary.bin`,不创建 ZIP;指定 `--zip` 时会重新生成
|
||||
`releases/v<版本>_<名称>.zip`
|
||||
|
||||
### 6. 创建README.md
|
||||
|
||||
@@ -450,4 +487,4 @@ python scripts/release.py my-custom-board
|
||||
|
||||
- ESP-IDF 文档: https://docs.espressif.com/projects/esp-idf/
|
||||
- LVGL 文档: https://docs.lvgl.io/
|
||||
- ESP-SR 文档: https://github.com/espressif/esp-sr
|
||||
- ESP-SR 文档: https://github.com/espressif/esp-sr
|
||||
|
||||
+51
-54
@@ -2,16 +2,16 @@
|
||||
|
||||
> Last updated: 2026-07-24
|
||||
> Validated SDK: ESP-IDF v6.0.1
|
||||
> Scope: 138 board directories and 172 supported build variants defined by `main/boards/**/config.json`.
|
||||
> Scope: 138 board directories and 171 supported build variants defined by `main/boards/**/config.json`.
|
||||
|
||||
## Current Status
|
||||
|
||||
The current IDF 6 release selection contains 172 variants. The previous 157-variant baseline passed the latest complete GitHub Actions matrix on ESP-IDF 6.0.1. ESP-SR 2.4.7 adds IDF 6 support for ESP32-P4 Rev < 3, so the 14 unsuffixed Rev1 variants now join their existing `-p4x` Rev3 counterparts in the IDF 6 matrix. Component versions that use ranges are resolved from the Component Registry at build time; until per-target lock snapshots are committed, this is a source-reproducible build rather than a bit-for-bit dependency-reproducible build.
|
||||
The current release matrix contains 171 variants: 170 select on IDF 6.0.x, while the ESP32-S31 variant requires IDF 6.1 or later. The previous 157-variant baseline passed the latest complete GitHub Actions matrix on ESP-IDF 6.0.1. ESP-SR 2.4.7 adds IDF 6 support for ESP32-P4 Rev < 3, so the 14 unsuffixed Rev1 variants now join their existing `-p4x` Rev3 counterparts in the IDF 6 matrix. Component versions that use ranges are resolved from the Component Registry at build time; until per-target lock snapshots are committed, this is a source-reproducible build rather than a bit-for-bit dependency-reproducible build.
|
||||
|
||||
| Status | Variants | Meaning |
|
||||
|---|---:|---|
|
||||
| ✅ Previously matrix-validated | 157 | All 157 baseline builds completed in GitHub Actions with ESP-IDF 6.0.1; this does not imply hardware or complete peripheral validation |
|
||||
| 🟡 Added since full-matrix validation | 15 | Includes the 14 newly enabled P4 Rev1 variants; representative validation is recorded below and a complete 172-variant CI run remains pending |
|
||||
| 🟡 Net variants added since full-matrix validation | 14 | Includes the 14 newly enabled P4 Rev1 variants and the IDF 6.1-only ESP32-S31 variant, after retired low-use variants were removed; a complete current-matrix CI run remains pending |
|
||||
| 🟡 Feature-degraded subset | 1 | `esp-vocat` builds on IDF 6, but its PCB capacitive slider/button support is disabled pending compatible touch-sensor components |
|
||||
| 🔴 Build-blocked | 0 | No supported release variant remains blocked at compile or link time |
|
||||
|
||||
@@ -22,7 +22,7 @@ Representative local full-build results are shown below. Firmware size and free
|
||||
| Chip | Build variant | Application size | Free space in smallest app partition |
|
||||
|---|---|---:|---:|
|
||||
| ESP32 | `bread-compact-esp32` | `0x240560` | 23% |
|
||||
| ESP32-C3 | `esp-hi` | `0x20ef10` | 30% |
|
||||
| ESP32-C3 | `espressif-esp-hi` | `0x20ef10` | 30% |
|
||||
| ESP32-C3 | `xmini-c3` | `0x2370f0` | 44% |
|
||||
| ESP32-C5 | `waveshare-esp32-c5-touch-lcd-1.69` | `0x27cd30` | 37% |
|
||||
| ESP32-C6 | `waveshare-esp32-c6-lcd-0.85` | `0x280ee0` | 15% |
|
||||
@@ -32,19 +32,19 @@ Representative local full-build results are shown below. Firmware size and free
|
||||
| ESP32-S3 | `zhengchen-1.54tft-wifi` | `0x2abdc0` | 32% |
|
||||
| ESP32-S3 | `kevin-yuying-313lcd` | `0x2c4990` | 30% |
|
||||
| ESP32-S3 | `otto-robot` | `0x37ff70` | 11% |
|
||||
| ESP32-S3 | `esp-vocat` | `0x2742f0` | 38% |
|
||||
| ESP32-S3 | `espressif-esp-vocat` | `0x2742f0` | 38% |
|
||||
| ESP32-S3 | `sensecap-watcher` | `0x2faff0` | 25% |
|
||||
| ESP32-P4 Rev1 | `esp-p4-function-ev-board` | `0x345a90` | 17% |
|
||||
| ESP32-P4 Rev3 | `esp-p4-function-ev-board-p4x` | `0x34a150` | 16% |
|
||||
| ESP32-P4 Rev1 | `espressif-esp32-p4-function-ev-board` | `0x345a90` | 17% |
|
||||
| ESP32-P4 Rev3 | `espressif-esp32-p4x-function-ev-board` | `0x34a150` | 16% |
|
||||
| ESP32-P4 v3.x | `m5stack-tab5-p4x` | `0x380790` | 11% |
|
||||
|
||||
The old negative result for `esp-p4-function-ev-board` came from ESP-SR 2.4.6. ESP-SR 2.4.7 supplies the missing ESP32-P4 Rev < 3 libraries for IDF 6, so the project no longer version-gates the unsuffixed P4 variants.
|
||||
The old negative result for `esp32-p4-function-ev-board` came from ESP-SR 2.4.6. ESP-SR 2.4.7 supplies the missing ESP32-P4 Rev < 3 libraries for IDF 6, so the project no longer version-gates the P4 variants.
|
||||
|
||||
For backward-compatibility regression coverage, `xmini-c3` also completed a full build with ESP-IDF 5.5.4 (application size `0x234920`, 44% free in the smallest app partition). The legacy `esp-p4-function-ev-board` release variant subsequently completed the same 5.5.4 release flow (application size `0x38a130`, 10% free), including merged-binary packaging. This confirms that the compatibility changes for I2S port numbering, LCD I2C configuration, the UHCI DMA dependency, and the pre-v3 P4 selection did not break the existing 5.5 build chain.
|
||||
For backward-compatibility regression coverage, `xmini-c3` also completed a full build with ESP-IDF 5.5.4 (application size `0x234920`, 44% free in the smallest app partition). The legacy `esp32-p4-function-ev-board` release variant subsequently completed the same 5.5.4 release flow (application size `0x38a130`, 10% free), including merged-binary packaging. This confirms that the compatibility changes for I2S port numbering, LCD I2C configuration, the UHCI DMA dependency, and the pre-v3 P4 selection did not break the existing 5.5 build chain.
|
||||
|
||||
## Full-Matrix CI Validation
|
||||
|
||||
GitHub Actions run [29534954031](https://github.com/78/xiaozhi-esp32/actions/runs/29534954031) built the then-current matrix with the `espressif/idf:v6.0.1` container. The matrix-generation job and all 157 board builds passed. This historical run predates the 172-variant matrix.
|
||||
GitHub Actions run [29534954031](https://github.com/78/xiaozhi-esp32/actions/runs/29534954031) built the then-current matrix with the `espressif/idf:v6.0.1` container. The matrix-generation job and all 157 board builds passed. This historical run predates the current 170-variant IDF 6.0.x matrix.
|
||||
|
||||
Results by chip target:
|
||||
|
||||
@@ -66,10 +66,10 @@ The IDF 6 release matrix supports both ESP32-P4 Rev < 3 and Rev >= 3 silicon. Th
|
||||
|
||||
| SDK | ESP32-P4 Rev < 3 | ESP32-P4 Rev >= 3 |
|
||||
|---|---|---|
|
||||
| ESP-IDF < 6 | Original name without a suffix; adds `CONFIG_ESP32P4_SELECTS_REV_LESS_V3=y` and `CONFIG_ESP32P4_REV_MIN_100=y` | Original name plus `-p4x` |
|
||||
| ESP-IDF >= 6 | Original name without a suffix; adds `CONFIG_ESP32P4_SELECTS_REV_LESS_V3=y` and `CONFIG_ESP32P4_REV_MIN_100=y` | Original name plus `-p4x` |
|
||||
| ESP-IDF < 6 | Original `esp32-p4-` name; adds `CONFIG_ESP32P4_SELECTS_REV_LESS_V3=y` and `CONFIG_ESP32P4_REV_MIN_100=y` | Uses `esp32-p4x-` when the variant starts with the chip name; otherwise retains the established `-p4x` suffix |
|
||||
| ESP-IDF >= 6 | Original `esp32-p4-` name; adds `CONFIG_ESP32P4_SELECTS_REV_LESS_V3=y` and `CONFIG_ESP32P4_REV_MIN_100=y` | Uses `esp32-p4x-` when the variant starts with the chip name; otherwise retains the established `-p4x` suffix |
|
||||
|
||||
Both ESP-IDF 5.5 and ESP-IDF 6 now select 172 variants: 14 P4 `-p4x` artifacts, 14 Rev < 3 P4 artifacts with their original unsuffixed names, and 144 non-P4 variants.
|
||||
ESP-IDF 5.5 and 6.0.x each select 170 variants: 14 P4X artifacts, 14 Rev < 3 P4 artifacts with their original names, and 142 non-P4 variants. ESP-IDF 6.1 or later additionally selects the ESP32-S31 build, for 171 variants in total.
|
||||
|
||||
Espressif's current chip-identification table lists v0.0, v1.0, v1.3, v3.0, v3.1, and v3.2, with no v4.0 revision. The public errata history added v3.0/v3.1 information on 2026-02-12 and v3.2 information on 2026-04-20. ESP-IDF 6.0 release notes explicitly describe support for "ESP32-P4 Version3 silicon." See the official [chip revision identification](https://docs.espressif.com/projects/esp-chip-errata/en/latest/esp32p4/01-chip-identification/index.html), [errata revision history](https://docs.espressif.com/projects/esp-chip-errata/en/latest/esp32p4/revision-history/index.html), and [ESP-IDF releases](https://github.com/espressif/esp-idf/releases).
|
||||
|
||||
@@ -96,11 +96,11 @@ Espressif's current chip-identification table lists v0.0, v1.0, v1.3, v3.0, v3.1
|
||||
| BluFi security negotiation (conditional path) | PSA FFDH + SHA-256 + AES-CTR | ✅ Ported | Uses the ESP-IDF 6 security scheme with ffdhe3072 and passed local full ESP32-S3 builds with BluFi enabled on IDF 5.5.4 and 6.0.1. Legacy 1024-bit BluFi clients are not compatible and must be upgraded |
|
||||
| `espressif/bmi270_sensor` | [`0.1.2`](https://components.espressif.com/components/espressif/bmi270_sensor/versions/0.1.2/readme?language=en) | ✅ Upstream support | Provides IDF 6.0 prebuilt libraries for ESP32-C5 and ESP32-S3; validated by a full `esp-spot-c5` build |
|
||||
| `touch_slider_sensor` / `touch_button_sensor` | Disabled for IDF 6 | 🟡 Feature gap | Their manifests require IDF < 6.0, so ESP Vocat omits its PCB capacitive slider/button path on IDF 6. CST816 display touch is unaffected |
|
||||
| ESP32-P4 Rev < 3 / `espressif/esp-sr` | `~2.4.7` | ✅ Upstream support | The 14 unsuffixed Rev1 variants are available on IDF 5.5 and IDF 6; `-p4x` continues to select Rev >= 3 |
|
||||
| ESP32-P4 Rev < 3 / `espressif/esp-sr` | `~2.4.7` | ✅ Upstream support | The 14 Rev1 variants are available on IDF 5.5 and IDF 6; P4X-specific names continue to select Rev >= 3 |
|
||||
|
||||
## Per-Board Progress
|
||||
|
||||
In the table below, "Board" is the source directory and "Build variant" is the firmware name used by the release script. Different chip revisions of the same board may have different status, so they are split into separate rows when necessary.
|
||||
In the table below, "Board" is the source directory and "Build variant" is the firmware name used by the build script. Different chip revisions of the same board may have different status, so they are split into separate rows when necessary.
|
||||
|
||||
| Chip | Board | Build variant | IDF 6.0 status | Current validation | Blocker/next step |
|
||||
|---|---|---|---|---|---|
|
||||
@@ -108,20 +108,20 @@ In the table below, "Board" is the source directory and "Build variant" is the f
|
||||
| `esp32` | `bread-compact-esp32` | `bread-compact-esp32` | ✅ Full build passed | IDF 6.0.1 `idf.py build` | Hardware smoke/peripheral regression pending |
|
||||
| `esp32` | `bread-compact-esp32` | `bread-compact-esp32-128x32` | ✅ Full build passed | GitHub Actions IDF 6.0.1 full build | Hardware smoke/peripheral regression pending |
|
||||
| `esp32` | `bread-compact-esp32-lcd` | `bread-compact-esp32-lcd` | ✅ Full build passed | GitHub Actions IDF 6.0.1 full build | Hardware smoke/peripheral regression pending |
|
||||
| `esp32` | `esp32-cgc` | `esp32-cgc` | ✅ Full build passed | GitHub Actions IDF 6.0.1 full build | Hardware smoke/peripheral regression pending |
|
||||
| `esp32` | `esp32-cgc-144` | `esp32-cgc-144` | ✅ Full build passed | GitHub Actions IDF 6.0.1 full build | Hardware smoke/peripheral regression pending |
|
||||
| `esp32` | `wdmomo/esp32-cgc` | `wdmomo-esp32-cgc` | ✅ Full build passed | GitHub Actions IDF 6.0.1 full build | Hardware smoke/peripheral regression pending |
|
||||
| `esp32` | `wdmomo/esp32-cgc-144` | `wdmomo-esp32-cgc-144` | ✅ Full build passed | GitHub Actions IDF 6.0.1 full build | Hardware smoke/peripheral regression pending |
|
||||
| `esp32` | `waveshare/esp32-touch-lcd-3.5` | `waveshare-esp32-touch-lcd-3.5` | ✅ Full build passed | GitHub Actions IDF 6.0.1 full build | Hardware smoke/peripheral regression pending |
|
||||
| `esp32c3` | `esp-hi` | `esp-hi` | ✅ Full build passed | IDF 6.0.1 `idf.py build`; `servo_dog_ctrl 0.2.0` | Hardware smoke, servo, and audio peripheral regression pending |
|
||||
| `esp32c3` | `kevin-c3` | `kevin-c3` | ✅ Full build passed | GitHub Actions IDF 6.0.1 full build | Hardware smoke/peripheral regression pending |
|
||||
| `esp32c3` | `lichuang-c3-dev` | `lichuang-c3-dev` | ✅ Full build passed | GitHub Actions IDF 6.0.1 full build | Hardware smoke/peripheral regression pending |
|
||||
| `esp32c3` | `espressif/esp-hi` | `espressif-esp-hi` | ✅ Full build passed | IDF 6.0.1 `idf.py build`; `servo_dog_ctrl 0.2.0` | Hardware smoke, servo, and audio peripheral regression pending |
|
||||
| `esp32c3` | `kevin/c3` | `kevin-c3` | ✅ Full build passed | GitHub Actions IDF 6.0.1 full build | Hardware smoke/peripheral regression pending |
|
||||
| `esp32c3` | `lckfb/szpi-esp32c3` | `lckfb-lichuang-c3-dev` | ✅ Full build passed | GitHub Actions IDF 6.0.1 full build | Hardware smoke/peripheral regression pending |
|
||||
| `esp32c3` | `magiclick-c3` | `magiclick-c3` | ✅ Full build passed | GitHub Actions IDF 6.0.1 full build | Hardware smoke/peripheral regression pending |
|
||||
| `esp32c3` | `magiclick-c3-v2` | `magiclick-c3-v2` | ✅ Full build passed | GitHub Actions IDF 6.0.1 full build | Hardware smoke/peripheral regression pending |
|
||||
| `esp32c3` | `surfer-c3-1.14tft` | `surfer-c3-1.14tft` | ✅ Full build passed | GitHub Actions IDF 6.0.1 full build | Hardware smoke/peripheral regression pending |
|
||||
| `esp32c3` | `xmini-c3` | `xmini-c3` | ✅ Full build passed | IDF 6.0.1 `idf.py build` | Hardware smoke/peripheral regression pending |
|
||||
| `esp32c3` | `xmini-c3-4g` | `xmini-c3-4g` | ✅ Full build passed | GitHub Actions IDF 6.0.1 full build | Hardware smoke/peripheral regression pending |
|
||||
| `esp32c3` | `xmini-c3-v3` | `xmini-c3-v3` | ✅ Full build passed | GitHub Actions IDF 6.0.1 full build | Hardware smoke/peripheral regression pending |
|
||||
| `esp32c5` | `esp-sensairshuttle` | `esp-sensairshuttle` | ✅ Full build passed | GitHub Actions IDF 6.0.1 full build | Hardware smoke/peripheral regression pending |
|
||||
| `esp32c5` | `esp-spot` | `esp-spot-c5` | ✅ Full build passed | IDF 6.0.1 `idf.py build`; `bmi270_sensor 0.1.2` | Hardware smoke, BMI270, audio, and power-management regression pending |
|
||||
| `esp32c5` | `espressif/esp-sensairshuttle` | `espressif-esp-sensairshuttle` | ✅ Full build passed | GitHub Actions IDF 6.0.1 full build | Hardware smoke/peripheral regression pending |
|
||||
| `esp32c5` | `espressif/esp-spot` | `espressif-esp-spot-c5` | ✅ Full build passed | IDF 6.0.1 `idf.py build`; `bmi270_sensor 0.1.2` | Hardware smoke, BMI270, audio, and power-management regression pending |
|
||||
| `esp32c5` | `movecall-moji2-esp32c5` | `movecall-moji2-esp32c5` | ✅ Full build passed | GitHub Actions IDF 6.0.1 full build | Hardware smoke/peripheral regression pending |
|
||||
| `esp32c5` | `waveshare/esp32-c5-touch-lcd-1.69` | `waveshare-esp32-c5-touch-lcd-1.69` | ✅ Full build passed | IDF 6.0.1 `idf.py build` | Hardware smoke/peripheral regression pending |
|
||||
| `esp32c6` | `waveshare/esp32-c6-lcd-0.85` | `waveshare-esp32-c6-lcd-0.85` | ✅ Full build passed | IDF 6.0.1 `idf.py build` | Hardware smoke/peripheral regression pending |
|
||||
@@ -133,13 +133,13 @@ In the table below, "Board" is the source directory and "Build variant" is the f
|
||||
| `esp32c6` | `waveshare/esp32-c6-touch-amoled-2.16` | `waveshare-esp32-c6-touch-amoled-2.16` | ✅ Full build passed | GitHub Actions IDF 6.0.1 full build | Hardware smoke/peripheral regression pending |
|
||||
| `esp32c6` | `waveshare/esp32-c6-touch-lcd-1.54` | `waveshare-esp32-c6-touch-lcd-1.54` | ✅ Full build passed | GitHub Actions IDF 6.0.1 full build | Hardware smoke/peripheral regression pending |
|
||||
| `esp32c6` | `waveshare/esp32-c6-touch-lcd-1.83` | `waveshare-esp32-c6-touch-lcd-1.83` | ✅ Full build passed | GitHub Actions IDF 6.0.1 full build | Hardware smoke/peripheral regression pending |
|
||||
| `esp32s3` | `aipi-lite` | `aipi-lite` | ✅ Full build passed | GitHub Actions IDF 6.0.1 full build | Hardware smoke/peripheral regression pending |
|
||||
| `esp32s3` | `atk-dnesp32s3` | `atk-dnesp32s3` | ✅ Full build passed | GitHub Actions IDF 6.0.1 full build | Hardware smoke/peripheral regression pending |
|
||||
| `esp32s3` | `atk-dnesp32s3-box` | `atk-dnesp32s3-box` | ✅ Full build passed | GitHub Actions IDF 6.0.1 full build | Hardware smoke/peripheral regression pending |
|
||||
| `esp32s3` | `atk-dnesp32s3-box0` | `atk-dnesp32s3-box0` | ✅ Full build passed | GitHub Actions IDF 6.0.1 full build | Hardware smoke/peripheral regression pending |
|
||||
| `esp32s3` | `atk-dnesp32s3-box2-4g` | `atk-dnesp32s3-box2-4g` | ✅ Build and hardware validated | GitHub Actions IDF 6.0.1 full build; maintainer hardware validation | Complete for the IDF 6 migration scope |
|
||||
| `esp32s3` | `atk-dnesp32s3-box2-wifi` | `atk-dnesp32s3-box2-wifi` | ✅ Build and hardware validated | GitHub Actions IDF 6.0.1 full build; maintainer hardware validation | Complete for the IDF 6 migration scope |
|
||||
| `esp32s3` | `atk-dnesp32s3-box3` | `atk-dnesp32s3-box3` | ✅ Full build passed | GitHub Actions IDF 6.0.1 full build | Hardware smoke/peripheral regression pending |
|
||||
| `esp32s3` | `xorigin/aipi-lite` | `xorigin-aipi-lite` | ✅ Full build passed | GitHub Actions IDF 6.0.1 full build | Hardware smoke/peripheral regression pending |
|
||||
| `esp32s3` | `alientek/atk-dnesp32s3` | `alientek-atk-dnesp32s3` | ✅ Full build passed | GitHub Actions IDF 6.0.1 full build | Hardware smoke/peripheral regression pending |
|
||||
| `esp32s3` | `alientek/atk-dnesp32s3-box` | `alientek-atk-dnesp32s3-box` | ✅ Full build passed | GitHub Actions IDF 6.0.1 full build | Hardware smoke/peripheral regression pending |
|
||||
| `esp32s3` | `alientek/atk-dnesp32s3-box0` | `alientek-atk-dnesp32s3-box0` | ✅ Full build passed | GitHub Actions IDF 6.0.1 full build | Hardware smoke/peripheral regression pending |
|
||||
| `esp32s3` | `alientek/atk-dnesp32s3-box2-4g` | `alientek-atk-dnesp32s3-box2-4g` | ✅ Build and hardware validated | GitHub Actions IDF 6.0.1 full build; maintainer hardware validation | Complete for the IDF 6 migration scope |
|
||||
| `esp32s3` | `alientek/atk-dnesp32s3-box2-wifi` | `alientek-atk-dnesp32s3-box2-wifi` | ✅ Build and hardware validated | GitHub Actions IDF 6.0.1 full build; maintainer hardware validation | Complete for the IDF 6 migration scope |
|
||||
| `esp32s3` | `alientek/atk-dnesp32s3-box3` | `alientek-atk-dnesp32s3-box3` | ✅ Full build passed | GitHub Actions IDF 6.0.1 full build | Hardware smoke/peripheral regression pending |
|
||||
| `esp32s3` | `atom-echos3r` | `atom-echos3r` | ✅ Full build passed | GitHub Actions IDF 6.0.1 full build | Hardware smoke/peripheral regression pending |
|
||||
| `esp32s3` | `atoms3-echo-base` | `atoms3-echo-base` | ✅ Full build passed | GitHub Actions IDF 6.0.1 full build | Hardware smoke/peripheral regression pending |
|
||||
| `esp32s3` | `atoms3r-cam-m12-echo-base` | `atoms3r-cam-m12-echo-base` | ✅ Full build passed | GitHub Actions IDF 6.0.1 full build | Hardware smoke/peripheral regression pending |
|
||||
@@ -153,29 +153,29 @@ In the table below, "Board" is the source directory and "Build variant" is the f
|
||||
| `esp32s3` | `doit-s3-aibox` | `doit-s3-aibox` | ✅ Full build passed | IDF 6.0.1 `idf.py build` | Hardware smoke/peripheral regression pending |
|
||||
| `esp32s3` | `du-chatx` | `du-chatx` | ✅ Full build passed | GitHub Actions IDF 6.0.1 full build | Hardware smoke/peripheral regression pending |
|
||||
| `esp32s3` | `electron-bot` | `electron-bot` | ✅ Full build passed | GitHub Actions IDF 6.0.1 full build | Hardware smoke/peripheral regression pending |
|
||||
| `esp32s3` | `esp-box` | `esp-box` | ✅ Full build passed | GitHub Actions IDF 6.0.1 full build | Hardware smoke/peripheral regression pending |
|
||||
| `esp32s3` | `esp-box-3` | `esp-box-3` | ✅ Full build passed | GitHub Actions IDF 6.0.1 full build | Hardware smoke/peripheral regression pending |
|
||||
| `esp32s3` | `esp-box-lite` | `esp-box-lite` | ✅ Full build passed | GitHub Actions IDF 6.0.1 full build | Hardware smoke/peripheral regression pending |
|
||||
| `esp32s3` | `esp-s3-lcd-ev-board` | `esp-s3-lcd-ev-board-1p4`<br>`esp-s3-lcd-ev-board-1p5` | ✅ Full build passed | GitHub Actions IDF 6.0.1 full build | Hardware smoke/peripheral regression pending |
|
||||
| `esp32s3` | `esp-s3-lcd-ev-board-2` | `esp-s3-lcd-ev-board-2` | ✅ Full build passed | GitHub Actions IDF 6.0.1 full build | Hardware smoke/peripheral regression pending |
|
||||
| `esp32s3` | `esp-sparkbot` | `esp-sparkbot` | ✅ Full build passed | GitHub Actions IDF 6.0.1 full build | Hardware smoke/peripheral regression pending |
|
||||
| `esp32s3` | `esp-vocat` | `esp-vocat` | 🟡 Full build passed; feature-degraded | Local ESP-IDF 6.0.1 full build after rebasing onto `origin/main` | PCB capacitive slider/button disabled on IDF 6; CST816 display touch remains enabled; hardware regression pending |
|
||||
| `esp32s3` | `esp32s3-korvo2-v3` | `esp32s3-korvo2-v3` | ✅ Full build passed | GitHub Actions IDF 6.0.1 full build | Hardware smoke/peripheral regression pending |
|
||||
| `esp32s3` | `esp32s3-korvo2-v3-rndis` | `esp32s3-korvo2-v3-rndis` | ✅ Full build passed | GitHub Actions IDF 6.0.1 full build | Hardware smoke/peripheral regression pending |
|
||||
| `esp32s3` | `espressif/esp32-s3-box` | `espressif-esp-box` | ✅ Full build passed | GitHub Actions IDF 6.0.1 full build | Hardware smoke/peripheral regression pending |
|
||||
| `esp32s3` | `espressif/esp32-s3-box-3` | `espressif-esp-box-3` | ✅ Full build passed | GitHub Actions IDF 6.0.1 full build | Hardware smoke/peripheral regression pending |
|
||||
| `esp32s3` | `espressif/esp32-s3-box-lite` | `espressif-esp-box-lite` | ✅ Full build passed | GitHub Actions IDF 6.0.1 full build | Hardware smoke/peripheral regression pending |
|
||||
| `esp32s3` | `espressif/esp32-s3-lcd-ev-board` | `espressif-esp-s3-lcd-ev-board-1p4`<br>`espressif-esp-s3-lcd-ev-board-1p5` | ✅ Full build passed | GitHub Actions IDF 6.0.1 full build | Hardware smoke/peripheral regression pending |
|
||||
| `esp32s3` | `espressif/esp32-s3-lcd-ev-board-2` | `espressif-esp32-s3-lcd-ev-board-2` | ✅ Full build passed | GitHub Actions IDF 6.0.1 full build | Hardware smoke/peripheral regression pending |
|
||||
| `esp32s3` | `espressif/esp-sparkbot` | `espressif-esp-sparkbot` | ✅ Full build passed | GitHub Actions IDF 6.0.1 full build | Hardware smoke/peripheral regression pending |
|
||||
| `esp32s3` | `espressif/esp-vocat` | `espressif-esp-vocat` | 🟡 Full build passed; feature-degraded | Local ESP-IDF 6.0.1 full build after rebasing onto `origin/main` | PCB capacitive slider/button disabled on IDF 6; CST816 display touch remains enabled; hardware regression pending |
|
||||
| `esp32s3` | `espressif/esp32-s3-korvo-2-v3.0` | `espressif-esp32s3-korvo2-v3` | ✅ Full build passed | GitHub Actions IDF 6.0.1 full build | Hardware smoke/peripheral regression pending |
|
||||
| `esp32s3` | `espressif/esp32-s3-korvo-2-v3.0-rndis` | `espressif-esp32s3-korvo2-v3-rndis` | ✅ Full build passed | GitHub Actions IDF 6.0.1 full build | Hardware smoke/peripheral regression pending |
|
||||
| `esp32s3` | `freenove-esp32s3-display-2.8-lcd` | `freenove-esp32s3-display-2.8-lcd` | ✅ Full build passed | GitHub Actions IDF 6.0.1 full build | Hardware smoke/peripheral regression pending |
|
||||
| `esp32s3` | `genjutech-s3-1.54tft` | `genjutech-s3-1.54tft` | ✅ Full build passed | GitHub Actions IDF 6.0.1 full build | Hardware smoke/peripheral regression pending |
|
||||
| `esp32s3` | `hu-087` | `hu-087` | ✅ Full build passed | GitHub Actions IDF 6.0.1 full build | Hardware smoke/peripheral regression pending |
|
||||
| `esp32s3` | `jiuchuan-s3` | `jiuchuan-s3` | ✅ Full build passed | GitHub Actions IDF 6.0.1 full build | Hardware smoke/peripheral regression pending |
|
||||
| `esp32s3` | `kevin-box-2` | `kevin-box-2` | ✅ Full build passed | GitHub Actions IDF 6.0.1 full build | Hardware smoke/peripheral regression pending |
|
||||
| `esp32s3` | `kevin-sp-v4-dev` | `kevin-sp-v4-dev` | ✅ Full build passed | GitHub Actions IDF 6.0.1 full build | Hardware smoke/peripheral regression pending |
|
||||
| `esp32s3` | `kevin-yuying-313lcd` | `kevin-yuying-313lcd` | ✅ Full build passed | GitHub Actions IDF 6.0.1 full build | Hardware smoke/peripheral regression pending |
|
||||
| `esp32s3` | `labplus-ledong-v2` | `labplus-ledong-v2` | ✅ Full build passed | GitHub Actions IDF 6.0.1 full build | Hardware smoke/peripheral regression pending |
|
||||
| `esp32s3` | `labplus-mpython-v3` | `labplus-mpython-v3` | ✅ Full build passed | GitHub Actions IDF 6.0.1 full build | Hardware smoke/peripheral regression pending |
|
||||
| `esp32s3` | `kevin/box-2` | `kevin-box-2` | ✅ Full build passed | GitHub Actions IDF 6.0.1 full build | Hardware smoke/peripheral regression pending |
|
||||
| `esp32s3` | `kevin/sp-v4-dev` | `kevin-sp-v4-dev` | ✅ Full build passed | GitHub Actions IDF 6.0.1 full build | Hardware smoke/peripheral regression pending |
|
||||
| `esp32s3` | `kevin/yuying-313lcd` | `kevin-yuying-313lcd` | ✅ Full build passed | GitHub Actions IDF 6.0.1 full build | Hardware smoke/peripheral regression pending |
|
||||
| `esp32s3` | `labplus/ledong-v2` | `labplus-ledong-v2` | ✅ Full build passed | GitHub Actions IDF 6.0.1 full build | Hardware smoke/peripheral regression pending |
|
||||
| `esp32s3` | `labplus/mpython-v3` | `labplus-mpython-v3` | ✅ Full build passed | GitHub Actions IDF 6.0.1 full build | Hardware smoke/peripheral regression pending |
|
||||
| `esp32s3` | `lceda-course-examples/eda-robot-pro` | `lceda-course-examples-eda-robot-pro` | ✅ Full build passed | GitHub Actions IDF 6.0.1 full build | Hardware smoke/peripheral regression pending |
|
||||
| `esp32s3` | `lceda-course-examples/eda-super-bear` | `lceda-course-examples-eda-super-bear` | ✅ Full build passed | GitHub Actions IDF 6.0.1 full build | Hardware smoke/peripheral regression pending |
|
||||
| `esp32s3` | `lceda-course-examples/eda-tv-pro` | `lceda-course-examples-eda-tv-pro` | ✅ Full build passed | GitHub Actions IDF 6.0.1 full build | Hardware smoke/peripheral regression pending |
|
||||
| `esp32s3` | `lichuang-dev` | `lichuang-dev` | ✅ Full build passed | GitHub Actions IDF 6.0.1 full build | Hardware smoke/peripheral regression pending |
|
||||
| `esp32s3` | `lilygo-t-cameraplus-s3` | `lilygo-t-cameraplus-s3`<br>`lilygo-t-cameraplus-s3_v1_2` | ✅ Full build passed | GitHub Actions IDF 6.0.1 full build | Hardware smoke/peripheral regression pending |
|
||||
| `esp32s3` | `lckfb/szpi-esp32s3` | `lckfb-lichuang-dev` | ✅ Full build passed | GitHub Actions IDF 6.0.1 full build | Hardware smoke/peripheral regression pending |
|
||||
| `esp32s3` | `lilygo-t-cameraplus-s3` | `lilygo-t-cameraplus-s3`<br>`lilygo-t-cameraplus-s3-v1.2` | ✅ Full build passed | GitHub Actions IDF 6.0.1 full build | Hardware smoke/peripheral regression pending |
|
||||
| `esp32s3` | `lilygo-t-circle-s3` | `lilygo-t-circle-s3` | ✅ Full build passed | GitHub Actions IDF 6.0.1 full build | Hardware smoke/peripheral regression pending |
|
||||
| `esp32s3` | `lilygo-t-display-s3-pro-mvsrlora` | `lilygo-t-display-s3-pro-mvsrlora` | ✅ Full build passed | GitHub Actions IDF 6.0.1 full build | Hardware smoke/peripheral regression pending |
|
||||
| `esp32s3` | `m5stack-cardputer-adv` | `m5stack-cardputer-adv` | ✅ Full build passed | GitHub Actions IDF 6.0.1 full build | Hardware smoke/peripheral regression pending |
|
||||
@@ -196,7 +196,6 @@ In the table below, "Board" is the source directory and "Build variant" is the f
|
||||
| `esp32s3` | `sp-esp32-s3-1.28-box` | `sp-esp32-s3-1.28-box` | ✅ Full build passed | GitHub Actions IDF 6.0.1 full build | Hardware smoke/peripheral regression pending |
|
||||
| `esp32s3` | `sp-esp32-s3-1.54-muma` | `sp-esp32-s3-1.54-muma` | ✅ Full build passed | GitHub Actions IDF 6.0.1 full build | Hardware smoke/peripheral regression pending |
|
||||
| `esp32s3` | `taiji-pi-s3` | `taiji-pi-s3`<br>`taiji-pi-s3-pdm` | ✅ Full build passed | GitHub Actions IDF 6.0.1 full build | Hardware smoke/peripheral regression pending |
|
||||
| `esp32s3` | `tudouzi` | `tudouzi` | ✅ Full build passed | GitHub Actions IDF 6.0.1 full build | Hardware smoke/peripheral regression pending |
|
||||
| `esp32s3` | `waveshare/esp32-s3-audio-board` | `waveshare-esp32-s3-audio-board` | ✅ Full build passed | GitHub Actions IDF 6.0.1 full build | Hardware smoke/peripheral regression pending |
|
||||
| `esp32s3` | `waveshare/esp32-s3-cam` | `waveshare-esp32-s3-cam-2`<br>`waveshare-esp32-s3-cam-2.8`<br>`waveshare-esp32-s3-cam-3.5`<br>`waveshare-esp32-s3-cam-1.83` | ✅ Full build passed | GitHub Actions IDF 6.0.1 full build | Hardware smoke/peripheral regression pending |
|
||||
| `esp32s3` | `waveshare/esp32-s3-epaper-1.54` | `waveshare-esp32-s3-epaper-1.54-v2`<br>`waveshare-esp32-s3-epaper-1.54-v1` | ✅ Full build passed | GitHub Actions IDF 6.0.1 full build | Hardware smoke/peripheral regression pending |
|
||||
@@ -236,16 +235,14 @@ In the table below, "Board" is the source directory and "Build variant" is the f
|
||||
| `esp32s3` | `zhengchen-1.54tft-wifi` | `zhengchen-1.54tft-wifi` | ✅ Full build passed | GitHub Actions IDF 6.0.1 full build | Hardware smoke/peripheral regression pending |
|
||||
| `esp32s3` | `zhengchen-cam` | `zhengchen-cam` | ✅ Full build passed | GitHub Actions IDF 6.0.1 full build | Hardware smoke/peripheral regression pending |
|
||||
| `esp32s3` | `zhengchen-cam-ml307` | `zhengchen-cam-ml307` | ✅ Full build passed | GitHub Actions IDF 6.0.1 full build | Hardware smoke/peripheral regression pending |
|
||||
| `esp32p4` | `esp-p4-function-ev-board` | `esp-p4-function-ev-board`<br>`esp-p4-function-ev-board-p4x` | ✅ Full builds passed | IDF 6.0.1 canonical release builds with ESP-SR 2.4.7 for Rev1 and Rev3 | Hardware smoke/peripheral regression pending |
|
||||
| `esp32p4` | `espressif/esp32-p4-function-ev-board` | `espressif-esp32-p4-function-ev-board`<br>`espressif-esp32-p4x-function-ev-board` | ✅ Full builds passed | IDF 6.0.1 canonical release builds with ESP-SR 2.4.7 for Rev1 and Rev3 | Hardware smoke/peripheral regression pending |
|
||||
| `esp32p4` | `m5stack-tab5` | `m5stack-tab5-p4x` | ✅ Full build passed | GitHub Actions IDF 6.0.1 full build | Hardware smoke/peripheral regression pending |
|
||||
| `esp32p4` | `waveshare/esp32-p4-nano` | `waveshare-esp32-p4-nano-10.1-a-p4x` | ✅ Full build passed | GitHub Actions IDF 6.0.1 full build | Hardware smoke/peripheral regression pending |
|
||||
| `esp32p4` | `waveshare/esp32-p4-wifi6-touch-lcd` | `waveshare-esp32-p4-wifi6-touch-lcd-4b-p4x`<br>`waveshare-esp32-p4-wifi6-touch-lcd-4.3-p4x`<br>`waveshare-esp32-p4-wifi6-touch-lcd-5-p4x`<br>`waveshare-esp32-p4-wifi6-touch-lcd-7b-p4x`<br>`waveshare-esp32-p4-wifi6-touch-lcd-3.4c-p4x`<br>`waveshare-esp32-p4-wifi6-touch-lcd-4c-p4x`<br>`waveshare-esp32-p4-wifi6-touch-lcd-7-p4x`<br>`waveshare-esp32-p4-wifi6-touch-lcd-8-p4x`<br>`waveshare-esp32-p4-wifi6-touch-lcd-10.1-p4x` | ✅ Full build passed | GitHub Actions IDF 6.0.1 full build | Hardware smoke/peripheral regression pending |
|
||||
| `esp32p4` | `waveshare/esp32-p4-wifi6-touch-lcd-3.5` | `waveshare-esp32-p4-wifi6-touch-lcd-3.5-p4x` | ✅ Full build passed | GitHub Actions IDF 6.0.1 full build | Hardware smoke/peripheral regression pending |
|
||||
| `esp32p4` | `wireless-tag-wtp4c5mp07s` | `wireless-tag-wtp4c5mp07s-p4x` | ✅ Full build passed | GitHub Actions IDF 6.0.1 full build | Hardware smoke/peripheral regression pending |
|
||||
|
||||
| `esp32p4` | `waveshare/esp32-p4-nano` | `waveshare-esp32-p4x-nano-10.1-a` | ✅ Full build passed | GitHub Actions IDF 6.0.1 full build | Hardware smoke/peripheral regression pending |
|
||||
| `esp32p4` | `waveshare/esp32-p4-wifi6-touch-lcd` | `waveshare-esp32-p4x-wifi6-touch-lcd-4b`<br>`waveshare-esp32-p4x-wifi6-touch-lcd-4.3`<br>`waveshare-esp32-p4x-wifi6-touch-lcd-5`<br>`waveshare-esp32-p4x-wifi6-touch-lcd-7b`<br>`waveshare-esp32-p4x-wifi6-touch-lcd-3.4c`<br>`waveshare-esp32-p4x-wifi6-touch-lcd-4c`<br>`waveshare-esp32-p4x-wifi6-touch-lcd-7`<br>`waveshare-esp32-p4x-wifi6-touch-lcd-8`<br>`waveshare-esp32-p4x-wifi6-touch-lcd-10.1` | ✅ Full build passed | GitHub Actions IDF 6.0.1 full build | Hardware smoke/peripheral regression pending |
|
||||
| `esp32p4` | `waveshare/esp32-p4-wifi6-touch-lcd-3.5` | `waveshare-esp32-p4x-wifi6-touch-lcd-3.5` | ✅ Full build passed | GitHub Actions IDF 6.0.1 full build | Hardware smoke/peripheral regression pending |
|
||||
## Next Steps and Acceptance Criteria
|
||||
|
||||
1. Run the new IDF 5.5 compatibility and IDF 6 BluFi CI jobs, then hardware-test at least one P4 v1.3 device on the legacy SDK path. When IDF 6-compatible releases of `touch_slider_sensor` and `touch_button_sensor` become available, re-enable and hardware-test the ESP Vocat PCB capacitive slider/button path.
|
||||
1. Run the IDF 6 BluFi CI job, then hardware-test at least one P4 v1.3 device on the legacy SDK path. When IDF 6-compatible releases of `touch_slider_sensor` and `touch_button_sensor` become available, re-enable and hardware-test the ESP Vocat PCB capacitive slider/button path.
|
||||
2. For every green variant, complete a minimal hardware smoke test covering boot, networking, audio input/output, display/touch when present, camera when present, and 4G/Ethernet when present.
|
||||
3. Perform a physical negative test for the `xmini-c3`/`xmini-c3-v3` firmware guard. CI proves that both images compile; it does not prove that a wrong image is safely rejected. Acceptance requires flashing each wrong image to a sacrificial or recoverable board and verifying that startup stops before any board-specific power or peripheral initialization can cause damage.
|
||||
4. Keep third-party experiments under the ignored `components/` directory out of the migration branch. The reproducible baseline must use the published `78/esp_lcd_nv3023 1.0.1` and `wvirgil123/sscma_client 1.0.3` packages. `espfriends/servo_dog_ctrl 0.2.0` is an upstream registry dependency and needs no local override.
|
||||
@@ -254,7 +251,7 @@ In the table below, "Board" is the source directory and "Build variant" is the f
|
||||
|
||||
```bash
|
||||
source ~/.espressif/v6.0.1/esp-idf/export.sh
|
||||
python scripts/release.py <board> --name <variant>
|
||||
python scripts/build.py <board> --name <variant>
|
||||
```
|
||||
|
||||
This document is a migration-status snapshot. Build compatibility and hardware compatibility are tracked separately. Add "hardware validated" to a board only after validation on physical hardware is complete.
|
||||
|
||||
+226
-255
File diff suppressed because it is too large
Load Diff
+391
-389
@@ -118,25 +118,41 @@ choice
|
||||
endchoice
|
||||
|
||||
choice BOARD_TYPE
|
||||
prompt "Board Type"
|
||||
default BOARD_TYPE_BREAD_COMPACT_WIFI
|
||||
prompt "Target Board"
|
||||
default BOARD_TYPE_BREAD_COMPACT_ESP32 if IDF_TARGET_ESP32
|
||||
default BOARD_TYPE_XMINI_C3_V3 if IDF_TARGET_ESP32C3
|
||||
default BOARD_TYPE_ESP_SENSAIRSHUTTLE if IDF_TARGET_ESP32C5
|
||||
default BOARD_TYPE_WAVESHARE_ESP32_C6_TOUCH_AMOLED_2_06 if IDF_TARGET_ESP32C6
|
||||
default BOARD_TYPE_BREAD_COMPACT_WIFI if IDF_TARGET_ESP32S3
|
||||
default BOARD_TYPE_ESP32_P4_FUNCTION_EV_BOARD if IDF_TARGET_ESP32P4
|
||||
default BOARD_TYPE_ESP32_S31_FUNCTION_COREBOARD_1 if IDF_TARGET_ESP32S31
|
||||
help
|
||||
Board type. 开发板类型
|
||||
Select the physical board hardware implementation.
|
||||
The OTA board type and firmware variant name are configured separately.
|
||||
|
||||
config BOARD_TYPE_BREAD_COMPACT_WIFI
|
||||
bool "Bread Compact WiFi (面包板)"
|
||||
config BOARD_TYPE_ATK_DNESP32S3
|
||||
bool "Alientek ATK-DNESP32S3 Development Board (正点原子)"
|
||||
depends on IDF_TARGET_ESP32S3
|
||||
config BOARD_TYPE_BREAD_COMPACT_WIFI_LCD
|
||||
bool "Bread Compact WiFi + LCD (面包板)"
|
||||
config BOARD_TYPE_ATK_DNESP32S3_BOX
|
||||
bool "Alientek ATK-DNESP32S3-BOX (正点原子)"
|
||||
depends on IDF_TARGET_ESP32S3
|
||||
config BOARD_TYPE_BREAD_COMPACT_WIFI_CAM
|
||||
bool "Bread Compact WiFi + LCD + Camera (面包板)"
|
||||
config BOARD_TYPE_ATK_DNESP32S3_BOX0
|
||||
bool "Alientek ATK-DNESP32S3-BOX0 (正点原子)"
|
||||
depends on IDF_TARGET_ESP32S3
|
||||
config BOARD_TYPE_BREAD_COMPACT_ML307
|
||||
bool "Bread Compact ML307/EC801E (面包板 4G)"
|
||||
config BOARD_TYPE_ATK_DNESP32S3_BOX2_4G
|
||||
bool "Alientek ATK-DNESP32S3-BOX2 4G (正点原子)"
|
||||
depends on IDF_TARGET_ESP32S3
|
||||
config BOARD_TYPE_BREAD_COMPACT_NT26
|
||||
bool "Bread Compact NT26 (面包板 4G)"
|
||||
config BOARD_TYPE_ATK_DNESP32S3_BOX2_WIFI
|
||||
bool "Alientek ATK-DNESP32S3-BOX2 Wi-Fi (正点原子)"
|
||||
depends on IDF_TARGET_ESP32S3
|
||||
config BOARD_TYPE_ATK_DNESP32S3_BOX3
|
||||
bool "Alientek ATK-DNESP32S3-BOX3 (正点原子)"
|
||||
depends on IDF_TARGET_ESP32S3
|
||||
config BOARD_TYPE_ATK_DNESP32S3M_4G
|
||||
bool "Alientek ATK-DNESP32S3M 4G (正点原子)"
|
||||
depends on IDF_TARGET_ESP32S3
|
||||
config BOARD_TYPE_ATK_DNESP32S3M_WIFI
|
||||
bool "Alientek ATK-DNESP32S3M Wi-Fi (正点原子)"
|
||||
depends on IDF_TARGET_ESP32S3
|
||||
config BOARD_TYPE_BREAD_COMPACT_ESP32
|
||||
bool "Bread Compact ESP32 DevKit (面包板)"
|
||||
@@ -144,50 +160,92 @@ choice BOARD_TYPE
|
||||
config BOARD_TYPE_BREAD_COMPACT_ESP32_LCD
|
||||
bool "Bread Compact ESP32 DevKit + LCD (面包板)"
|
||||
depends on IDF_TARGET_ESP32
|
||||
config BOARD_TYPE_XMINI_C3_V3
|
||||
bool "Xmini C3 V3"
|
||||
depends on IDF_TARGET_ESP32C3
|
||||
config BOARD_TYPE_XMINI_C3_4G
|
||||
bool "Xmini C3 4G"
|
||||
depends on IDF_TARGET_ESP32C3
|
||||
config BOARD_TYPE_XMINI_C3
|
||||
bool "Xmini C3"
|
||||
depends on IDF_TARGET_ESP32C3
|
||||
config BOARD_TYPE_ESP_KORVO2_V3
|
||||
bool "Espressif Korvo2 V3"
|
||||
config BOARD_TYPE_BREAD_COMPACT_ML307
|
||||
bool "Bread Compact ML307/EC801E 4G (面包板)"
|
||||
depends on IDF_TARGET_ESP32S3
|
||||
config BOARD_TYPE_ESP_KORVO2_V3_RNDIS
|
||||
bool "Espressif Korvo2 V3 RNDIS"
|
||||
config BOARD_TYPE_BREAD_COMPACT_NT26
|
||||
bool "Bread Compact NT26 4G (面包板)"
|
||||
depends on IDF_TARGET_ESP32S3
|
||||
config BOARD_TYPE_BREAD_COMPACT_WIFI
|
||||
bool "Bread Compact Wi-Fi (面包板)"
|
||||
depends on IDF_TARGET_ESP32S3
|
||||
config BOARD_TYPE_BREAD_COMPACT_WIFI_LCD
|
||||
bool "Bread Compact Wi-Fi + LCD (面包板)"
|
||||
depends on IDF_TARGET_ESP32S3
|
||||
config BOARD_TYPE_BREAD_COMPACT_WIFI_CAM
|
||||
bool "Bread Compact Wi-Fi + LCD + Camera (面包板)"
|
||||
depends on IDF_TARGET_ESP32S3
|
||||
config BOARD_TYPE_DF_S3_AI_CAM
|
||||
bool "DFRobot ESP32-S3 AI Camera Module"
|
||||
depends on IDF_TARGET_ESP32S3
|
||||
config BOARD_TYPE_DF_K10
|
||||
bool "DFRobot UNIHIKER K10 (行空板 K10)"
|
||||
depends on IDF_TARGET_ESP32S3
|
||||
config BOARD_TYPE_DOIT_S3_AIBOX
|
||||
bool "DOIT S3 AIBox (四博智联 AI 陪伴盒子)"
|
||||
depends on IDF_TARGET_ESP32S3
|
||||
config BOARD_TYPE_DU_CHATX
|
||||
bool "Du ChatX Wi-Fi (嘟嘟开发板)"
|
||||
depends on IDF_TARGET_ESP32S3
|
||||
config BOARD_TYPE_ELECTRON_BOT
|
||||
bool "ElectronBot"
|
||||
depends on IDF_TARGET_ESP32S3
|
||||
config BOARD_TYPE_ESP32_P4_FUNCTION_EV_BOARD
|
||||
bool "Espressif ESP32-P4/P4X-Function-EV-Board"
|
||||
depends on IDF_TARGET_ESP32P4
|
||||
config BOARD_TYPE_ESP32_S3_BOX
|
||||
bool "Espressif ESP32-S3-BOX"
|
||||
depends on IDF_TARGET_ESP32S3
|
||||
config BOARD_TYPE_ESP32_S3_BOX_3
|
||||
bool "Espressif ESP32-S3-BOX-3"
|
||||
depends on IDF_TARGET_ESP32S3
|
||||
config BOARD_TYPE_ESP32_S3_BOX_LITE
|
||||
bool "Espressif ESP32-S3-BOX-Lite"
|
||||
depends on IDF_TARGET_ESP32S3
|
||||
config BOARD_TYPE_ESP32_S3_KORVO_2_V3
|
||||
bool "Espressif ESP32-S3-Korvo-2 V3.0"
|
||||
depends on IDF_TARGET_ESP32S3
|
||||
config BOARD_TYPE_ESP32_S3_KORVO_2_V3_RNDIS
|
||||
bool "Espressif ESP32-S3-Korvo-2 V3.0 RNDIS"
|
||||
depends on IDF_TARGET_ESP32S3
|
||||
config BOARD_TYPE_ESP32_S3_LCD_EV_BOARD
|
||||
bool "Espressif ESP32-S3-LCD-EV-Board"
|
||||
depends on IDF_TARGET_ESP32S3
|
||||
config BOARD_TYPE_ESP32_S3_LCD_EV_BOARD_2
|
||||
bool "Espressif ESP32-S3-LCD-EV-Board-2"
|
||||
depends on IDF_TARGET_ESP32S3
|
||||
config BOARD_TYPE_ESP32_S31_FUNCTION_COREBOARD_1
|
||||
bool "Espressif ESP32-S31-Function-CoreBoard-1"
|
||||
depends on IDF_TARGET_ESP32S31
|
||||
config BOARD_TYPE_ESP_HI
|
||||
bool "Espressif ESP-HI"
|
||||
depends on IDF_TARGET_ESP32C3
|
||||
config BOARD_TYPE_ESP_SENSAIRSHUTTLE
|
||||
bool "Espressif ESP-SensairShuttle"
|
||||
depends on IDF_TARGET_ESP32C5
|
||||
config BOARD_TYPE_ESP_VOCAT
|
||||
bool "Espressif ESP-VoCat"
|
||||
depends on IDF_TARGET_ESP32S3
|
||||
config BOARD_TYPE_ESP_SPARKBOT
|
||||
bool "Espressif SparkBot"
|
||||
depends on IDF_TARGET_ESP32S3
|
||||
config BOARD_TYPE_ESP_SENSAIRSHUTTLE
|
||||
bool "Espressif ESP-SensairShuttle"
|
||||
config BOARD_TYPE_ESP_SPOT_C5
|
||||
bool "Espressif Spot-C5"
|
||||
depends on IDF_TARGET_ESP32C5
|
||||
config BOARD_TYPE_ESP_SPOT_S3
|
||||
bool "Espressif Spot-S3"
|
||||
depends on IDF_TARGET_ESP32S3
|
||||
config BOARD_TYPE_ESP_SPOT_C5
|
||||
bool "Espressif Spot-C5"
|
||||
depends on IDF_TARGET_ESP32C5
|
||||
config BOARD_TYPE_ESP_HI
|
||||
bool "Espressif ESP-HI"
|
||||
depends on IDF_TARGET_ESP32C3
|
||||
config BOARD_TYPE_ESP_BOX_3
|
||||
bool "Espressif ESP-BOX-3"
|
||||
config BOARD_TYPE_Freenove_ESP32S3_DISPLAY_2_8_LCD
|
||||
bool "Freenove ESP32-S3 Display 2.8-inch LCD"
|
||||
depends on IDF_TARGET_ESP32S3
|
||||
config BOARD_TYPE_ESP_BOX
|
||||
bool "Espressif ESP-BOX"
|
||||
config BOARD_TYPE_GENJUTECH_S3_1_54TFT
|
||||
bool "GenjuTech ESP32-S3 1.54-inch TFT (亘具科技)"
|
||||
depends on IDF_TARGET_ESP32S3
|
||||
config BOARD_TYPE_ESP_BOX_LITE
|
||||
bool "Espressif ESP-BOX-Lite"
|
||||
config BOARD_TYPE_HU_087
|
||||
bool "HU-087"
|
||||
depends on IDF_TARGET_ESP32S3
|
||||
config BOARD_TYPE_ESP_P4_FUNCTION_EV_BOARD
|
||||
bool "Espressif ESP-P4-Function-EV-Board"
|
||||
depends on IDF_TARGET_ESP32P4
|
||||
config BOARD_TYPE_ESP_VOCAT
|
||||
bool "Espressif ESP-VoCat"
|
||||
config BOARD_TYPE_JIUCHUAN
|
||||
bool "Jiuchuan ESP32-S3 (九川智能)"
|
||||
depends on IDF_TARGET_ESP32S3
|
||||
config BOARD_TYPE_KEVIN_BOX_2
|
||||
bool "Kevin Box 2"
|
||||
@@ -202,65 +260,53 @@ choice BOARD_TYPE
|
||||
bool "Kevin SP V4"
|
||||
depends on IDF_TARGET_ESP32S3
|
||||
config BOARD_TYPE_KEVIN_YUYING_313LCD
|
||||
bool "鱼鹰科技 3.13LCD"
|
||||
bool "Kevin Yuying 3.13-inch LCD (鱼鹰科技)"
|
||||
depends on IDF_TARGET_ESP32S3
|
||||
config BOARD_TYPE_CGC
|
||||
bool "CGC"
|
||||
depends on IDF_TARGET_ESP32
|
||||
config BOARD_TYPE_CGC_144
|
||||
bool "CGC 144"
|
||||
depends on IDF_TARGET_ESP32
|
||||
config BOARD_TYPE_LICHUANG_DEV_S3
|
||||
bool "立创·实战派 ESP32-S3"
|
||||
config BOARD_TYPE_LABPLUS_LEDONG_V2
|
||||
bool "Labplus Ledong V2"
|
||||
depends on IDF_TARGET_ESP32S3
|
||||
config BOARD_TYPE_QUANDONG_S3_DEV
|
||||
bool "全动 ESP32-S3 开发板"
|
||||
config BOARD_TYPE_LABPLUS_MPYTHON_V3
|
||||
bool "Labplus mPython V3"
|
||||
depends on IDF_TARGET_ESP32S3
|
||||
config BOARD_TYPE_LICHUANG_DEV_C3
|
||||
bool "立创·实战派 ESP32-C3"
|
||||
depends on IDF_TARGET_ESP32C3
|
||||
config BOARD_TYPE_RYMCU_BIGSMART
|
||||
bool "RYMCU BigSmart"
|
||||
depends on IDF_TARGET_ESP32S3
|
||||
config BOARD_TYPE_EDA_TV_PRO
|
||||
bool "EDA课程案例 EDA-TV-Pro"
|
||||
config BOARD_TYPE_LCDWIKI_ES3C35P
|
||||
bool "LCDWiki ES3C35P 3.5-inch ESP32-S3"
|
||||
depends on IDF_TARGET_ESP32S3
|
||||
config BOARD_TYPE_EDA_ROBOT_PRO
|
||||
bool "EDA课程案例 EDA-Robot-Pro"
|
||||
bool "LCEDA Course Example EDA-Robot-Pro (EDA 课程案例)"
|
||||
depends on IDF_TARGET_ESP32S3
|
||||
config BOARD_TYPE_EDA_SUPER_BEAR
|
||||
bool "EDA课程案例 EDA-Super-Bear"
|
||||
bool "LCEDA Course Example EDA-Super-Bear (EDA 课程案例)"
|
||||
depends on IDF_TARGET_ESP32S3
|
||||
config BOARD_TYPE_DF_K10
|
||||
bool "DFRobot 行空板 k10"
|
||||
config BOARD_TYPE_EDA_TV_PRO
|
||||
bool "LCEDA Course Example EDA-TV-Pro (EDA 课程案例)"
|
||||
depends on IDF_TARGET_ESP32S3
|
||||
config BOARD_TYPE_DF_S3_AI_CAM
|
||||
bool "DFRobot ESP32-S3 AI智能摄像头模块"
|
||||
depends on IDF_TARGET_ESP32S3
|
||||
config BOARD_TYPE_MAGICLICK_S3_2P4
|
||||
bool "神奇按钮 Magiclick_2.4"
|
||||
depends on IDF_TARGET_ESP32S3
|
||||
config BOARD_TYPE_MAGICLICK_S3_2P5
|
||||
bool "神奇按钮 Magiclick_2.5"
|
||||
depends on IDF_TARGET_ESP32S3
|
||||
config BOARD_TYPE_MAGICLICK_C3
|
||||
bool "神奇按钮 Magiclick_C3"
|
||||
config BOARD_TYPE_LICHUANG_DEV_C3
|
||||
bool "LCKFB SZPI ESP32-C3 (立创·实战派)"
|
||||
depends on IDF_TARGET_ESP32C3
|
||||
config BOARD_TYPE_MAGICLICK_C3_V2
|
||||
bool "神奇按钮 Magiclick_C3_v2"
|
||||
depends on IDF_TARGET_ESP32C3
|
||||
config BOARD_TYPE_M5STACK_STOPWATCH
|
||||
bool "M5Stack StopWatch"
|
||||
config BOARD_TYPE_LICHUANG_DEV_S3
|
||||
bool "LCKFB SZPI ESP32-S3 (立创·实战派)"
|
||||
depends on IDF_TARGET_ESP32S3
|
||||
config BOARD_TYPE_M5STACK_CORE_S3
|
||||
bool "M5Stack CoreS3"
|
||||
config BOARD_TYPE_LILYGO_T_CAMERAPLUS_S3_V1_0_V1_1
|
||||
bool "LILYGO T-CameraPlus-S3 V1.0/V1.1"
|
||||
depends on IDF_TARGET_ESP32S3
|
||||
config BOARD_TYPE_M5STACK_STICK_S3
|
||||
bool "M5Stack StickS3"
|
||||
config BOARD_TYPE_LILYGO_T_CAMERAPLUS_S3_V1_2
|
||||
bool "LILYGO T-CameraPlus-S3 V1.2"
|
||||
depends on IDF_TARGET_ESP32S3
|
||||
config BOARD_TYPE_M5STACK_CORE_TAB5
|
||||
bool "M5Stack Tab5"
|
||||
depends on IDF_TARGET_ESP32P4
|
||||
config BOARD_TYPE_LILYGO_T_CIRCLE_S3
|
||||
bool "LILYGO T-Circle-S3"
|
||||
depends on IDF_TARGET_ESP32S3
|
||||
config BOARD_TYPE_LILYGO_T_DISPLAY_S3_PRO_MVSRLORA
|
||||
bool "LILYGO T-Display-S3-Pro MVSR LoRa"
|
||||
depends on IDF_TARGET_ESP32S3
|
||||
config BOARD_TYPE_LILYGO_T_DISPLAY_S3_PRO_MVSRLORA_NO_BATTERY
|
||||
bool "LILYGO T-Display-S3-Pro MVSR LoRa (No Battery)"
|
||||
depends on IDF_TARGET_ESP32S3
|
||||
config BOARD_TYPE_M5STACK_ATOM_ECHOS3R
|
||||
bool "M5Stack AtomEchoS3R"
|
||||
depends on IDF_TARGET_ESP32S3
|
||||
config BOARD_TYPE_M5STACK_ATOM_MATRIX_ECHO_BASE
|
||||
bool "M5Stack AtomMatrix + Echo Base"
|
||||
depends on IDF_TARGET_ESP32
|
||||
config BOARD_TYPE_M5STACK_ATOM_S3_ECHO_BASE
|
||||
bool "M5Stack AtomS3 + Echo Base"
|
||||
depends on IDF_TARGET_ESP32S3
|
||||
@@ -273,47 +319,191 @@ choice BOARD_TYPE
|
||||
config BOARD_TYPE_M5STACK_ATOM_S3R_CAM_M12_ECHO_BASE
|
||||
bool "M5Stack AtomS3R CAM/M12 + Echo Base"
|
||||
depends on IDF_TARGET_ESP32S3
|
||||
config BOARD_TYPE_M5STACK_ATOM_ECHOS3R
|
||||
bool "M5Stack AtomEchoS3R"
|
||||
depends on IDF_TARGET_ESP32S3
|
||||
config BOARD_TYPE_M5STACK_CARDPUTER_ADV
|
||||
bool "M5Stack Cardputer Adv"
|
||||
depends on IDF_TARGET_ESP32S3
|
||||
config BOARD_TYPE_M5STACK_ATOM_MATRIX_ECHO_BASE
|
||||
bool "M5Stack AtomMatrix + Echo Base"
|
||||
depends on IDF_TARGET_ESP32
|
||||
config BOARD_TYPE_WAVESHARE_ESP32_TOUCH_LCD_3_5
|
||||
bool "Waveshare ESP32-Touch-LCD-3.5"
|
||||
depends on IDF_TARGET_ESP32
|
||||
config BOARD_TYPE_WAVESHARE_ESP32_S3_CAM_XXXX
|
||||
bool "Waveshare ESP32-S3-CAM"
|
||||
config BOARD_TYPE_M5STACK_CORE_S3
|
||||
bool "M5Stack CoreS3"
|
||||
depends on IDF_TARGET_ESP32S3
|
||||
config BOARD_TYPE_WAVESHARE_ESP32_S3_AUDIO_BOARD
|
||||
bool "Waveshare ESP32-S3-Audio-Board"
|
||||
config BOARD_TYPE_M5STACK_STICK_S3
|
||||
bool "M5Stack StickS3"
|
||||
depends on IDF_TARGET_ESP32S3
|
||||
config BOARD_TYPE_WAVESHARE_ESP32_S3_TOUCH_AMOLED_1_8
|
||||
bool "Waveshare ESP32-S3-Touch-AMOLED-1.8"
|
||||
config BOARD_TYPE_M5STACK_STOPWATCH
|
||||
bool "M5Stack Stopwatch"
|
||||
depends on IDF_TARGET_ESP32S3
|
||||
config BOARD_TYPE_WAVESHARE_ESP32_S3_TOUCH_AMOLED_1_8_v2
|
||||
bool "Waveshare ESP32-S3-Touch-AMOLED-1.8-v2"
|
||||
config BOARD_TYPE_M5STACK_CORE_TAB5
|
||||
bool "M5Stack Tab5"
|
||||
depends on IDF_TARGET_ESP32P4
|
||||
config BOARD_TYPE_MAGICLICK_S3_2P4
|
||||
bool "Magiclick 2.4 (神奇按钮)"
|
||||
depends on IDF_TARGET_ESP32S3
|
||||
config BOARD_TYPE_WAVESHARE_ESP32_S3_TOUCH_AMOLED_1_43C
|
||||
bool "Waveshare ESP32-S3-Touch-AMOLED-1.43C"
|
||||
config BOARD_TYPE_MAGICLICK_S3_2P5
|
||||
bool "Magiclick 2.5 (神奇按钮)"
|
||||
depends on IDF_TARGET_ESP32S3
|
||||
config BOARD_TYPE_WAVESHARE_ESP32_S3_TOUCH_AMOLED_2_06
|
||||
bool "Waveshare ESP32-S3-Touch-AMOLED-2.06"
|
||||
config BOARD_TYPE_MAGICLICK_C3
|
||||
bool "Magiclick C3 (神奇按钮)"
|
||||
depends on IDF_TARGET_ESP32C3
|
||||
config BOARD_TYPE_MAGICLICK_C3_V2
|
||||
bool "Magiclick C3 V2 (神奇按钮)"
|
||||
depends on IDF_TARGET_ESP32C3
|
||||
config BOARD_TYPE_MINSI_K08_DUAL
|
||||
bool "Minsi K08 Dual Network (敏思科技)"
|
||||
depends on IDF_TARGET_ESP32S3
|
||||
config BOARD_TYPE_MIXGO_NOVA
|
||||
bool "MixGo Nova (元控·青春)"
|
||||
depends on IDF_TARGET_ESP32S3
|
||||
config BOARD_TYPE_MOVECALL_CUICAN_ESP32S3
|
||||
bool "Movecall CuiCan (璀璨 AI 吊坠)"
|
||||
depends on IDF_TARGET_ESP32S3
|
||||
config BOARD_TYPE_MOVECALL_MOJI_ESP32S3
|
||||
bool "Movecall Moji"
|
||||
depends on IDF_TARGET_ESP32S3
|
||||
config BOARD_TYPE_MOVECALL_MOJI2_ESP32C5
|
||||
bool "Movecall Moji 2.0"
|
||||
depends on IDF_TARGET_ESP32C5
|
||||
config BOARD_TYPE_XINGZHI_ABS_2_0
|
||||
bool "Nologo Xingzhi ABS 2.0 (无名科技星智)"
|
||||
depends on IDF_TARGET_ESP32S3
|
||||
config BOARD_TYPE_XINGZHI_CUBE_0_85TFT_ML307
|
||||
bool "Nologo Xingzhi Cube 0.85-inch TFT ML307 (无名科技星智)"
|
||||
depends on IDF_TARGET_ESP32S3
|
||||
config BOARD_TYPE_XINGZHI_CUBE_0_85TFT_WIFI
|
||||
bool "Nologo Xingzhi Cube 0.85-inch TFT Wi-Fi (无名科技星智)"
|
||||
depends on IDF_TARGET_ESP32S3
|
||||
config BOARD_TYPE_XINGZHI_CUBE_0_96OLED_ML307
|
||||
bool "Nologo Xingzhi Cube 0.96-inch OLED ML307 (无名科技星智)"
|
||||
depends on IDF_TARGET_ESP32S3
|
||||
config BOARD_TYPE_XINGZHI_CUBE_0_96OLED_WIFI
|
||||
bool "Nologo Xingzhi Cube 0.96-inch OLED Wi-Fi (无名科技星智)"
|
||||
depends on IDF_TARGET_ESP32S3
|
||||
config BOARD_TYPE_XINGZHI_CUBE_1_54TFT_ML307
|
||||
bool "Nologo Xingzhi Cube 1.54-inch TFT ML307 (无名科技星智)"
|
||||
depends on IDF_TARGET_ESP32S3
|
||||
config BOARD_TYPE_XINGZHI_CUBE_1_54TFT_WIFI
|
||||
bool "Nologo Xingzhi Cube 1.54-inch TFT Wi-Fi (无名科技星智)"
|
||||
depends on IDF_TARGET_ESP32S3
|
||||
config BOARD_TYPE_XINGZHI_METAL_1_54_WIFI
|
||||
bool "Nologo Xingzhi Metal 1.54-inch Wi-Fi (无名科技星智)"
|
||||
depends on IDF_TARGET_ESP32S3
|
||||
config BOARD_TYPE_AI_VOX3
|
||||
bool "NullLab AI Vox V3"
|
||||
depends on IDF_TARGET_ESP32S3
|
||||
config BOARD_TYPE_OTTO_ROBOT
|
||||
bool "Otto Robot"
|
||||
depends on IDF_TARGET_ESP32S3
|
||||
config BOARD_TYPE_QUANDONG_S3_DEV
|
||||
bool "Quandong ESP32-S3 Development Board (全动)"
|
||||
depends on IDF_TARGET_ESP32S3
|
||||
config BOARD_TYPE_RYMCU_BIGSMART
|
||||
bool "RYMCU BigSmart"
|
||||
depends on IDF_TARGET_ESP32S3
|
||||
config BOARD_TYPE_SEEED_STUDIO_SENSECAP_WATCHER
|
||||
bool "Seeed Studio SenseCAP Watcher"
|
||||
depends on IDF_TARGET_ESP32S3
|
||||
config BOARD_TYPE_SPOTPEAR_ESP32_S3_1_28_BOX
|
||||
bool "Spotpear ESP32-S3 1.28 Box"
|
||||
depends on IDF_TARGET_ESP32S3
|
||||
config BOARD_TYPE_SPOTPEAR_ESP32_S3_1_54_MUMA
|
||||
bool "Spotpear ESP32-S3 1.54 MUMA"
|
||||
depends on IDF_TARGET_ESP32S3
|
||||
config BOARD_TYPE_SURFER_C3_1_14TFT
|
||||
bool "Surfer C3 1.14-inch TFT"
|
||||
depends on IDF_TARGET_ESP32C3
|
||||
config BOARD_TYPE_TAIJI_PI_S3
|
||||
bool "Taiji Pi ESP32-S3 (太极小派)"
|
||||
depends on IDF_TARGET_ESP32S3
|
||||
config BOARD_TYPE_WAVESHARE_ESP32_C5_TOUCH_LCD_1_69
|
||||
bool "Waveshare ESP32-C5-Touch-LCD-1.69"
|
||||
depends on IDF_TARGET_ESP32C5
|
||||
config BOARD_TYPE_WAVESHARE_ESP32_C6_LCD_0_85
|
||||
bool "Waveshare ESP32-C6-LCD-0.85"
|
||||
depends on IDF_TARGET_ESP32C6
|
||||
config BOARD_TYPE_WAVESHARE_ESP32_C6_LCD_1_69
|
||||
bool "Waveshare ESP32-C6-LCD-1.69"
|
||||
depends on IDF_TARGET_ESP32C6
|
||||
config BOARD_TYPE_WAVESHARE_ESP32_C6_TOUCH_AMOLED_1_32
|
||||
bool "Waveshare ESP32-C6-Touch-AMOLED-1.32"
|
||||
depends on IDF_TARGET_ESP32C6
|
||||
config BOARD_TYPE_WAVESHARE_ESP32_C6_TOUCH_AMOLED_1_43
|
||||
bool "Waveshare ESP32-C6-Touch-AMOLED-1.43"
|
||||
depends on IDF_TARGET_ESP32C6
|
||||
config BOARD_TYPE_WAVESHARE_ESP32_C6_TOUCH_AMOLED_1_8
|
||||
bool "Waveshare ESP32-C6-Touch-AMOLED-1.8"
|
||||
depends on IDF_TARGET_ESP32C6
|
||||
config BOARD_TYPE_WAVESHARE_ESP32_C6_TOUCH_AMOLED_2_06
|
||||
bool "Waveshare ESP32-C6-Touch-AMOLED-2.06"
|
||||
depends on IDF_TARGET_ESP32C6
|
||||
config BOARD_TYPE_WAVESHARE_ESP32_C6_TOUCH_AMOLED_2_16
|
||||
bool "Waveshare ESP32-C6-Touch-AMOLED-2.16"
|
||||
depends on IDF_TARGET_ESP32C6
|
||||
config BOARD_TYPE_WAVESHARE_ESP32_S3_TOUCH_AMOLED_2_16
|
||||
bool "Waveshare ESP32-S3-Touch-AMOLED-2.16"
|
||||
config BOARD_TYPE_WAVESHARE_ESP32_C6_TOUCH_LCD_1_54
|
||||
bool "Waveshare ESP32-C6-Touch-LCD-1.54"
|
||||
depends on IDF_TARGET_ESP32C6
|
||||
config BOARD_TYPE_WAVESHARE_ESP32_C6_TOUCH_LCD_1_83
|
||||
bool "Waveshare ESP32-C6-Touch-LCD-1.83"
|
||||
depends on IDF_TARGET_ESP32C6
|
||||
config BOARD_TYPE_WAVESHARE_ESP32_P4_WIFI6_TOUCH_LCD_3_4C
|
||||
bool "Waveshare ESP32-P4 Wi-Fi 6 Touch LCD 3.4C"
|
||||
depends on IDF_TARGET_ESP32P4
|
||||
config BOARD_TYPE_WAVESHARE_ESP32_P4_WIFI6_TOUCH_LCD_3_5
|
||||
bool "Waveshare ESP32-P4 Wi-Fi 6 Touch LCD 3.5"
|
||||
depends on IDF_TARGET_ESP32P4
|
||||
config BOARD_TYPE_WAVESHARE_ESP32_P4_WIFI6_TOUCH_LCD_4B
|
||||
bool "Waveshare ESP32-P4 Wi-Fi 6 Touch LCD 4B"
|
||||
depends on IDF_TARGET_ESP32P4
|
||||
config BOARD_TYPE_WAVESHARE_ESP32_P4_WIFI6_TOUCH_LCD_4C
|
||||
bool "Waveshare ESP32-P4 Wi-Fi 6 Touch LCD 4C"
|
||||
depends on IDF_TARGET_ESP32P4
|
||||
config BOARD_TYPE_WAVESHARE_ESP32_P4_WIFI6_TOUCH_LCD_4_3
|
||||
bool "Waveshare ESP32-P4 Wi-Fi 6 Touch LCD 4.3"
|
||||
depends on IDF_TARGET_ESP32P4
|
||||
config BOARD_TYPE_WAVESHARE_ESP32_P4_WIFI6_TOUCH_LCD_5
|
||||
bool "Waveshare ESP32-P4 Wi-Fi 6 Touch LCD 5"
|
||||
depends on IDF_TARGET_ESP32P4
|
||||
config BOARD_TYPE_WAVESHARE_ESP32_P4_WIFI6_TOUCH_LCD_7
|
||||
bool "Waveshare ESP32-P4 Wi-Fi 6 Touch LCD 7"
|
||||
depends on IDF_TARGET_ESP32P4
|
||||
config BOARD_TYPE_WAVESHARE_ESP32_P4_WIFI6_TOUCH_LCD_7B
|
||||
bool "Waveshare ESP32-P4 Wi-Fi 6 Touch LCD 7B"
|
||||
depends on IDF_TARGET_ESP32P4
|
||||
config BOARD_TYPE_WAVESHARE_ESP32_P4_WIFI6_TOUCH_LCD_8
|
||||
bool "Waveshare ESP32-P4 Wi-Fi 6 Touch LCD 8"
|
||||
depends on IDF_TARGET_ESP32P4
|
||||
config BOARD_TYPE_WAVESHARE_ESP32_P4_WIFI6_TOUCH_LCD_10_1
|
||||
bool "Waveshare ESP32-P4 Wi-Fi 6 Touch LCD 10.1"
|
||||
depends on IDF_TARGET_ESP32P4
|
||||
config BOARD_TYPE_WAVESHARE_ESP32_P4_NANO
|
||||
bool "Waveshare ESP32-P4-Nano"
|
||||
depends on IDF_TARGET_ESP32P4
|
||||
config BOARD_TYPE_WAVESHARE_ESP32_S3_AUDIO_BOARD
|
||||
bool "Waveshare ESP32-S3 Audio Board"
|
||||
depends on IDF_TARGET_ESP32S3
|
||||
config BOARD_TYPE_WAVESHARE_ESP32_S3_CAM_XXXX
|
||||
bool "Waveshare ESP32-S3-CAM"
|
||||
depends on IDF_TARGET_ESP32S3
|
||||
config BOARD_TYPE_WAVESHARE_ESP32_S3_ePaper_1_54_v1
|
||||
bool "Waveshare ESP32-S3-e-Paper-1.54 V1"
|
||||
depends on IDF_TARGET_ESP32S3
|
||||
config BOARD_TYPE_WAVESHARE_ESP32_S3_ePaper_1_54_v2
|
||||
bool "Waveshare ESP32-S3-e-Paper-1.54 V2"
|
||||
depends on IDF_TARGET_ESP32S3
|
||||
config BOARD_TYPE_WAVESHARE_ESP32_S3_ePaper_3_97
|
||||
bool "Waveshare ESP32-S3-e-Paper-3.97"
|
||||
depends on IDF_TARGET_ESP32S3
|
||||
config BOARD_TYPE_WAVESHARE_ESP32_S3_LCD_0_85
|
||||
bool "Waveshare ESP32-S3-LCD-0.85"
|
||||
depends on IDF_TARGET_ESP32S3
|
||||
config BOARD_TYPE_WAVESHARE_ESP32_S3_RGB_MATRIX
|
||||
bool "Waveshare ESP32-S3-RGB-Matrix"
|
||||
depends on IDF_TARGET_ESP32S3
|
||||
config BOARD_TYPE_WAVESHARE_ESP32_S3_RLCD_4_2
|
||||
bool "Waveshare ESP32-S3-RLCD-4.2"
|
||||
depends on IDF_TARGET_ESP32S3
|
||||
config BOARD_TYPE_WAVESHARE_ESP32_S3_TOUCH_AMOLED_1_32
|
||||
bool "Waveshare ESP32-S3-Touch-AMOLED-1.32"
|
||||
depends on IDF_TARGET_ESP32S3
|
||||
config BOARD_TYPE_WAVESHARE_ESP32_S3_TOUCH_AMOLED_1_43C
|
||||
bool "Waveshare ESP32-S3-Touch-AMOLED-1.43C"
|
||||
depends on IDF_TARGET_ESP32S3
|
||||
config BOARD_TYPE_WAVESHARE_ESP32_S3_TOUCH_AMOLED_1_75
|
||||
bool "Waveshare ESP32-S3-Touch-AMOLED-1.75"
|
||||
@@ -321,11 +511,47 @@ choice BOARD_TYPE
|
||||
config BOARD_TYPE_WAVESHARE_ESP32_S3_TOUCH_AMOLED_1_75C
|
||||
bool "Waveshare ESP32-S3-Touch-AMOLED-1.75C"
|
||||
depends on IDF_TARGET_ESP32S3
|
||||
config BOARD_TYPE_WAVESHARE_ESP32_S3_TOUCH_AMOLED_1_8
|
||||
bool "Waveshare ESP32-S3-Touch-AMOLED-1.8"
|
||||
depends on IDF_TARGET_ESP32S3
|
||||
config BOARD_TYPE_WAVESHARE_ESP32_S3_TOUCH_AMOLED_1_8_v2
|
||||
bool "Waveshare ESP32-S3-Touch-AMOLED-1.8 V2"
|
||||
depends on IDF_TARGET_ESP32S3
|
||||
config BOARD_TYPE_WAVESHARE_ESP32_S3_TOUCH_AMOLED_2_06
|
||||
bool "Waveshare ESP32-S3-Touch-AMOLED-2.06"
|
||||
depends on IDF_TARGET_ESP32S3
|
||||
config BOARD_TYPE_WAVESHARE_ESP32_S3_TOUCH_AMOLED_2_16
|
||||
bool "Waveshare ESP32-S3-Touch-AMOLED-2.16"
|
||||
depends on IDF_TARGET_ESP32S3
|
||||
config BOARD_TYPE_WAVESHARE_ESP32_S3_TOUCH_LCD_1_46
|
||||
bool "Waveshare ESP32-S3-Touch-LCD-1.46"
|
||||
depends on IDF_TARGET_ESP32S3
|
||||
config BOARD_TYPE_WAVESHARE_ESP32_S3_TOUCH_LCD_1_54
|
||||
bool "Waveshare ESP32-S3-Touch-LCD-1.54"
|
||||
depends on IDF_TARGET_ESP32S3
|
||||
config BOARD_TYPE_WAVESHARE_ESP32_S3_TOUCH_LCD_1_83
|
||||
bool "Waveshare ESP32-S3-Touch-LCD-1.83"
|
||||
depends on IDF_TARGET_ESP32S3
|
||||
config BOARD_TYPE_WAVESHARE_ESP32_S3_RGB_MATRIX
|
||||
bool "Waveshare ESP32-S3-RGB-Matrix"
|
||||
config BOARD_TYPE_WAVESHARE_ESP32_S3_TOUCH_LCD_1_85
|
||||
bool "Waveshare ESP32-S3-Touch-LCD-1.85"
|
||||
depends on IDF_TARGET_ESP32S3
|
||||
config BOARD_TYPE_WAVESHARE_ESP32_S3_TOUCH_LCD_1_85B
|
||||
bool "Waveshare ESP32-S3-Touch-LCD-1.85B"
|
||||
depends on IDF_TARGET_ESP32S3
|
||||
config BOARD_TYPE_WAVESHARE_ESP32_S3_TOUCH_LCD_1_85C
|
||||
bool "Waveshare ESP32-S3-Touch-LCD-1.85C"
|
||||
depends on IDF_TARGET_ESP32S3
|
||||
config BOARD_TYPE_WAVESHARE_ESP32_S3_TOUCH_LCD_3_49
|
||||
bool "Waveshare ESP32-S3-Touch-LCD-3.49"
|
||||
depends on IDF_TARGET_ESP32S3
|
||||
config BOARD_TYPE_WAVESHARE_ESP32_S3_TOUCH_LCD_3_49_V2
|
||||
bool "Waveshare ESP32-S3-Touch-LCD-3.49 V2"
|
||||
depends on IDF_TARGET_ESP32S3
|
||||
config BOARD_TYPE_WAVESHARE_ESP32_S3_TOUCH_LCD_3_5
|
||||
bool "Waveshare ESP32-S3-Touch-LCD-3.5"
|
||||
depends on IDF_TARGET_ESP32S3
|
||||
config BOARD_TYPE_WAVESHARE_ESP32_S3_TOUCH_LCD_3_5B
|
||||
bool "Waveshare ESP32-S3-Touch-LCD-3.5B"
|
||||
depends on IDF_TARGET_ESP32S3
|
||||
config BOARD_TYPE_WAVESHARE_ESP32_S3_TOUCH_LCD_4B
|
||||
bool "Waveshare ESP32-S3-Touch-LCD-4B"
|
||||
@@ -336,260 +562,41 @@ choice BOARD_TYPE
|
||||
config BOARD_TYPE_WAVESHARE_ESP32_S3_TOUCH_LCD_7C
|
||||
bool "Waveshare ESP32-S3-Touch-LCD-7C"
|
||||
depends on IDF_TARGET_ESP32S3
|
||||
config BOARD_TYPE_WAVESHARE_ESP32_S3_TOUCH_LCD_1_85C
|
||||
bool "Waveshare ESP32-S3-Touch-LCD-1.85C"
|
||||
config BOARD_TYPE_WAVESHARE_ESP32_TOUCH_LCD_3_5
|
||||
bool "Waveshare ESP32-Touch-LCD-3.5"
|
||||
depends on IDF_TARGET_ESP32
|
||||
config BOARD_TYPE_WDMOMO_CGC
|
||||
bool "WDMomo ESP32-CGC"
|
||||
depends on IDF_TARGET_ESP32
|
||||
config BOARD_TYPE_WDMOMO_CGC_144
|
||||
bool "WDMomo ESP32-CGC-144"
|
||||
depends on IDF_TARGET_ESP32
|
||||
config BOARD_TYPE_XMINI_C3
|
||||
bool "Xmini C3"
|
||||
depends on IDF_TARGET_ESP32C3
|
||||
config BOARD_TYPE_XMINI_C3_4G
|
||||
bool "Xmini C3 4G"
|
||||
depends on IDF_TARGET_ESP32C3
|
||||
config BOARD_TYPE_XMINI_C3_V3
|
||||
bool "Xmini C3 V3"
|
||||
depends on IDF_TARGET_ESP32C3
|
||||
config BOARD_TYPE_XORIGIN_AIPI_LITE
|
||||
bool "XOrigin AiPi-Lite"
|
||||
depends on IDF_TARGET_ESP32S3
|
||||
config BOARD_TYPE_WAVESHARE_ESP32_S3_TOUCH_LCD_1_85
|
||||
bool "Waveshare ESP32-S3-Touch-LCD-1.85"
|
||||
depends on IDF_TARGET_ESP32S3
|
||||
config BOARD_TYPE_WAVESHARE_ESP32_S3_TOUCH_LCD_1_46
|
||||
bool "Waveshare ESP32-S3-Touch-LCD-1.46"
|
||||
depends on IDF_TARGET_ESP32S3
|
||||
config BOARD_TYPE_WAVESHARE_ESP32_C6_LCD_1_69
|
||||
bool "Waveshare ESP32-C6-LCD-1.69"
|
||||
depends on IDF_TARGET_ESP32C6
|
||||
config BOARD_TYPE_WAVESHARE_ESP32_C6_TOUCH_LCD_1_83
|
||||
bool "Waveshare ESP32-C6-Touch-LCD-1.83"
|
||||
depends on IDF_TARGET_ESP32C6
|
||||
config BOARD_TYPE_WAVESHARE_ESP32_C6_TOUCH_AMOLED_1_43
|
||||
bool "Waveshare ESP32-C6-Touch-AMOLOED-1.43"
|
||||
depends on IDF_TARGET_ESP32C6
|
||||
config BOARD_TYPE_WAVESHARE_ESP32_C6_TOUCH_AMOLED_1_32
|
||||
bool "Waveshare ESP32-C6-Touch-AMOLOED-1.32"
|
||||
depends on IDF_TARGET_ESP32C6
|
||||
config BOARD_TYPE_WAVESHARE_ESP32_C6_TOUCH_AMOLED_1_8
|
||||
bool "Waveshare ESP32-C6-Touch-AMOLED-1.8"
|
||||
depends on IDF_TARGET_ESP32C6
|
||||
config BOARD_TYPE_WAVESHARE_ESP32_C6_TOUCH_LCD_1_54
|
||||
bool "Waveshare ESP32-C6-Touch-LCD-1.54"
|
||||
depends on IDF_TARGET_ESP32C6
|
||||
config BOARD_TYPE_WAVESHARE_ESP32_C6_LCD_0_85
|
||||
bool "Waveshare ESP32-C6-LCD-0.85"
|
||||
depends on IDF_TARGET_ESP32C6
|
||||
config BOARD_TYPE_WAVESHARE_ESP32_S3_TOUCH_AMOLED_1_32
|
||||
bool "Waveshare ESP32-S3-Touch-AMOLOED-1.32"
|
||||
depends on IDF_TARGET_ESP32S3
|
||||
config BOARD_TYPE_WAVESHARE_ESP32_S3_TOUCH_LCD_3_49
|
||||
bool "Waveshare ESP32-S3-Touch-LCD-3.49"
|
||||
depends on IDF_TARGET_ESP32S3
|
||||
config BOARD_TYPE_WAVESHARE_ESP32_S3_TOUCH_LCD_3_49_V2
|
||||
bool "Waveshare ESP32-S3-Touch-LCD-3.49-V2"
|
||||
depends on IDF_TARGET_ESP32S3
|
||||
config BOARD_TYPE_WAVESHARE_ESP32_S3_TOUCH_LCD_3_5
|
||||
bool "Waveshare ESP32-S3-Touch-LCD-3.5"
|
||||
depends on IDF_TARGET_ESP32S3
|
||||
config BOARD_TYPE_WAVESHARE_ESP32_S3_ePaper_1_54_v1
|
||||
bool "Waveshare ESP32-S3-ePaper-1.54_v1"
|
||||
depends on IDF_TARGET_ESP32S3
|
||||
config BOARD_TYPE_WAVESHARE_ESP32_S3_ePaper_1_54_v2
|
||||
bool "Waveshare ESP32-S3-ePaper-1.54_v2"
|
||||
depends on IDF_TARGET_ESP32S3
|
||||
config BOARD_TYPE_WAVESHARE_ESP32_S3_ePaper_3_97
|
||||
bool "Waveshare ESP32-S3-ePaper-3.97"
|
||||
depends on IDF_TARGET_ESP32S3
|
||||
config BOARD_TYPE_WAVESHARE_ESP32_S3_RLCD_4_2
|
||||
bool "Waveshare ESP32-S3-RLCD-4.2"
|
||||
depends on IDF_TARGET_ESP32S3
|
||||
config BOARD_TYPE_WAVESHARE_ESP32_S3_TOUCH_LCD_3_5B
|
||||
bool "Waveshare ESP32-S3-Touch-LCD-3.5B"
|
||||
depends on IDF_TARGET_ESP32S3
|
||||
config BOARD_TYPE_WAVESHARE_ESP32_S3_TOUCH_LCD_1_54
|
||||
bool "Waveshare ESP32-S3-Touch-LCD-1.54"
|
||||
depends on IDF_TARGET_ESP32S3
|
||||
config BOARD_TYPE_WAVESHARE_ESP32_S3_LCD_0_85
|
||||
bool "Waveshare ESP32-S3-LCD-0.85"
|
||||
depends on IDF_TARGET_ESP32S3
|
||||
config BOARD_TYPE_WAVESHARE_ESP32_P4_NANO
|
||||
bool "Waveshare ESP32-P4-NANO"
|
||||
depends on IDF_TARGET_ESP32P4
|
||||
config BOARD_TYPE_WAVESHARE_ESP32_P4_WIFI6_TOUCH_LCD_4B
|
||||
bool "Waveshare ESP32-P4-WIFI6-Touch-LCD-4B"
|
||||
depends on IDF_TARGET_ESP32P4
|
||||
config BOARD_TYPE_WAVESHARE_ESP32_P4_WIFI6_TOUCH_LCD_4_3
|
||||
bool "Waveshare ESP32-P4-WIFI6-Touch-LCD-4.3"
|
||||
depends on IDF_TARGET_ESP32P4
|
||||
config BOARD_TYPE_WAVESHARE_ESP32_P4_WIFI6_TOUCH_LCD_5
|
||||
bool "Waveshare ESP32-P4-WIFI6-Touch-LCD-5"
|
||||
depends on IDF_TARGET_ESP32P4
|
||||
config BOARD_TYPE_WAVESHARE_ESP32_P4_WIFI6_TOUCH_LCD_7B
|
||||
bool "Waveshare ESP32-P4-WIFI6-Touch-LCD-7B"
|
||||
depends on IDF_TARGET_ESP32P4
|
||||
config BOARD_TYPE_WAVESHARE_ESP32_P4_WIFI6_TOUCH_LCD_3_4C
|
||||
bool "Waveshare ESP32-P4-WIFI6-Touch-LCD-3.4C"
|
||||
depends on IDF_TARGET_ESP32P4
|
||||
config BOARD_TYPE_WAVESHARE_ESP32_P4_WIFI6_TOUCH_LCD_3_5
|
||||
bool "Waveshare ESP32-P4-WIFI6-Touch-LCD-3.5"
|
||||
depends on IDF_TARGET_ESP32P4
|
||||
config BOARD_TYPE_WAVESHARE_ESP32_P4_WIFI6_TOUCH_LCD_4C
|
||||
bool "Waveshare ESP32-P4-WIFI6-Touch-LCD-4C"
|
||||
depends on IDF_TARGET_ESP32P4
|
||||
config BOARD_TYPE_WAVESHARE_ESP32_P4_WIFI6_TOUCH_LCD_7
|
||||
bool "Waveshare ESP32-P4-WIFI6-Touch-LCD-7"
|
||||
depends on IDF_TARGET_ESP32P4
|
||||
config BOARD_TYPE_WAVESHARE_ESP32_P4_WIFI6_TOUCH_LCD_8
|
||||
bool "Waveshare ESP32-P4-WIFI6-Touch-LCD-8"
|
||||
depends on IDF_TARGET_ESP32P4
|
||||
config BOARD_TYPE_WAVESHARE_ESP32_P4_WIFI6_TOUCH_LCD_10_1
|
||||
bool "Waveshare ESP32-P4-WIFI6-Touch-LCD-10.1"
|
||||
depends on IDF_TARGET_ESP32P4
|
||||
config BOARD_TYPE_TUDOUZI
|
||||
bool "土豆子"
|
||||
depends on IDF_TARGET_ESP32S3
|
||||
config BOARD_TYPE_LILYGO_T_CIRCLE_S3
|
||||
bool "LILYGO T-Circle-S3"
|
||||
depends on IDF_TARGET_ESP32S3
|
||||
config BOARD_TYPE_LILYGO_T_CAMERAPLUS_S3_V1_0_V1_1
|
||||
bool "LILYGO T-CameraPlus-S3_V1_0_V1_1"
|
||||
depends on IDF_TARGET_ESP32S3
|
||||
config BOARD_TYPE_LILYGO_T_CAMERAPLUS_S3_V1_2
|
||||
bool "LILYGO T-CameraPlus-S3_V1_2"
|
||||
depends on IDF_TARGET_ESP32S3
|
||||
config BOARD_TYPE_LILYGO_T_DISPLAY_S3_PRO_MVSRLORA
|
||||
bool "LILYGO T-Display-S3-Pro-MVSRLora"
|
||||
depends on IDF_TARGET_ESP32S3
|
||||
config BOARD_TYPE_LILYGO_T_DISPLAY_S3_PRO_MVSRLORA_NO_BATTERY
|
||||
bool "LILYGO T-Display-S3-Pro-MVSRLora_No_Battery"
|
||||
depends on IDF_TARGET_ESP32S3
|
||||
config BOARD_TYPE_MOVECALL_MOJI_ESP32S3
|
||||
bool "Movecall Moji 小智AI衍生版"
|
||||
depends on IDF_TARGET_ESP32S3
|
||||
config BOARD_TYPE_MOVECALL_MOJI2_ESP32C5
|
||||
bool "Movecall Moji2.0 小智AI衍生版"
|
||||
depends on IDF_TARGET_ESP32C5
|
||||
config BOARD_TYPE_MOVECALL_CUICAN_ESP32S3
|
||||
bool "Movecall CuiCan 璀璨·AI吊坠"
|
||||
depends on IDF_TARGET_ESP32S3
|
||||
config BOARD_TYPE_ATK_DNESP32S3
|
||||
bool "正点原子DNESP32S3开发板"
|
||||
depends on IDF_TARGET_ESP32S3
|
||||
config BOARD_TYPE_ATK_DNESP32S3_BOX
|
||||
bool "正点原子DNESP32S3-BOX"
|
||||
depends on IDF_TARGET_ESP32S3
|
||||
config BOARD_TYPE_ATK_DNESP32S3_BOX0
|
||||
bool "正点原子DNESP32S3-BOX0"
|
||||
depends on IDF_TARGET_ESP32S3
|
||||
config BOARD_TYPE_ATK_DNESP32S3_BOX2_WIFI
|
||||
bool "正点原子DNESP32S3-BOX2-WIFI"
|
||||
depends on IDF_TARGET_ESP32S3
|
||||
config BOARD_TYPE_ATK_DNESP32S3_BOX2_4G
|
||||
bool "正点原子DNESP32S3-BOX2-4G"
|
||||
depends on IDF_TARGET_ESP32S3
|
||||
config BOARD_TYPE_ATK_DNESP32S3M_WIFI
|
||||
bool "正点原子DNESP32S3M-WIFI"
|
||||
depends on IDF_TARGET_ESP32S3
|
||||
config BOARD_TYPE_ATK_DNESP32S3M_4G
|
||||
bool "正点原子DNESP32S3M-4G"
|
||||
depends on IDF_TARGET_ESP32S3
|
||||
config BOARD_TYPE_ATK_DNESP32S3_BOX3
|
||||
bool "正点原子DNESP32S3-BOX3"
|
||||
depends on IDF_TARGET_ESP32S3
|
||||
config BOARD_TYPE_DU_CHATX
|
||||
bool "嘟嘟开发板CHATX(wifi)"
|
||||
depends on IDF_TARGET_ESP32S3
|
||||
config BOARD_TYPE_TAIJI_PI_S3
|
||||
bool "太极小派esp32s3"
|
||||
depends on IDF_TARGET_ESP32S3
|
||||
config BOARD_TYPE_XINGZHI_CUBE_0_85TFT_WIFI
|
||||
bool "无名科技星智0.85(WIFI)"
|
||||
depends on IDF_TARGET_ESP32S3
|
||||
config BOARD_TYPE_XINGZHI_CUBE_0_85TFT_ML307
|
||||
bool "无名科技星智0.85(ML307)"
|
||||
depends on IDF_TARGET_ESP32S3
|
||||
config BOARD_TYPE_XINGZHI_CUBE_0_96OLED_WIFI
|
||||
bool "无名科技星智0.96(WIFI)"
|
||||
depends on IDF_TARGET_ESP32S3
|
||||
config BOARD_TYPE_XINGZHI_CUBE_0_96OLED_ML307
|
||||
bool "无名科技星智0.96(ML307)"
|
||||
depends on IDF_TARGET_ESP32S3
|
||||
config BOARD_TYPE_XINGZHI_CUBE_1_54TFT_WIFI
|
||||
bool "无名科技星智1.54(WIFI)"
|
||||
depends on IDF_TARGET_ESP32S3
|
||||
config BOARD_TYPE_XINGZHI_CUBE_1_54TFT_ML307
|
||||
bool "无名科技星智1.54(ML307)"
|
||||
depends on IDF_TARGET_ESP32S3
|
||||
config BOARD_TYPE_XINGZHI_METAL_1_54_WIFI
|
||||
bool "无名科技星智1.54 METAL(wifi)"
|
||||
depends on IDF_TARGET_ESP32S3
|
||||
config BOARD_TYPE_XINGZHI_ABS_2_0
|
||||
bool "无名科技星智ABS 2.0"
|
||||
depends on IDF_TARGET_ESP32S3
|
||||
config BOARD_TYPE_SEEED_STUDIO_SENSECAP_WATCHER
|
||||
bool "Seeed Studio SenseCAP Watcher"
|
||||
depends on IDF_TARGET_ESP32S3
|
||||
config BOARD_TYPE_DOIT_S3_AIBOX
|
||||
bool "四博智联AI陪伴盒子"
|
||||
depends on IDF_TARGET_ESP32S3
|
||||
config BOARD_TYPE_MIXGO_NOVA
|
||||
bool "元控·青春"
|
||||
depends on IDF_TARGET_ESP32S3
|
||||
config BOARD_TYPE_GENJUTECH_S3_1_54TFT
|
||||
bool "亘具科技1.54(s3)"
|
||||
depends on IDF_TARGET_ESP32S3
|
||||
config BOARD_TYPE_ESP_S3_LCD_EV_Board
|
||||
bool "乐鑫ESP S3 LCD EV Board开发板"
|
||||
depends on IDF_TARGET_ESP32S3
|
||||
config BOARD_TYPE_ESP_S3_LCD_EV_Board_2
|
||||
bool "乐鑫ESP S3 LCD EV Board 2开发板"
|
||||
depends on IDF_TARGET_ESP32S3
|
||||
config BOARD_TYPE_ZHENGCHEN_1_54TFT_WIFI
|
||||
bool "征辰科技1.54(WIFI)"
|
||||
config BOARD_TYPE_YUNLIAO_S3
|
||||
bool "Yunliao S3 (小智云聊)"
|
||||
depends on IDF_TARGET_ESP32S3
|
||||
config BOARD_TYPE_ZHENGCHEN_1_54TFT_ML307
|
||||
bool "征辰科技1.54(ML307)"
|
||||
bool "Zhengchen 1.54-inch TFT ML307 (征辰科技)"
|
||||
depends on IDF_TARGET_ESP32S3
|
||||
config BOARD_TYPE_ZHENGCHEN_CAM
|
||||
bool "征辰科技AI Camera"
|
||||
config BOARD_TYPE_ZHENGCHEN_1_54TFT_WIFI
|
||||
bool "Zhengchen 1.54-inch TFT Wi-Fi (征辰科技)"
|
||||
depends on IDF_TARGET_ESP32S3
|
||||
config BOARD_TYPE_ZHENGCHEN_CAM_ML307
|
||||
bool "征辰科技AI Camera(ML307)"
|
||||
depends on IDF_TARGET_ESP32S3
|
||||
config BOARD_TYPE_MINSI_K08_DUAL
|
||||
bool "敏思科技K08(DUAL)"
|
||||
bool "Zhengchen AI Camera ML307 (征辰科技)"
|
||||
depends on IDF_TARGET_ESP32S3
|
||||
config BOARD_TYPE_SPOTPEAR_ESP32_S3_1_54_MUMA
|
||||
bool "Spotpear ESP32-S3-1.54-MUMA"
|
||||
depends on IDF_TARGET_ESP32S3
|
||||
config BOARD_TYPE_SPOTPEAR_ESP32_S3_1_28_BOX
|
||||
bool "Spotpear ESP32-S3-1.28-BOX"
|
||||
depends on IDF_TARGET_ESP32S3
|
||||
config BOARD_TYPE_OTTO_ROBOT
|
||||
bool "ottoRobot"
|
||||
depends on IDF_TARGET_ESP32S3
|
||||
config BOARD_TYPE_ELECTRON_BOT
|
||||
bool "electronBot"
|
||||
depends on IDF_TARGET_ESP32S3
|
||||
config BOARD_TYPE_JIUCHUAN
|
||||
bool "九川智能"
|
||||
depends on IDF_TARGET_ESP32S3
|
||||
config BOARD_TYPE_LABPLUS_MPYTHON_V3
|
||||
bool "labplus mpython_v3 board"
|
||||
depends on IDF_TARGET_ESP32S3
|
||||
config BOARD_TYPE_LABPLUS_LEDONG_V2
|
||||
bool "labplus ledong_v2 board"
|
||||
depends on IDF_TARGET_ESP32S3
|
||||
config BOARD_TYPE_SURFER_C3_1_14TFT
|
||||
bool "Surfer-C3-1.14TFT"
|
||||
depends on IDF_TARGET_ESP32C3
|
||||
config BOARD_TYPE_YUNLIAO_S3
|
||||
bool "小智云聊-S3"
|
||||
depends on IDF_TARGET_ESP32S3
|
||||
config BOARD_TYPE_WIRELESS_TAG_WTP4C5MP07S
|
||||
bool "Wireless-Tag WTP4C5MP07S"
|
||||
depends on IDF_TARGET_ESP32P4
|
||||
config BOARD_TYPE_AIPI_LITE
|
||||
bool "AIPI-Lite"
|
||||
depends on IDF_TARGET_ESP32S3
|
||||
config BOARD_TYPE_HU_087
|
||||
bool "HU-087"
|
||||
depends on IDF_TARGET_ESP32S3
|
||||
config BOARD_TYPE_Freenove_ESP32S3_DISPLAY_2_8_LCD
|
||||
bool "Freenove ESP32S3 Display 2.8 LCD"
|
||||
depends on IDF_TARGET_ESP32S3
|
||||
config BOARD_TYPE_AI_VOX3
|
||||
bool "NULLLAB-AI-VOX3"
|
||||
depends on IDF_TARGET_ESP32S3
|
||||
config BOARD_TYPE_LCDWIKI_ES3C35P
|
||||
bool "LCD Wiki ES3C35P (3.5寸 ESP32-S3)"
|
||||
config BOARD_TYPE_ZHENGCHEN_CAM
|
||||
bool "Zhengchen AI Camera Wi-Fi (征辰科技)"
|
||||
depends on IDF_TARGET_ESP32S3
|
||||
endchoice
|
||||
|
||||
@@ -658,14 +665,14 @@ menu "Ethernet Configuration"
|
||||
|
||||
endmenu
|
||||
|
||||
choice ESP_S3_LCD_EV_Board_Version_TYPE
|
||||
depends on BOARD_TYPE_ESP_S3_LCD_EV_Board
|
||||
choice ESP32_S3_LCD_EV_BOARD_VERSION
|
||||
depends on BOARD_TYPE_ESP32_S3_LCD_EV_BOARD
|
||||
prompt "EV_BOARD Type"
|
||||
default ESP_S3_LCD_EV_Board_1p4
|
||||
config ESP_S3_LCD_EV_Board_1p4
|
||||
bool "乐鑫ESP32_S3_LCD_EV_Board-MB_V1.4"
|
||||
config ESP_S3_LCD_EV_Board_1p5
|
||||
bool "乐鑫ESP32_S3_LCD_EV_Board-MB_V1.5"
|
||||
default ESP32_S3_LCD_EV_BOARD_V1_4
|
||||
config ESP32_S3_LCD_EV_BOARD_V1_4
|
||||
bool "Espressif ESP32-S3-LCD-EV-Board-MB v1.4"
|
||||
config ESP32_S3_LCD_EV_BOARD_V1_5
|
||||
bool "Espressif ESP32-S3-LCD-EV-Board-MB v1.5"
|
||||
endchoice
|
||||
|
||||
choice DISPLAY_OLED_TYPE
|
||||
@@ -683,7 +690,7 @@ choice DISPLAY_OLED_TYPE
|
||||
endchoice
|
||||
|
||||
choice DISPLAY_LCD_TYPE
|
||||
depends on BOARD_TYPE_BREAD_COMPACT_WIFI_LCD || BOARD_TYPE_BREAD_COMPACT_ESP32_LCD || BOARD_TYPE_CGC || BOARD_TYPE_BREAD_COMPACT_WIFI_CAM
|
||||
depends on BOARD_TYPE_BREAD_COMPACT_WIFI_LCD || BOARD_TYPE_BREAD_COMPACT_ESP32_LCD || BOARD_TYPE_WDMOMO_CGC || BOARD_TYPE_BREAD_COMPACT_WIFI_CAM
|
||||
prompt "LCD Type"
|
||||
default LCD_ST7789_240X320
|
||||
help
|
||||
@@ -723,7 +730,7 @@ choice DISPLAY_LCD_TYPE
|
||||
endchoice
|
||||
|
||||
choice DISPLAY_ESP32S3_KORVO2_V3
|
||||
depends on BOARD_TYPE_ESP_KORVO2_V3 || BOARD_TYPE_ESP_KORVO2_V3_RNDIS
|
||||
depends on BOARD_TYPE_ESP32_S3_KORVO_2_V3 || BOARD_TYPE_ESP32_S3_KORVO_2_V3_RNDIS
|
||||
prompt "ESP32S3_KORVO2_V3 LCD Type"
|
||||
default ESP32S3_KORVO2_V3_LCD_ST7789
|
||||
help
|
||||
@@ -792,7 +799,7 @@ choice DISPLAY_STYLE
|
||||
|
||||
config USE_EMOTE_MESSAGE_STYLE
|
||||
bool "Emote animation style"
|
||||
depends on BOARD_TYPE_ESP_BOX || BOARD_TYPE_ESP_BOX_3 \
|
||||
depends on BOARD_TYPE_ESP32_S3_BOX || BOARD_TYPE_ESP32_S3_BOX_3 \
|
||||
|| BOARD_TYPE_ESP_VOCAT || BOARD_TYPE_LICHUANG_DEV_S3 || BOARD_TYPE_RYMCU_BIGSMART \
|
||||
|| BOARD_TYPE_ESP_SENSAIRSHUTTLE
|
||||
endchoice
|
||||
@@ -810,7 +817,7 @@ config USE_MULTILINE_CHAT_MESSAGE
|
||||
|
||||
choice WAKE_WORD_TYPE
|
||||
prompt "Wake Word Implementation Type"
|
||||
default USE_AFE_WAKE_WORD if (IDF_TARGET_ESP32S3 || IDF_TARGET_ESP32P4) && SPIRAM
|
||||
default USE_AFE_WAKE_WORD if (IDF_TARGET_ESP32S3 || IDF_TARGET_ESP32P4 || IDF_TARGET_ESP32S31) && SPIRAM
|
||||
default WAKE_WORD_DISABLED
|
||||
help
|
||||
Choose the type of wake word implementation to use
|
||||
@@ -828,15 +835,15 @@ choice WAKE_WORD_TYPE
|
||||
|
||||
config USE_AFE_WAKE_WORD
|
||||
bool "Wakenet model with AFE"
|
||||
depends on (IDF_TARGET_ESP32S3 || IDF_TARGET_ESP32P4) && SPIRAM
|
||||
depends on (IDF_TARGET_ESP32S3 || IDF_TARGET_ESP32P4 || IDF_TARGET_ESP32S31) && SPIRAM
|
||||
help
|
||||
Support AEC if available, requires ESP32 S3 and PSRAM
|
||||
Support AEC if available, requires ESP32-S3, ESP32-P4, or ESP32-S31 and PSRAM
|
||||
|
||||
config USE_CUSTOM_WAKE_WORD
|
||||
bool "Multinet model (Custom Wake Word)"
|
||||
depends on (IDF_TARGET_ESP32S3 || IDF_TARGET_ESP32P4) && SPIRAM
|
||||
depends on (IDF_TARGET_ESP32S3 || IDF_TARGET_ESP32P4 || IDF_TARGET_ESP32S31) && SPIRAM
|
||||
help
|
||||
Requires ESP32 S3 and PSRAM
|
||||
Requires ESP32-S3, ESP32-P4, or ESP32-S31 and PSRAM
|
||||
|
||||
endchoice
|
||||
|
||||
@@ -882,20 +889,20 @@ config WAKE_WORD_DETECTION_IN_LISTENING
|
||||
config USE_AUDIO_PROCESSOR
|
||||
bool "Enable AFE Audio Processing"
|
||||
default y
|
||||
depends on (IDF_TARGET_ESP32S3 || IDF_TARGET_ESP32P4) && SPIRAM
|
||||
depends on (IDF_TARGET_ESP32S3 || IDF_TARGET_ESP32P4 || IDF_TARGET_ESP32S31) && SPIRAM
|
||||
help
|
||||
Enable the shared AFE uplink path with AEC and VAD. Noise suppression
|
||||
is not enabled because this project does not provide an NSNet model.
|
||||
Requires ESP32-S3 or ESP32-P4 with PSRAM.
|
||||
Requires ESP32-S3, ESP32-P4, or ESP32-S31 with PSRAM.
|
||||
|
||||
config USE_DEVICE_AEC
|
||||
bool "Enable Device-Side AEC"
|
||||
default n
|
||||
depends on USE_AUDIO_PROCESSOR && (BOARD_TYPE_ESP_BOX_3 || BOARD_TYPE_ESP_BOX || BOARD_TYPE_ESP_BOX_LITE \
|
||||
|| BOARD_TYPE_LICHUANG_DEV_S3 || BOARD_TYPE_RYMCU_BIGSMART || BOARD_TYPE_ESP_KORVO2_V3 || BOARD_TYPE_WAVESHARE_ESP32_S3_TOUCH_AMOLED_1_75|| BOARD_TYPE_WAVESHARE_ESP32_S3_TOUCH_AMOLED_1_75C || BOARD_TYPE_WAVESHARE_ESP32_S3_TOUCH_LCD_1_83\
|
||||
depends on USE_AUDIO_PROCESSOR && (BOARD_TYPE_ESP32_S3_BOX_3 || BOARD_TYPE_ESP32_S3_BOX || BOARD_TYPE_ESP32_S3_BOX_LITE \
|
||||
|| BOARD_TYPE_LICHUANG_DEV_S3 || BOARD_TYPE_RYMCU_BIGSMART || BOARD_TYPE_ESP32_S3_KORVO_2_V3 || BOARD_TYPE_WAVESHARE_ESP32_S3_TOUCH_AMOLED_1_75|| BOARD_TYPE_WAVESHARE_ESP32_S3_TOUCH_AMOLED_1_75C || BOARD_TYPE_WAVESHARE_ESP32_S3_TOUCH_LCD_1_83\
|
||||
|| BOARD_TYPE_WAVESHARE_ESP32_S3_TOUCH_AMOLED_2_06 || BOARD_TYPE_WAVESHARE_ESP32_S3_TOUCH_LCD_4B || BOARD_TYPE_WAVESHARE_ESP32_P4_WIFI6_TOUCH_LCD_4B || BOARD_TYPE_WAVESHARE_ESP32_P4_WIFI6_TOUCH_LCD_4_3 || BOARD_TYPE_WAVESHARE_ESP32_P4_WIFI6_TOUCH_LCD_5 \
|
||||
|| BOARD_TYPE_WAVESHARE_ESP32_P4_WIFI6_TOUCH_LCD_7B \
|
||||
|| BOARD_TYPE_WAVESHARE_ESP32_P4_WIFI6_TOUCH_LCD_3_4C || BOARD_TYPE_WAVESHARE_ESP32_P4_WIFI6_TOUCH_LCD_4C || BOARD_TYPE_ESP_S3_LCD_EV_Board_2 || BOARD_TYPE_YUNLIAO_S3 \
|
||||
|| BOARD_TYPE_WAVESHARE_ESP32_P4_WIFI6_TOUCH_LCD_3_4C || BOARD_TYPE_WAVESHARE_ESP32_P4_WIFI6_TOUCH_LCD_4C || BOARD_TYPE_ESP32_S3_LCD_EV_BOARD_2 || BOARD_TYPE_YUNLIAO_S3 \
|
||||
|| BOARD_TYPE_WAVESHARE_ESP32_P4_WIFI6_TOUCH_LCD_7 || BOARD_TYPE_WAVESHARE_ESP32_P4_WIFI6_TOUCH_LCD_8 || BOARD_TYPE_WAVESHARE_ESP32_P4_WIFI6_TOUCH_LCD_10_1 \
|
||||
|| BOARD_TYPE_ESP_VOCAT || BOARD_TYPE_WAVESHARE_ESP32_S3_TOUCH_LCD_3_49 || BOARD_TYPE_WAVESHARE_ESP32_S3_TOUCH_LCD_3_49_V2 || BOARD_TYPE_WAVESHARE_ESP32_S3_RLCD_4_2 || BOARD_TYPE_WAVESHARE_ESP32_S3_TOUCH_LCD_1_85B || BOARD_TYPE_ZHENGCHEN_CAM || BOARD_TYPE_ZHENGCHEN_CAM_ML307 \
|
||||
|| BOARD_TYPE_WAVESHARE_ESP32_S3_TOUCH_LCD_4_3C || BOARD_TYPE_WAVESHARE_ESP32_S3_TOUCH_LCD_1_54 || BOARD_TYPE_WAVESHARE_ESP32_S3_LCD_0_85 || BOARD_TYPE_AI_VOX3 || BOARD_TYPE_WAVESHARE_ESP32_S3_TOUCH_AMOLED_1_43C || BOARD_TYPE_ATK_DNESP32S3_BOX3)
|
||||
@@ -923,13 +930,8 @@ menu "WiFi Configuration Method"
|
||||
default y
|
||||
help
|
||||
Use WiFi Hotspot to transmit WiFi configuration data
|
||||
config USE_ACOUSTIC_WIFI_PROVISIONING
|
||||
bool "Acoustic"
|
||||
help
|
||||
Use audio signal to transmit WiFi configuration data
|
||||
|
||||
config USE_ESP_BLUFI_WIFI_PROVISIONING
|
||||
bool "Esp Blufi"
|
||||
bool "ESP-BluFi"
|
||||
select BT_ENABLED
|
||||
select BT_BLE_42_FEATURES_SUPPORTED
|
||||
select BT_BLE_BLUFI_ENABLE
|
||||
|
||||
@@ -11,7 +11,7 @@ engine.
|
||||
|
||||
| Target | Engine | Wake word | Uplink processing |
|
||||
| --- | --- | --- | --- |
|
||||
| ESP32-S3 / ESP32-P4 | `AfeAudioEngine` | WakeNet inside AFE, or MultiNet fed from AFE output | FD AEC + VAD when audio processing is enabled |
|
||||
| ESP32-S3 / ESP32-P4 / ESP32-S31 | `AfeAudioEngine` | WakeNet inside AFE, or MultiNet fed from AFE output | FD AEC + VAD when audio processing is enabled |
|
||||
| ESP32 / ESP32-C3 / ESP32-C5 / ESP32-C6 | `LiteAudioEngine` | Standalone WakeNet when configured | Raw mono PCM |
|
||||
|
||||
`AfeAudioEngine` owns a single FD AFE instance. WakeNet and voice uplink share
|
||||
@@ -66,7 +66,7 @@ flowchart LR
|
||||
- `AudioInputTask` reads codec input and feeds the selected engine.
|
||||
- `AudioOutputTask` drains decoded PCM to the codec output.
|
||||
- `OpusCodecTask` encodes uplink PCM and decodes downlink packets.
|
||||
- `AfeAudioEngine` has its own AFE fetch task on S3/P4.
|
||||
- `AfeAudioEngine` has its own AFE fetch task on S3/P4/S31.
|
||||
|
||||
The audio power timer still enables and disables codec ADC/DAC channels based on
|
||||
activity; the engine refactor does not change that policy.
|
||||
|
||||
@@ -22,7 +22,7 @@
|
||||
.self_delimited = false, \
|
||||
}
|
||||
|
||||
#if CONFIG_IDF_TARGET_ESP32S3 || CONFIG_IDF_TARGET_ESP32P4
|
||||
#if CONFIG_IDF_TARGET_ESP32S3 || CONFIG_IDF_TARGET_ESP32P4 || CONFIG_IDF_TARGET_ESP32S31
|
||||
#include "engines/afe_audio_engine.h"
|
||||
#else
|
||||
#include "engines/lite_audio_engine.h"
|
||||
@@ -85,7 +85,7 @@ void AudioService::Initialize(AudioCodec* codec) {
|
||||
}
|
||||
}
|
||||
|
||||
#if CONFIG_IDF_TARGET_ESP32S3 || CONFIG_IDF_TARGET_ESP32P4
|
||||
#if CONFIG_IDF_TARGET_ESP32S3 || CONFIG_IDF_TARGET_ESP32P4 || CONFIG_IDF_TARGET_ESP32S31
|
||||
audio_engine_ = std::make_unique<AfeAudioEngine>();
|
||||
#else
|
||||
audio_engine_ = std::make_unique<LiteAudioEngine>();
|
||||
|
||||
@@ -1,6 +1,8 @@
|
||||
#include "es8311_audio_codec.h"
|
||||
|
||||
#include <esp_log.h>
|
||||
#include <freertos/FreeRTOS.h>
|
||||
#include <freertos/task.h>
|
||||
|
||||
#define TAG "Es8311AudioCodec"
|
||||
|
||||
@@ -36,6 +38,7 @@ Es8311AudioCodec::Es8311AudioCodec(void* i2c_master_handle, i2c_port_t i2c_port,
|
||||
};
|
||||
ctrl_if_ = audio_codec_new_i2c_ctrl(&i2c_cfg);
|
||||
assert(ctrl_if_ != NULL);
|
||||
ResetCodec();
|
||||
|
||||
gpio_if_ = audio_codec_new_gpio();
|
||||
assert(gpio_if_ != NULL);
|
||||
@@ -58,6 +61,17 @@ Es8311AudioCodec::Es8311AudioCodec(void* i2c_master_handle, i2c_port_t i2c_port,
|
||||
}
|
||||
}
|
||||
|
||||
void Es8311AudioCodec::ResetCodec() {
|
||||
// Hold the ES8311 digital blocks in reset for several milliseconds, as
|
||||
// recommended by the initialization guide. Normal codec initialization
|
||||
// releases the reset and starts the state machine.
|
||||
uint8_t reset_value = 0x1F;
|
||||
ESP_ERROR_CHECK(static_cast<esp_err_t>(
|
||||
ctrl_if_->write_reg(ctrl_if_, 0x00, 1, &reset_value, 1)));
|
||||
vTaskDelay(pdMS_TO_TICKS(5));
|
||||
ESP_LOGI(TAG, "ES8311 software reset complete");
|
||||
}
|
||||
|
||||
Es8311AudioCodec::~Es8311AudioCodec() {
|
||||
esp_codec_dev_delete(dev_);
|
||||
|
||||
|
||||
@@ -23,6 +23,7 @@ private:
|
||||
std::mutex data_if_mutex_;
|
||||
|
||||
void CreateDuplexChannels(gpio_num_t mclk, gpio_num_t bclk, gpio_num_t ws, gpio_num_t dout, gpio_num_t din);
|
||||
void ResetCodec();
|
||||
void UpdateDeviceState();
|
||||
|
||||
virtual int Read(int16_t* dest, int samples) override;
|
||||
@@ -39,4 +40,4 @@ public:
|
||||
virtual void EnableOutput(bool enable) override;
|
||||
};
|
||||
|
||||
#endif // _ES8311_AUDIO_CODEC_H
|
||||
#endif // _ES8311_AUDIO_CODEC_H
|
||||
|
||||
@@ -1,12 +0,0 @@
|
||||
{
|
||||
"target": "esp32s3",
|
||||
"builds": [
|
||||
{
|
||||
"name": "aipi-lite",
|
||||
"sdkconfig_append": [
|
||||
"CONFIG_ESPTOOLPY_FLASHSIZE_16MB=y",
|
||||
"CONFIG_PARTITION_TABLE_CUSTOM_FILENAME=\"partitions/v2/16m.csv\""
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -1,17 +0,0 @@
|
||||
{
|
||||
"target": "esp32s3",
|
||||
"builds": [
|
||||
{
|
||||
"name": "aipi-lite_en",
|
||||
"sdkconfig_append": [
|
||||
"CONFIG_ESPTOOLPY_FLASHSIZE_16MB=y",
|
||||
"CONFIG_PARTITION_TABLE_CUSTOM_FILENAME=\"partitions/v2/16m.csv\"",
|
||||
"CONFIG_LANGUAGE_EN_US=y",
|
||||
"CONFIG_SR_WN_WN9_NIHAOXIAOZHI_TTS=n",
|
||||
"CONFIG_SR_WN_WN9_JARVIS_TTS=y",
|
||||
"CONFIG_SR_WN_WN9_SOPHIA_TTS=y"
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
+3
-1
@@ -1,4 +1,6 @@
|
||||
{
|
||||
"manufacturer": "alientek",
|
||||
"type": "atk-dnesp32s3-box",
|
||||
"target": "esp32s3",
|
||||
"builds": [
|
||||
{
|
||||
@@ -8,4 +10,4 @@
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
+3
-1
@@ -1,4 +1,6 @@
|
||||
{
|
||||
"manufacturer": "alientek",
|
||||
"type": "atk-dnesp32s3-box0",
|
||||
"target": "esp32s3",
|
||||
"builds": [
|
||||
{
|
||||
@@ -6,4 +8,4 @@
|
||||
"sdkconfig_append": []
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
+3
-1
@@ -1,4 +1,6 @@
|
||||
{
|
||||
"manufacturer": "alientek",
|
||||
"type": "atk-dnesp32s3-box2-4g",
|
||||
"target": "esp32s3",
|
||||
"builds": [
|
||||
{
|
||||
@@ -6,4 +8,4 @@
|
||||
"sdkconfig_append": []
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
+3
-1
@@ -1,4 +1,6 @@
|
||||
{
|
||||
"manufacturer": "alientek",
|
||||
"type": "atk-dnesp32s3-box2-wifi",
|
||||
"target": "esp32s3",
|
||||
"builds": [
|
||||
{
|
||||
@@ -6,4 +8,4 @@
|
||||
"sdkconfig_append": []
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
+2
@@ -1,4 +1,6 @@
|
||||
{
|
||||
"manufacturer": "alientek",
|
||||
"type": "atk-dnesp32s3-box3",
|
||||
"target": "esp32s3",
|
||||
"builds": [
|
||||
{
|
||||
+3
-1
@@ -1,4 +1,6 @@
|
||||
{
|
||||
"manufacturer": "alientek",
|
||||
"type": "atk-dnesp32s3",
|
||||
"target": "esp32s3",
|
||||
"builds": [
|
||||
{
|
||||
@@ -10,4 +12,4 @@
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,6 @@
|
||||
{
|
||||
"manufacturer": "alientek",
|
||||
"type": "atk-dnesp32s3m-4g",
|
||||
"target": "esp32s3",
|
||||
"builds": []
|
||||
}
|
||||
@@ -0,0 +1,6 @@
|
||||
{
|
||||
"manufacturer": "alientek",
|
||||
"type": "atk-dnesp32s3m-wifi",
|
||||
"target": "esp32s3",
|
||||
"builds": []
|
||||
}
|
||||
@@ -1,4 +1,5 @@
|
||||
{
|
||||
"type": "bread-compact-esp32-lcd",
|
||||
"target": "esp32",
|
||||
"builds": [
|
||||
{
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
{
|
||||
"type": "bread-compact-esp32",
|
||||
"target": "esp32",
|
||||
"builds": [
|
||||
{
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
{
|
||||
"type": "bread-compact-ml307",
|
||||
"target": "esp32s3",
|
||||
"builds": [
|
||||
{
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
{
|
||||
"type": "bread-compact-nt26",
|
||||
"target": "esp32s3",
|
||||
"builds": [
|
||||
{
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
{
|
||||
"type": "bread-compact-wifi",
|
||||
"target": "esp32s3",
|
||||
"builds": [
|
||||
{
|
||||
|
||||
@@ -1,375 +0,0 @@
|
||||
#include "afsk_demod.h"
|
||||
#include <cstring>
|
||||
#include <algorithm>
|
||||
#include "esp_log.h"
|
||||
#include "display.h"
|
||||
#include "ssid_manager.h"
|
||||
|
||||
#ifndef M_PI
|
||||
#define M_PI 3.14159265358979323846
|
||||
#endif
|
||||
|
||||
namespace audio_wifi_config
|
||||
{
|
||||
static const char *kLogTag = "AUDIO_WIFI_CONFIG";
|
||||
|
||||
void ReceiveWifiCredentialsFromAudio(Application *app,
|
||||
WifiManager *wifi_manager,
|
||||
Display *display,
|
||||
size_t input_channels
|
||||
)
|
||||
{
|
||||
const int kInputSampleRate = 16000; // Input sampling rate
|
||||
const float kDownsampleStep = static_cast<float>(kInputSampleRate) / static_cast<float>(kAudioSampleRate); // Downsampling step
|
||||
std::vector<int16_t> audio_data;
|
||||
AudioSignalProcessor signal_processor(kAudioSampleRate, kMarkFrequency, kSpaceFrequency, kBitRate, kWindowSize);
|
||||
AudioDataBuffer data_buffer;
|
||||
|
||||
while (true)
|
||||
{
|
||||
// 检查Application状态,只有在WiFi配置模式下才处理音频
|
||||
if (app->GetDeviceState() != kDeviceStateWifiConfiguring) {
|
||||
// 不在WiFi配置状态,休眠100ms后再检查
|
||||
vTaskDelay(pdMS_TO_TICKS(100));
|
||||
continue;
|
||||
}
|
||||
|
||||
if (!app->GetAudioService().ReadAudioData(audio_data, 16000, 480)) { // 16kHz, 480 samples corresponds to 30ms data
|
||||
// 读取音频失败,短暂延迟后重试
|
||||
ESP_LOGI(kLogTag, "Failed to read audio data, retrying.");
|
||||
vTaskDelay(pdMS_TO_TICKS(10));
|
||||
continue;
|
||||
}
|
||||
|
||||
if (input_channels == 2) { // 如果是双声道输入,转换为单声道
|
||||
auto mono_data = std::vector<int16_t>(audio_data.size() / 2);
|
||||
for (size_t i = 0, j = 0; i < mono_data.size(); ++i, j += 2) {
|
||||
mono_data[i] = audio_data[j];
|
||||
}
|
||||
audio_data = std::move(mono_data);
|
||||
}
|
||||
|
||||
// Downsample the audio data
|
||||
std::vector<float> downsampled_data;
|
||||
size_t last_index = 0;
|
||||
|
||||
if (kDownsampleStep > 1.0f) {
|
||||
downsampled_data.reserve(audio_data.size() / static_cast<size_t>(kDownsampleStep));
|
||||
for (size_t i = 0; i < audio_data.size(); ++i) {
|
||||
size_t sample_index = static_cast<size_t>(i / kDownsampleStep);
|
||||
if ((sample_index + 1) > last_index) {
|
||||
downsampled_data.push_back(static_cast<float>(audio_data[i]));
|
||||
last_index = sample_index + 1;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
downsampled_data.reserve(audio_data.size());
|
||||
for (int16_t sample : audio_data) {
|
||||
downsampled_data.push_back(static_cast<float>(sample));
|
||||
}
|
||||
}
|
||||
|
||||
// Process audio samples to get probability data
|
||||
auto probabilities = signal_processor.ProcessAudioSamples(downsampled_data);
|
||||
|
||||
// Feed probability data to the data buffer
|
||||
if (data_buffer.ProcessProbabilityData(probabilities, 0.5f)) {
|
||||
// If complete data was received, extract WiFi credentials
|
||||
if (data_buffer.decoded_text.has_value()) {
|
||||
ESP_LOGI(kLogTag, "Received text data: %s", data_buffer.decoded_text->c_str());
|
||||
display->SetChatMessage("system", data_buffer.decoded_text->c_str());
|
||||
|
||||
// Split SSID and password by newline character
|
||||
std::string wifi_ssid, wifi_password;
|
||||
size_t newline_position = data_buffer.decoded_text->find('\n');
|
||||
if (newline_position != std::string::npos) {
|
||||
wifi_ssid = data_buffer.decoded_text->substr(0, newline_position);
|
||||
wifi_password = data_buffer.decoded_text->substr(newline_position + 1);
|
||||
ESP_LOGI(kLogTag, "WiFi SSID: %s, Password: %s", wifi_ssid.c_str(), wifi_password.c_str());
|
||||
} else {
|
||||
ESP_LOGE(kLogTag, "Invalid data format, no newline character found");
|
||||
continue;
|
||||
}
|
||||
|
||||
// Save WiFi credentials using SsidManager
|
||||
auto& ssid_manager = SsidManager::GetInstance();
|
||||
ssid_manager.AddSsid(wifi_ssid, wifi_password);
|
||||
ESP_LOGI(kLogTag, "WiFi credentials saved successfully");
|
||||
|
||||
// Exit config mode (triggers ConfigModeExit event)
|
||||
wifi_manager->StopConfigAp();
|
||||
|
||||
data_buffer.decoded_text.reset(); // Clear processed data
|
||||
return; // Exit the function
|
||||
}
|
||||
}
|
||||
vTaskDelay(pdMS_TO_TICKS(1)); // 1ms delay
|
||||
}
|
||||
}
|
||||
|
||||
// Default start and end transmission identifiers
|
||||
// \x01\x02 = 00000001 00000010
|
||||
const std::vector<uint8_t> kDefaultStartTransmissionPattern = {
|
||||
0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0};
|
||||
|
||||
// \x03\x04 = 00000011 00000100
|
||||
const std::vector<uint8_t> kDefaultEndTransmissionPattern = {
|
||||
0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 0, 0};
|
||||
|
||||
// FrequencyDetector implementation
|
||||
FrequencyDetector::FrequencyDetector(float frequency, size_t window_size)
|
||||
: frequency_(frequency), window_size_(window_size) {
|
||||
frequency_bin_ = std::floor(frequency_ * static_cast<float>(window_size_));
|
||||
angular_frequency_ = 2.0f * M_PI * frequency_;
|
||||
cos_coefficient_ = std::cos(angular_frequency_);
|
||||
sin_coefficient_ = std::sin(angular_frequency_);
|
||||
filter_coefficient_ = 2.0f * cos_coefficient_;
|
||||
|
||||
// Initialize state buffer
|
||||
state_buffer_.push_back(0.0f);
|
||||
state_buffer_.push_back(0.0f);
|
||||
}
|
||||
|
||||
void FrequencyDetector::Reset() {
|
||||
state_buffer_.clear();
|
||||
state_buffer_.push_back(0.0f);
|
||||
state_buffer_.push_back(0.0f);
|
||||
}
|
||||
|
||||
void FrequencyDetector::ProcessSample(float sample) {
|
||||
if (state_buffer_.size() < 2) {
|
||||
return;
|
||||
}
|
||||
|
||||
float s_minus_2 = state_buffer_.front(); // S[-2]
|
||||
state_buffer_.pop_front();
|
||||
float s_minus_1 = state_buffer_.front(); // S[-1]
|
||||
state_buffer_.pop_front();
|
||||
|
||||
float s_current = sample + filter_coefficient_ * s_minus_1 - s_minus_2;
|
||||
|
||||
state_buffer_.push_back(s_minus_1); // Put S[-1] back
|
||||
state_buffer_.push_back(s_current); // Add new S[0]
|
||||
}
|
||||
|
||||
float FrequencyDetector::GetAmplitude() const {
|
||||
if (state_buffer_.size() < 2) {
|
||||
return 0.0f;
|
||||
}
|
||||
|
||||
float s_minus_1 = state_buffer_[1]; // S[-1]
|
||||
float s_minus_2 = state_buffer_[0]; // S[-2]
|
||||
float real_part = cos_coefficient_ * s_minus_1 - s_minus_2; // Real part
|
||||
float imaginary_part = sin_coefficient_ * s_minus_1; // Imaginary part
|
||||
|
||||
return std::sqrt(real_part * real_part + imaginary_part * imaginary_part) /
|
||||
(static_cast<float>(window_size_) / 2.0f);
|
||||
}
|
||||
|
||||
// AudioSignalProcessor implementation
|
||||
AudioSignalProcessor::AudioSignalProcessor(size_t sample_rate, size_t mark_frequency, size_t space_frequency,
|
||||
size_t bit_rate, size_t window_size)
|
||||
: input_buffer_size_(window_size), output_sample_count_(0) {
|
||||
if (sample_rate % bit_rate != 0) {
|
||||
// On ESP32 we can continue execution, but log the error
|
||||
ESP_LOGW(kLogTag, "Sample rate %zu is not divisible by bit rate %zu", sample_rate, bit_rate);
|
||||
}
|
||||
|
||||
float normalized_mark_freq = static_cast<float>(mark_frequency) / static_cast<float>(sample_rate);
|
||||
float normalized_space_freq = static_cast<float>(space_frequency) / static_cast<float>(sample_rate);
|
||||
|
||||
mark_detector_ = std::make_unique<FrequencyDetector>(normalized_mark_freq, window_size);
|
||||
space_detector_ = std::make_unique<FrequencyDetector>(normalized_space_freq, window_size);
|
||||
|
||||
samples_per_bit_ = sample_rate / bit_rate; // Number of samples per bit
|
||||
}
|
||||
|
||||
std::vector<float> AudioSignalProcessor::ProcessAudioSamples(const std::vector<float> &samples) {
|
||||
std::vector<float> result;
|
||||
|
||||
for (float sample : samples) {
|
||||
if (input_buffer_.size() < input_buffer_size_) {
|
||||
input_buffer_.push_back(sample); // Just add, don't process yet
|
||||
} else {
|
||||
// Input buffer is full, process the data
|
||||
input_buffer_.pop_front(); // Remove oldest sample
|
||||
input_buffer_.push_back(sample); // Add new sample
|
||||
output_sample_count_++;
|
||||
|
||||
if (output_sample_count_ >= samples_per_bit_) {
|
||||
// Process all samples in the window using Goertzel algorithm
|
||||
for (float window_sample : input_buffer_) {
|
||||
mark_detector_->ProcessSample(window_sample);
|
||||
space_detector_->ProcessSample(window_sample);
|
||||
}
|
||||
|
||||
float mark_amplitude = mark_detector_->GetAmplitude(); // Mark amplitude
|
||||
float space_amplitude = space_detector_->GetAmplitude(); // Space amplitude
|
||||
|
||||
// Avoid division by zero
|
||||
float mark_probability = mark_amplitude /
|
||||
(space_amplitude + mark_amplitude + std::numeric_limits<float>::epsilon());
|
||||
result.push_back(mark_probability);
|
||||
|
||||
// Reset detector windows
|
||||
mark_detector_->Reset();
|
||||
space_detector_->Reset();
|
||||
output_sample_count_ = 0; // Reset output counter
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
// AudioDataBuffer implementation
|
||||
AudioDataBuffer::AudioDataBuffer()
|
||||
: current_state_(DataReceptionState::kInactive),
|
||||
start_of_transmission_(kDefaultStartTransmissionPattern),
|
||||
end_of_transmission_(kDefaultEndTransmissionPattern),
|
||||
enable_checksum_validation_(true) {
|
||||
identifier_buffer_size_ = std::max(start_of_transmission_.size(), end_of_transmission_.size());
|
||||
max_bit_buffer_size_ = 776; // Preset bit buffer size, 776 bits = (32 + 1 + 63 + 1) * 8 = 776
|
||||
|
||||
bit_buffer_.reserve(max_bit_buffer_size_);
|
||||
}
|
||||
|
||||
AudioDataBuffer::AudioDataBuffer(size_t max_byte_size, const std::vector<uint8_t> &start_identifier,
|
||||
const std::vector<uint8_t> &end_identifier, bool enable_checksum)
|
||||
: current_state_(DataReceptionState::kInactive),
|
||||
start_of_transmission_(start_identifier),
|
||||
end_of_transmission_(end_identifier),
|
||||
enable_checksum_validation_(enable_checksum) {
|
||||
identifier_buffer_size_ = std::max(start_of_transmission_.size(), end_of_transmission_.size());
|
||||
max_bit_buffer_size_ = max_byte_size * 8; // Bit buffer size in bytes
|
||||
|
||||
bit_buffer_.reserve(max_bit_buffer_size_);
|
||||
}
|
||||
|
||||
uint8_t AudioDataBuffer::CalculateChecksum(const std::string &text) {
|
||||
uint8_t checksum = 0;
|
||||
for (char character : text) {
|
||||
checksum += static_cast<uint8_t>(character);
|
||||
}
|
||||
return checksum;
|
||||
}
|
||||
|
||||
void AudioDataBuffer::ClearBuffers() {
|
||||
identifier_buffer_.clear();
|
||||
bit_buffer_.clear();
|
||||
}
|
||||
|
||||
bool AudioDataBuffer::ProcessProbabilityData(const std::vector<float> &probabilities, float threshold) {
|
||||
for (float probability : probabilities) {
|
||||
uint8_t bit = (probability > threshold) ? 1 : 0;
|
||||
|
||||
if (identifier_buffer_.size() >= identifier_buffer_size_) {
|
||||
identifier_buffer_.pop_front(); // Maintain buffer size
|
||||
}
|
||||
identifier_buffer_.push_back(bit);
|
||||
|
||||
// Process received bit based on state machine
|
||||
switch (current_state_) {
|
||||
case DataReceptionState::kInactive:
|
||||
if (identifier_buffer_.size() >= start_of_transmission_.size()) {
|
||||
current_state_ = DataReceptionState::kWaiting; // Enter waiting state
|
||||
ESP_LOGI(kLogTag, "Entering Waiting state");
|
||||
}
|
||||
break;
|
||||
|
||||
case DataReceptionState::kWaiting:
|
||||
// Waiting state, possibly waiting for transmission end
|
||||
if (identifier_buffer_.size() >= start_of_transmission_.size()) {
|
||||
std::vector<uint8_t> identifier_snapshot(identifier_buffer_.begin(), identifier_buffer_.end());
|
||||
if (identifier_snapshot == start_of_transmission_)
|
||||
{
|
||||
ClearBuffers(); // Clear buffers
|
||||
current_state_ = DataReceptionState::kReceiving; // Enter receiving state
|
||||
ESP_LOGI(kLogTag, "Entering Receiving state");
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
case DataReceptionState::kReceiving:
|
||||
bit_buffer_.push_back(bit);
|
||||
if (identifier_buffer_.size() >= end_of_transmission_.size()) {
|
||||
std::vector<uint8_t> identifier_snapshot(identifier_buffer_.begin(), identifier_buffer_.end());
|
||||
if (identifier_snapshot == end_of_transmission_) {
|
||||
current_state_ = DataReceptionState::kInactive; // Enter inactive state
|
||||
|
||||
// Convert bits to bytes
|
||||
std::vector<uint8_t> bytes = ConvertBitsToBytes(bit_buffer_);
|
||||
|
||||
uint8_t received_checksum = 0;
|
||||
size_t minimum_length = 0;
|
||||
|
||||
if (enable_checksum_validation_) {
|
||||
// If checksum is required, last byte is checksum
|
||||
minimum_length = 1 + start_of_transmission_.size() / 8;
|
||||
if (bytes.size() >= minimum_length)
|
||||
{
|
||||
received_checksum = bytes[bytes.size() - start_of_transmission_.size() / 8 - 1];
|
||||
}
|
||||
} else {
|
||||
minimum_length = start_of_transmission_.size() / 8;
|
||||
}
|
||||
|
||||
if (bytes.size() < minimum_length) {
|
||||
ClearBuffers();
|
||||
ESP_LOGW(kLogTag, "Data too short, clearing buffer");
|
||||
return false; // Data too short, return failure
|
||||
}
|
||||
|
||||
// Extract text data (remove trailing identifier part)
|
||||
std::vector<uint8_t> text_bytes(
|
||||
bytes.begin(), bytes.begin() + bytes.size() - minimum_length);
|
||||
|
||||
std::string result(text_bytes.begin(), text_bytes.end());
|
||||
|
||||
// Validate checksum if required
|
||||
if (enable_checksum_validation_) {
|
||||
uint8_t calculated_checksum = CalculateChecksum(result);
|
||||
if (calculated_checksum != received_checksum) {
|
||||
// Checksum mismatch
|
||||
ESP_LOGW(kLogTag, "Checksum mismatch: expected %d, got %d",
|
||||
received_checksum, calculated_checksum);
|
||||
ClearBuffers();
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
ClearBuffers();
|
||||
decoded_text = result;
|
||||
return true; // Return success
|
||||
} else if (bit_buffer_.size() >= max_bit_buffer_size_) {
|
||||
// If not end identifier and bit buffer is full, reset
|
||||
ClearBuffers();
|
||||
ESP_LOGW(kLogTag, "Buffer overflow, clearing buffer");
|
||||
current_state_ = DataReceptionState::kInactive; // Reset state machine
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
std::vector<uint8_t> AudioDataBuffer::ConvertBitsToBytes(const std::vector<uint8_t> &bits) const {
|
||||
std::vector<uint8_t> bytes;
|
||||
|
||||
// Ensure number of bits is a multiple of 8
|
||||
size_t complete_bytes_count = bits.size() / 8;
|
||||
bytes.reserve(complete_bytes_count);
|
||||
|
||||
for (size_t i = 0; i < complete_bytes_count; ++i) {
|
||||
uint8_t byte_value = 0;
|
||||
for (size_t j = 0; j < 8; ++j) {
|
||||
byte_value |= bits[i * 8 + j] << (7 - j);
|
||||
}
|
||||
bytes.push_back(byte_value);
|
||||
}
|
||||
|
||||
return bytes;
|
||||
}
|
||||
}
|
||||
@@ -1,177 +0,0 @@
|
||||
#pragma once
|
||||
|
||||
#include <vector>
|
||||
#include <deque>
|
||||
#include <string>
|
||||
#include <memory>
|
||||
#include <optional>
|
||||
#include <cmath>
|
||||
#include "wifi_manager.h"
|
||||
#include "application.h"
|
||||
|
||||
// Audio signal processing constants for WiFi configuration via audio
|
||||
const size_t kAudioSampleRate = 6400;
|
||||
const size_t kMarkFrequency = 1800;
|
||||
const size_t kSpaceFrequency = 1500;
|
||||
const size_t kBitRate = 100;
|
||||
const size_t kWindowSize = 64;
|
||||
|
||||
namespace audio_wifi_config
|
||||
{
|
||||
// Main function to receive WiFi credentials through audio signal
|
||||
void ReceiveWifiCredentialsFromAudio(Application *app, WifiManager *wifi_manager, Display *display,
|
||||
size_t input_channels = 1);
|
||||
|
||||
/**
|
||||
* Goertzel algorithm implementation for single frequency detection
|
||||
* Used to detect specific audio frequencies in the AFSK demodulation process
|
||||
*/
|
||||
class FrequencyDetector
|
||||
{
|
||||
private:
|
||||
float frequency_; // Target frequency (normalized, i.e., f / fs)
|
||||
size_t window_size_; // Window size for analysis
|
||||
float frequency_bin_; // Frequency bin
|
||||
float angular_frequency_; // Angular frequency
|
||||
float cos_coefficient_; // cos(w)
|
||||
float sin_coefficient_; // sin(w)
|
||||
float filter_coefficient_; // 2 * cos(w)
|
||||
std::deque<float> state_buffer_; // Circular buffer for storing S[-1] and S[-2]
|
||||
|
||||
public:
|
||||
/**
|
||||
* Constructor
|
||||
* @param frequency Normalized frequency (f / fs)
|
||||
* @param window_size Window size for analysis
|
||||
*/
|
||||
FrequencyDetector(float frequency, size_t window_size);
|
||||
|
||||
/**
|
||||
* Reset the detector state
|
||||
*/
|
||||
void Reset();
|
||||
|
||||
/**
|
||||
* Process one audio sample
|
||||
* @param sample Input audio sample
|
||||
*/
|
||||
void ProcessSample(float sample);
|
||||
|
||||
/**
|
||||
* Calculate current amplitude
|
||||
* @return Amplitude value
|
||||
*/
|
||||
float GetAmplitude() const;
|
||||
};
|
||||
|
||||
/**
|
||||
* Audio signal processor for Mark/Space frequency pair detection
|
||||
* Processes audio signals to extract digital data using AFSK demodulation
|
||||
*/
|
||||
class AudioSignalProcessor
|
||||
{
|
||||
private:
|
||||
std::deque<float> input_buffer_; // Input sample buffer
|
||||
size_t input_buffer_size_; // Input buffer size = window size
|
||||
size_t output_sample_count_; // Output sample counter
|
||||
size_t samples_per_bit_; // Samples per bit threshold
|
||||
std::unique_ptr<FrequencyDetector> mark_detector_; // Mark frequency detector
|
||||
std::unique_ptr<FrequencyDetector> space_detector_; // Space frequency detector
|
||||
|
||||
public:
|
||||
/**
|
||||
* Constructor
|
||||
* @param sample_rate Audio sampling rate
|
||||
* @param mark_frequency Mark frequency for digital '1'
|
||||
* @param space_frequency Space frequency for digital '0'
|
||||
* @param bit_rate Data transmission bit rate
|
||||
* @param window_size Analysis window size
|
||||
*/
|
||||
AudioSignalProcessor(size_t sample_rate, size_t mark_frequency, size_t space_frequency,
|
||||
size_t bit_rate, size_t window_size);
|
||||
|
||||
/**
|
||||
* Process input audio samples
|
||||
* @param samples Input audio sample vector
|
||||
* @return Vector of Mark probability values (0.0 to 1.0)
|
||||
*/
|
||||
std::vector<float> ProcessAudioSamples(const std::vector<float> &samples);
|
||||
};
|
||||
|
||||
/**
|
||||
* Data reception state machine states
|
||||
*/
|
||||
enum class DataReceptionState
|
||||
{
|
||||
kInactive, // Waiting for start signal
|
||||
kWaiting, // Detected potential start, waiting for confirmation
|
||||
kReceiving // Actively receiving data
|
||||
};
|
||||
|
||||
/**
|
||||
* Data buffer for managing audio-to-digital data conversion
|
||||
* Handles the complete process from audio signal to decoded text data
|
||||
*/
|
||||
class AudioDataBuffer
|
||||
{
|
||||
private:
|
||||
DataReceptionState current_state_; // Current reception state
|
||||
std::deque<uint8_t> identifier_buffer_; // Buffer for start/end identifier detection
|
||||
size_t identifier_buffer_size_; // Identifier buffer size
|
||||
std::vector<uint8_t> bit_buffer_; // Buffer for storing bit stream
|
||||
size_t max_bit_buffer_size_; // Maximum bit buffer size
|
||||
const std::vector<uint8_t> start_of_transmission_; // Start-of-transmission identifier
|
||||
const std::vector<uint8_t> end_of_transmission_; // End-of-transmission identifier
|
||||
bool enable_checksum_validation_; // Whether to validate checksum
|
||||
|
||||
public:
|
||||
std::optional<std::string> decoded_text; // Successfully decoded text data
|
||||
|
||||
/**
|
||||
* Default constructor using predefined start and end identifiers
|
||||
*/
|
||||
AudioDataBuffer();
|
||||
|
||||
/**
|
||||
* Constructor with custom parameters
|
||||
* @param max_byte_size Expected maximum data size in bytes
|
||||
* @param start_identifier Start-of-transmission identifier
|
||||
* @param end_identifier End-of-transmission identifier
|
||||
* @param enable_checksum Whether to enable checksum validation
|
||||
*/
|
||||
AudioDataBuffer(size_t max_byte_size, const std::vector<uint8_t> &start_identifier,
|
||||
const std::vector<uint8_t> &end_identifier, bool enable_checksum = false);
|
||||
|
||||
/**
|
||||
* Process probability data and attempt to decode
|
||||
* @param probabilities Vector of Mark probabilities
|
||||
* @param threshold Decision threshold for bit detection
|
||||
* @return true if complete data was successfully received and decoded
|
||||
*/
|
||||
bool ProcessProbabilityData(const std::vector<float> &probabilities, float threshold = 0.5f);
|
||||
|
||||
/**
|
||||
* Calculate checksum for ASCII text
|
||||
* @param text Input text string
|
||||
* @return Checksum value (0-255)
|
||||
*/
|
||||
static uint8_t CalculateChecksum(const std::string &text);
|
||||
|
||||
private:
|
||||
/**
|
||||
* Convert bit vector to byte vector
|
||||
* @param bits Input bit vector
|
||||
* @return Converted byte vector
|
||||
*/
|
||||
std::vector<uint8_t> ConvertBitsToBytes(const std::vector<uint8_t> &bits) const;
|
||||
|
||||
/**
|
||||
* Clear all buffers and reset state
|
||||
*/
|
||||
void ClearBuffers();
|
||||
};
|
||||
|
||||
// Default start and end transmission identifiers
|
||||
extern const std::vector<uint8_t> kDefaultStartTransmissionPattern;
|
||||
extern const std::vector<uint8_t> kDefaultEndTransmissionPattern;
|
||||
}
|
||||
@@ -236,6 +236,7 @@ std::string EthernetBoard::GetEthernetMacAddress() {
|
||||
std::string EthernetBoard::GetBoardJson() {
|
||||
std::string json = R"({"type":")" + std::string(BOARD_TYPE) + R"(",)";
|
||||
json += R"("name":")" + std::string(BOARD_NAME) + R"(",)";
|
||||
json += R"("manufacturer":")" + std::string(BOARD_MANUFACTURER) + R"(",)";
|
||||
json += R"("network":"ethernet",)";
|
||||
if (!ip_address_.empty()) {
|
||||
json += R"("ip":")" + ip_address_ + R"(",)";
|
||||
|
||||
@@ -169,6 +169,7 @@ std::string Ml307Board::GetBoardJson() {
|
||||
// Set the board type for OTA
|
||||
std::string board_json = std::string("{\"type\":\"" BOARD_TYPE "\",");
|
||||
board_json += "\"name\":\"" BOARD_NAME "\",";
|
||||
board_json += "\"manufacturer\":\"" BOARD_MANUFACTURER "\",";
|
||||
board_json += "\"revision\":\"" + modem_->GetModuleRevision() + "\",";
|
||||
board_json += "\"carrier\":\"" + modem_->GetCarrierName() + "\",";
|
||||
board_json += "\"csq\":\"" + std::to_string(modem_->GetCsq()) + "\",";
|
||||
|
||||
@@ -186,6 +186,7 @@ std::string Nt26Board::GetBoardJson() {
|
||||
// Set the board type for OTA
|
||||
std::string board_json = std::string("{\"type\":\"" BOARD_TYPE "\",");
|
||||
board_json += "\"name\":\"" BOARD_NAME "\",";
|
||||
board_json += "\"manufacturer\":\"" BOARD_MANUFACTURER "\",";
|
||||
if (modem_) {
|
||||
board_json += "\"revision\":\"" + modem_->GetModuleRevision() + "\",";
|
||||
board_json += "\"carrier\":\"" + modem_->GetCarrierName() + "\",";
|
||||
|
||||
@@ -183,6 +183,7 @@ std::string RndisBoard::GetBoardJson() {
|
||||
|
||||
std::string json = R"({"type":")" + std::string(BOARD_TYPE) + R"(",)";
|
||||
json += R"("name":")" + std::string(BOARD_NAME) + R"(",)";
|
||||
json += R"("manufacturer":")" + std::string(BOARD_MANUFACTURER) + R"(",)";
|
||||
|
||||
json += R"("mac":")" + SystemInfo::GetMacAddress() + R"("})";
|
||||
return json;
|
||||
|
||||
@@ -17,7 +17,6 @@
|
||||
#include <wifi_manager.h>
|
||||
#include <wifi_station.h>
|
||||
#include <ssid_manager.h>
|
||||
#include "afsk_demod.h"
|
||||
#ifdef CONFIG_USE_ESP_BLUFI_WIFI_PROVISIONING
|
||||
#include "blufi.h"
|
||||
#endif
|
||||
@@ -188,21 +187,6 @@ void WifiBoard::StartWifiConfigMode() {
|
||||
// initialize esp-blufi protocol
|
||||
blufi.init();
|
||||
#endif
|
||||
#if CONFIG_USE_ACOUSTIC_WIFI_PROVISIONING
|
||||
// Start acoustic provisioning task
|
||||
auto codec = Board::GetInstance().GetAudioCodec();
|
||||
int channel = codec ? codec->input_channels() : 1;
|
||||
ESP_LOGI(TAG, "Starting acoustic WiFi provisioning, channels: %d", channel);
|
||||
|
||||
xTaskCreate([](void* arg) {
|
||||
auto ch = reinterpret_cast<intptr_t>(arg);
|
||||
auto& app = Application::GetInstance();
|
||||
auto& wifi = WifiManager::GetInstance();
|
||||
auto disp = Board::GetInstance().GetDisplay();
|
||||
audio_wifi_config::ReceiveWifiCredentialsFromAudio(&app, &wifi, disp, ch);
|
||||
vTaskDelete(NULL);
|
||||
}, "acoustic_wifi", 4096, reinterpret_cast<void*>(channel), 2, NULL);
|
||||
#endif
|
||||
}
|
||||
|
||||
void WifiBoard::EnterWifiConfigMode() {
|
||||
@@ -278,6 +262,7 @@ std::string WifiBoard::GetBoardJson() {
|
||||
auto& wifi = WifiManager::GetInstance();
|
||||
std::string json = R"({"type":")" + std::string(BOARD_TYPE) + R"(",)";
|
||||
json += R"("name":")" + std::string(BOARD_NAME) + R"(",)";
|
||||
json += R"("manufacturer":")" + std::string(BOARD_MANUFACTURER) + R"(",)";
|
||||
|
||||
if (!wifi.IsConfigMode()) {
|
||||
json += R"("ssid":")" + wifi.GetSsid() + R"(",)";
|
||||
|
||||
@@ -1,4 +1,6 @@
|
||||
{
|
||||
"manufacturer": "dfrobot",
|
||||
"type": "df-k10",
|
||||
"target": "esp32s3",
|
||||
"builds": [
|
||||
{
|
||||
@@ -1,4 +1,6 @@
|
||||
{
|
||||
"manufacturer": "dfrobot",
|
||||
"type": "df-s3-ai-cam",
|
||||
"target": "esp32s3",
|
||||
"builds": [
|
||||
{
|
||||
@@ -1,4 +1,5 @@
|
||||
{
|
||||
"type": "doit-s3-aibox",
|
||||
"target": "esp32s3",
|
||||
"builds": [
|
||||
{
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
{
|
||||
"type": "du-chatx",
|
||||
"target": "esp32s3",
|
||||
"builds": [
|
||||
{
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
{
|
||||
"type": "electron-bot",
|
||||
"target": "esp32s3",
|
||||
"builds": [
|
||||
{
|
||||
|
||||
@@ -23,10 +23,10 @@ ESP-Hi x 小智内置了一个控制身体运动的 WebUI,请将手机与 ESP-
|
||||
**编译**
|
||||
|
||||
```bash
|
||||
python ./scripts/release.py esp-hi
|
||||
python ./scripts/build.py espressif/esp-hi
|
||||
```
|
||||
|
||||
如需手动编译,请参考 `esp-hi/config.json` 修改 menuconfig 对应选项。
|
||||
如需手动编译,请参考 `main/boards/espressif/esp-hi/config.json` 修改 menuconfig 对应选项。
|
||||
|
||||
**烧录**
|
||||
|
||||
@@ -1,4 +1,6 @@
|
||||
{
|
||||
"manufacturer": "espressif",
|
||||
"type": "esp-hi",
|
||||
"target": "esp32c3",
|
||||
"builds": [
|
||||
{
|
||||
+2
-2
@@ -27,10 +27,10 @@ ESP-SensairShuttle 主控采用乐鑫 ESP32-C5-WROOM-1-N16R8 模组,具有 2.4
|
||||
**编译**
|
||||
|
||||
```bash
|
||||
python ./scripts/release.py esp-sensairshuttle
|
||||
python ./scripts/build.py espressif/esp-sensairshuttle
|
||||
```
|
||||
|
||||
如需手动编译,请参考 `main/boards/esp-sensairshuttle/config.json` 修改 menuconfig 对应选项。
|
||||
如需手动编译,请参考 `main/boards/espressif/esp-sensairshuttle/config.json` 修改 menuconfig 对应选项。
|
||||
|
||||
**烧录**
|
||||
|
||||
+2
-1
@@ -1,4 +1,6 @@
|
||||
{
|
||||
"manufacturer": "espressif",
|
||||
"type": "esp-sensairshuttle",
|
||||
"target": "esp32c5",
|
||||
"builds": [
|
||||
{
|
||||
@@ -18,7 +20,6 @@
|
||||
"CONFIG_SPIRAM_TRY_ALLOCATE_WIFI_LWIP=y",
|
||||
"CONFIG_LWIP_IPV6=n",
|
||||
"CONFIG_USE_ESP_WAKE_WORD=y",
|
||||
"CONFIG_SR_WN_WN9S_HIESP=y",
|
||||
"CONFIG_USE_EMOTE_MESSAGE_STYLE=y",
|
||||
"CONFIG_FLASH_CUSTOM_ASSETS=y",
|
||||
"CONFIG_CUSTOM_ASSETS_FILE=\"https://dl.espressif.com/AE/wn9_nihaoxiaozhi_tts-font_puhui_common_20_4-echoear.bin\"",
|
||||
+3
-1
@@ -1,4 +1,6 @@
|
||||
{
|
||||
"manufacturer": "espressif",
|
||||
"type": "esp-sparkbot",
|
||||
"target": "esp32s3",
|
||||
"builds": [
|
||||
{
|
||||
@@ -10,4 +12,4 @@
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
@@ -1,8 +1,11 @@
|
||||
{
|
||||
"manufacturer": "espressif",
|
||||
"type": "esp-spot",
|
||||
"target": "esp32c5",
|
||||
"builds": [
|
||||
{
|
||||
"name": "esp-spot-c5",
|
||||
"legacy_names": ["esp-spot"],
|
||||
"sdkconfig_append": [
|
||||
"CONFIG_ESPTOOLPY_FLASHSIZE_8MB=y",
|
||||
"CONFIG_PARTITION_TABLE_CUSTOM_FILENAME=\"partitions/v2/8m.csv\"",
|
||||
@@ -11,4 +14,4 @@
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
@@ -1,4 +1,6 @@
|
||||
{
|
||||
"manufacturer": "espressif",
|
||||
"type": "esp-vocat",
|
||||
"target": "esp32s3",
|
||||
"builds": [
|
||||
{
|
||||
@@ -10,4 +12,4 @@
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user