# lingxin_130 **Repository Path**: panzi/lingxin_130 ## Basic Information - **Project Name**: lingxin_130 - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-04-09 - **Last Updated**: 2026-04-09 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README ## 安装指南 1. 根据乐鑫官网[IDF安装配置文档](https://docs.espressif.com/projects/esp-idf/zh_CN/v5.5.1/esp32s3/get-started/index.html)安装对应版本的乐鑫 esp-idf 环境。下载所需版本的 SDK,进行开发、编译、烧录。 2. 在终端管理页面选择对应的设备型号生成配置,将配置替换到 SDK 根目录 `lingxin_app_config.h` 中的默认配置。
```c #define LINGXIN_APP_ID "your_app_id" // 替换为自己的app_id,即租户ID #define LINGXIN_LICENSE "your_license" // 替换为自己的license #define LINGXIN_SN "your_sn" // 替换为自己的sn,即设备号 #define LINGXIN_APP_CODE "your_app_code" // 替换为自己的app_code,也支持agent_code #define LINGXIN_DEVICE_CODE "your_device_code" // 替换为自己的device_code,即设备型号code ``` 3. 通过`idf.py menuconfig`配置 wifi 名称和密码,路径为`sdkconfig`中的`CONFIG_ESP_WIFI_SSID`和`CONFIG_ESP_WIFI_PASSWORD`。 4. (可选)当前唤醒词为`hi~乐鑫`,通过 menuconfig 配置自定义唤醒词,详见[唤醒词配置](https://github.com/espressif/esp-skainet/blob/master/examples/wake_word_detection/wakenet/README_cn.md) 5. (可选)参考[硬件配置指南](#硬件配置指南),进行模组适配。 6. 进行编译烧录。烧录成功后的终端输出日志参考[启动日志示例](#启动日志示例)。 7. 语音唤醒:hi~乐鑫。 【功能开发请参考:[功能介绍文档](https://eagent.edu-aliyun.com/#/help/sdk_features)】 ## 硬件配置指南 可参考乐鑫官方组件库 esp\_board\_manager 组件说明文档中的【[如何创建自定义板子](https://github.com/espressif/esp-gmf/blob/d429ea51f18661792b91fdb44caae1e93587a51a/packages/esp_board_manager/docs/how_to_customize_board_cn.md#%E5%A6%82%E4%BD%95%E5%88%9B%E5%BB%BA%E8%87%AA%E5%AE%9A%E4%B9%89%E6%9D%BF%E5%AD%90)】,或直接按以下简化后流程操作: --- ### 一、创建板子配置文件 1. **新建目录** 在工程目录下创建 `LINGXIN_ESP32_S3/components/your_board_name` 文件夹 2. **创建必需文件** 从官方支持的板子配置中选取与目标硬件最接近的模板,将必需文件`Kconfig`、`board_info.yaml`、`board_peripherals.yaml`、`board_devices.yaml`复制到上一步新建的目录下并进行相应修改: 1. **Kconfig** - 配置编译选项,需更新自定义板子的配置值。 ```makefile // 具体字段值的修改, 该配置将会在 sdkconfig 中启用 config BOARD_XXX_XXX_XXX bool "some desc" depends on IDF_TARGET_ESP32S3 // esp32_s3_lichuang/Kconfig中参考值 config BOARD_ESP32_S3_LICHUANG bool "LiChuang esp32s3 Development Board" depends on IDF_TARGET_ESP32S3 ``` 2. **board\_info.yaml** - 定义板级基础信息,需更新为自定义板子的元数据。 ```yaml // 具体字段值的修改,board 字段值将在 sdkconfig 中启用 board: your_board_name // 与文件夹名保持一致 chip: your_chip_type // 例如esp32_s3 version: 1.0.0 description: "your desc" manufacturer: "ESPRESSIF" // esp32_s3_lichuang 的示例 board: esp32_s3_lichuang chip: esp32s3 version: 1.0.0 description: "LiChuang ESP32S3 Development Board" manufacturer: "ESPRESSIF" ``` 3. **board\_peripherals.yaml** - 修改文件开头的板级基础信息与`board_info.yaml`中保持一致,如 `components/esp32_s3_licuang/board_peripherals.yaml` 中:![image.png](https://img.alicdn.com/imgextra/i2/O1CN01tvRGHd1uRAaafYa03_!!6000000006033-2-tps-1028-116.png) - 配置外设引脚映射及功能参数(如I2C、I2S、GPIO等),需根据目标硬件拓扑调整引脚分配与外设参数。 4. **board\_devices.yaml** - 修改文件开头的板级基础信息与`board_info.yaml`中保持一致,如 `components/esp32_s3_licuang/board_peripherals.yaml` 中:![image.png](https://img.alicdn.com/imgextra/i2/O1CN01tvRGHd1uRAaafYa03_!!6000000006033-2-tps-1028-116.png) - 定义外设驱动与硬件资源的绑定关系(如传感器、存储设备等),需适配新板子的硬件组件及驱动需求。 现有板子配置: * **esp32\_s3\_lichuang**:基于其他配置模板修改得到的用户自定义板子配置,可作为复制和调准的基准。除 esp32\_s3\_lichuang 外, 其他板子均为官方支持配置。 * **官方支持配置**:[ ESP Board Manager 文档](https://components.espressif.com/components/espressif/esp_board_manager/versions/0.5.0/readme?language=zh) 提供标准板子(如ESP32-S3 Korvo2 V3等)的配置模板,可作为复制与调整的基准。 | 板子名称 | 配置文件所处路径 | 芯片 | 音频 | SD卡 | LCD | LCD 触摸 | 摄像头 | 按键 | custom\_device | | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | | Echoear Core Board V1.0 | components/esp\_board\_manager/boards/echoear\_core\_board\_v1\_0 | ESP32-S3 | ✅ ES8311 + ES7210 | ✅ SDMMC | ✅ ST77916 | ✅ CTS816S | \- | \- | \- | | Echoear Core Board V1.2 | components/esp\_board\_manager/boards/echoear\_core\_board\_v1\_2 | ESP32-S3 | ✅ ES8311 + ES7210 | ✅ SDMMC | ✅ ST77916 | ✅ CTS816S | \- | \- | \- | | Dual Eyes Board V1.0 | components/esp\_board\_manager/boards/dual\_eyes\_board\_v1\_0 | ESP32-S3 | ✅ ES8311 | ❌ | ✅ GC9A01 (双) | \- | \- | \- | \- | | ESP-BOX-3 | components/esp\_board\_manager/boards/esp\_box\_3 | ESP32-S3 | ✅ ES8311 + ES7210 | ✅ SDMMC | ✅ ST77916 | ✅ GT911 | \- | \- | \- | | ESP32-S3 Korvo2 V3 | components/esp\_board\_manager/boards/esp32\_s3\_korvo2\_v3 | ESP32-S3 | ✅ ES8311 + ES7210 | ✅ SDMMC | ✅ ILI9341 | ✅ TT21100 | ✅ DVP Camera | ✅ ADC button | \- | | ESP32-S3 Korvo2L | components/esp\_board\_manager/boards/esp32\_s3\_korvo2l | ESP32-S3 | ✅ ES8311 | ✅ SDMMC | ❌ | ❌ | ❌ | ❌ | \- | | Lyrat Mini V1.1 | components/esp\_board\_manager/boards/lyrat\_mini\_v1\_1 | ESP32 | ✅ ES8388 | ✅ SDMMC | \- | \- | \- | ✅ ADC button | \- | | ESP32-C5 Spot | components/esp\_board\_manager/boards/esp32\_c5\_spot | ESP32-C5 | ✅ ES8311 (双) | \- | \- | \- | \- | \- | \- | | ESP32-P4 Function-EV | components/esp\_board\_manager/boards/esp32\_p4\_function\_ev | ESP32-P4 | ✅ ES8311 | ✅ SDMMC | ✅ EK79007 | ✅ GT911 | ✅ CSI Camera | \- | \- | | M5STACK CORES3 | components/esp\_board\_manager/boards/m5stack\_cores3 | ESP32-S3 | ✅ AW88298 + ES7210 | ✅ SDSPI | ✅ ILI9342C | ✅ FT5x06 | ❌ | \- | ✅power\_manager | | esp32\_s3\_lichuang | components/esp32\_s3\_lichuang | ESP32-S3 | ✅ ES8311 + ES7210 | ❌ | ❌ | ❌ | ❌ | ✅ GPIO button | ✅pca9557\_manager | > **注**:'✅' 表示已经支持,'❌' 表示尚未支持,'-' 表示硬件不具备相应的能力 --- ### 二、(可选)配置 custom 类型的device 具体流程可参考[ esp\_board\_manager - custom 自定义设备说明](https://github.com/espressif/esp-gmf/blob/d429ea51f18661792b91fdb44caae1e93587a51a/packages/esp_board_manager/docs/how_to_customize_board_cn.md#custom-%E8%87%AA%E5%AE%9A%E4%B9%89%E8%AE%BE%E5%A4%87%E8%AF%B4%E6%98%8E),已实现的 custom 类型设备可参考: - `LINGXIN_ESP32_S3/components/esp32_s3_lichuang`路径下的`pca9557_manager`; - `LINGXIN_ESP32_S3/components/esp_board_manager/boards/m5stack_cores3`路径下的`power_manager`。 --- ### 三、生成最终配置 1. **设置并激活 esp\_board\_manager 组件** 设置 `IDF_EXTRA_ACTIONS_PATH` 环境变量以包含 ESP Board Manager 目录: **Ubuntu and Mac:** ```bash export IDF_EXTRA_ACTIONS_PATH=components/esp_board_manager ``` **Windows PowerShell:** ```powershell $env:IDF_EXTRA_ACTIONS_PATH = "YOUR_ROOT_PATH/components/esp_board_manager" ``` **Windows 命令提示符 (CMD):** ```cmd set IDF_EXTRA_ACTIONS_PATH=YOUR_ROOT_PATH/components/esp_board_manager ``` 2. **生成最终板子配置** ```c // 1、 列出所有可用板子,观察列出的板子中是否有你刚创建的your_board_name idf.py gen-bmgr-config -l ``` ![image.png](https://img.alicdn.com/imgextra/i2/O1CN01HGc0w21IbHwMFsaOr_!!6000000000911-2-tps-2140-1318.png) ```c // 2、 清除配置残留并选中新的your_board_name配置 idf.py gen-bmgr-config -x idf.py gen-bmgr-config -b your_board_name ``` ![image.png](https://img.alicdn.com/imgextra/i3/O1CN01H8UX8d1vr6dLfgPqd_!!6000000006225-2-tps-2174-542.png) ![image.png](https://img.alicdn.com/imgextra/i1/O1CN01e14k2v26xTv9FvVoY_!!6000000007728-2-tps-2154-1526.png) --- ### 四、更新 sdkconfig 将`sdkconfig.defaults`中生成配置复制到`sdkconfig.bmgr_board.backup`中替换「ESP Board Manager Configuration」下的原设置。将更新后的`sdkconfig.bmgr_board.backup`重命名为`sdkconfig`进行编译。 以`esp32_s3_lichuang`为例,下图为生成的`sdkconfig.defaults`文件和最终启用的`sdkconfig`文件。
### 五、配置软件音频参数 - **配置本地音频播放参数**:在 Menuconfig 界面中,进入 `Component config` -> `ESP Audio Simple Player`,配置音频变换器的输出参数 Bit Depth、Channel 和 Sample Rate 等。 ```makefile # # Audio Simple Player IO Stream # # CONFIG_ESP_AUDIO_SIMPLE_PLAYER_HTTP_EN is not set CONFIG_ESP_AUDIO_SIMPLE_PLAYER_FILE_EN=y # 开启文件读取源 # CONFIG_ESP_AUDIO_SIMPLE_PLAYER_EMBED_FLASH_EN is not set # end of Audio Simple Player IO Stream # # Audio Simple Player Filters # CONFIG_ESP_AUDIO_SIMPLE_PLAYER_RESAMPLE_EN=y # 开启采样率转化节点 CONFIG_AUDIO_SIMPLE_PLAYER_RESAMPLE_DEST_RATE=16000 # 设置目标采样率,即当前硬件支持播放的采样率 CONFIG_ESP_AUDIO_SIMPLE_PLAYER_CH_CVT_EN=y # 开启通道转换节点 CONFIG_AUDIO_SIMPLE_PLAYER_CH_CVT_DEST=4 # 设置目标通道数,即当前硬件支持播放的通道数 CONFIG_ESP_AUDIO_SIMPLE_PLAYER_BIT_CVT_EN=y # 开启位深转换节点 CONFIG_AUDIO_SIMPLE_PLAYER_BIT_CVT_DEST_16BIT=y # 设置目标位深,即当前硬件支持播放的位深 # CONFIG_AUDIO_SIMPLE_PLAYER_BIT_CVT_DEST_24BIT is not set # CONFIG_AUDIO_SIMPLE_PLAYER_BIT_CVT_DEST_32BIT is not set # end of Audio Simple Player Filters # end of ESP Audio Simple Player ``` - **配置语音唤醒设置**:打开 `main/lingxin_gmf/board_config.h` 文件,新建对应板级配置下的宏定义,并配置唤醒参数。 - `INPUT_CH_ALLOCATION`:输入通道分配; - `BOARD_CODEC_REF_MIC`:指定接入 ref 参考通道数据的麦克风。 ## 启动日志示例 设备编译烧录并成功联网后,您可以在串口终端中观察到以下日志输出。当系统就绪后,您可通过语音唤醒(如:"hi~乐鑫")触发设备,设备响应唤醒后会播放"嘟"声提示音,随后即可开始对话交互。 ``` I (24) boot: ESP-IDF v5.5.1-dirty 2nd stage bootloader I (25) boot: compile time Mar 19 2026 14:39:40 I (25) boot: Multicore bootloader I (25) boot: chip revision: v0.2 I (25) boot: efuse block revision: v1.3 I (25) qio_mode: Enabling default flash chip QIO I (26) boot.esp32s3: Boot SPI Speed : 80MHz I (26) boot.esp32s3: SPI Mode : QIO I (26) boot.esp32s3: SPI Flash Size : 16MB I (26) boot: Enabling RNG early entropy source... I (26) boot: Partition Table: I (26) boot: ## Label Usage Type ST Offset Length I (27) boot: 0 nvs WiFi data 01 02 00009000 00006000 I (27) boot: 1 phy_init RF data 01 01 0000f000 00001000 I (28) boot: 2 factory factory app 00 00 00010000 00400000 I (28) boot: 3 storage Unknown data 01 82 00410000 00300000 I (28) boot: 4 model Unknown data 01 82 00710000 0050c000 I (29) boot: End of partition table I (29) esp_image: segment 0: paddr=00010020 vaddr=3c200020 size=a6d28h (683304) map I (125) esp_image: segment 1: paddr=000b6d50 vaddr=3fca4c00 size=08e9ch ( 36508) load I (131) esp_image: segment 2: paddr=000bfbf4 vaddr=40378000 size=00424h ( 1060) load I (131) esp_image: segment 3: paddr=000c0020 vaddr=42000020 size=1f2cb4h (2043060) map I (415) esp_image: segment 4: paddr=002b2cdc vaddr=40378424 size=1c714h (116500) load I (435) esp_image: segment 5: paddr=002cf3f8 vaddr=50000000 size=00020h ( 32) load I (447) boot: Loaded app from partition at offset 0x10000 I (447) boot: Disabling RNG early entropy source... W (448) flash HPM: HPM mode is optional feature that depends on flash model. Read Docs First! I (448) flash HPM: with HPM-DC support I (448) flash HPM: Enabling flash high speed mode by dummy I (449) MSPI Timing: Flash timing tuning index: 2 I (449) octal_psram: vendor id : 0x0d (AP) I (449) octal_psram: dev id : 0x02 (generation 3) I (449) octal_psram: density : 0x03 (64 Mbit) I (450) octal_psram: good-die : 0x01 (Pass) I (450) octal_psram: Latency : 0x01 (Fixed) I (450) octal_psram: VCC : 0x01 (3V) I (450) octal_psram: SRF : 0x01 (Fast Refresh) I (450) octal_psram: BurstType : 0x01 (Hybrid Wrap) I (451) octal_psram: BurstLen : 0x01 (32 Byte) I (451) octal_psram: Readlatency : 0x02 (10 cycles@Fixed) I (451) octal_psram: DriveStrength: 0x00 (1/1) I (457) MSPI Timing: PSRAM timing tuning index: 2 I (458) esp_psram: Found 8MB PSRAM device I (458) esp_psram: Speed: 120MHz I (458) cpu_start: Multicore app I (692) esp_psram: SPI SRAM memory test OK I (701) cpu_start: Pro cpu start user code I (701) cpu_start: cpu freq: 240000000 Hz I (701) app_init: Application information: I (701) app_init: Project name: LINGXIN_ESP32S3 I (702) app_init: App version: v1.2.0-1-gc758347-dirty I (702) app_init: Compile time: Mar 19 2026 20:17:59 I (702) app_init: ELF file SHA256: 639c91a25... I (702) app_init: ESP-IDF: v5.5.1-dirty I (702) efuse_init: Min chip rev: v0.0 I (702) efuse_init: Max chip rev: v0.99 I (702) efuse_init: Chip rev: v0.2 I (703) heap_init: Initializing. RAM available for dynamic allocation: I (703) heap_init: At 3FCAF0A0 len 0003A670 (233 KiB): RAM I (703) heap_init: At 3FCE9710 len 00005724 (21 KiB): RAM I (703) heap_init: At 600FE000 len 00001FE8 (7 KiB): RTCRAM I (703) esp_psram: Adding pool of 8178K of PSRAM memory to heap allocator I (704) spi_flash: detected chip: generic I (704) spi_flash: flash io: qio I (705) sleep_gpio: Configure to isolate all GPIO pins in sleep state I (705) sleep_gpio: Enable automatic switching of GPIO sleep configuration I (706) main_task: Started on CPU0 I (716) esp_psram: Reserving pool of 256K of internal memory for DMA/internal allocations I (716) main_task: Calling app_main() I (866) LINGXIN_DEVICES_MANAGER: Partition size: total: 2884241, used: 127508 I (866) LINGXIN_AUDIO_PROCESSOR: Initializing audio manager... I (866) BOARD_DEVICE: Device audio_adc config found: 0x3c239514 (size: 92) I (866) BOARD_PERIPH: Peripheral i2s_audio_in config found: 0x3c2396b0 (size: 112) I (866) BOARD_DEVICE: Device audio_dac config found: 0x3c239570 (size: 92) I (866) BOARD_PERIPH: Peripheral i2s_audio_out config found: 0x3c239720 (size: 112) I (866) AUDIO_FORMAT: ========== 音频格式配置 ========== I (866) AUDIO_FORMAT: 【麦克风】采样率: 16000 Hz, 位深: 16 bit, 声道: 4, 模式: TDM I (866) AUDIO_FORMAT: 【扬声器】采样率: 16000 Hz, 位深: 16 bit, 声道: 4, 模式: TDM I (866) AUDIO_FORMAT: ================================== I (866) PERIPH_I2S: I2S[0] TDM, TX, ws: 13, bclk: 14, dout: 45, din: 12 I (866) PERIPH_I2S: I2S[0] initialize success: 0x3c2b4634 I (866) DEV_AUDIO_CODEC: DAC is ENABLED I (866) DEV_AUDIO_CODEC: Init audio_dac, i2s_name: i2s_audio_out, i2s_rx_handle:0x0, i2s_tx_handle:0x3c2b4634, data_if: 0x3fceb9dc I (866) PERIPH_I2C: I2C master bus initialized successfully I (876) ES8311: Work in Slave mode I (876) DEV_AUDIO_CODEC: Successfully initialized codec: audio_dac I (876) DEV_AUDIO_CODEC: Create esp_codec_dev success, dev:0x3fcebc3c, chip:es8311 I (876) BOARD_MANAGER: Device audio_dac initialized I (876) DEV_AUDIO_CODEC: ADC is ENABLED I (876) PERIPH_I2S: I2S[0] TDM, RX, ws: 13, bclk: 14, dout: 45, din: 12 I (876) PERIPH_I2S: I2S[0] initialize success: 0x3c2b4800 I (876) DEV_AUDIO_CODEC: Init audio_adc, i2s_name: i2s_audio_in, i2s_rx_handle:0x3c2b4800, i2s_tx_handle:0x3c2b4634, data_if: 0x3fceead4 I (876) BOARD_PERIPH: Reuse periph: i2c_master, ref_count=2 I (886) ES7210: Work in Slave mode I (886) ES7210: Enable ES7210_INPUT_MIC1 I (886) ES7210: Enable ES7210_INPUT_MIC2 I (896) ES7210: Enable ES7210_INPUT_MIC3 I (896) ES7210: Enable TDM mode I (896) DEV_AUDIO_CODEC: Successfully initialized codec: audio_adc I (896) DEV_AUDIO_CODEC: Create esp_codec_dev success, dev:0x3fceebd0, chip:es7210 I (896) BOARD_MANAGER: Device audio_adc initialized I (896) BOARD_DEVICE: Device handle audio_dac found, Handle: 0x3fce9b1c TO: 0x3fce9b1c I (896) BOARD_DEVICE: Device handle audio_adc found, Handle: 0x3fcebc6c TO: 0x3fcebc6c I (896) I2S_IF: channel mode 2 bits:16/16 channel:4 mask:f I (906) I2S_IF: TDM Mode 1 bits:16/16 channel:4 sample_rate:16000 mask:f I (916) Adev_Codec: Open codec device OK I (916) I2S_IF: channel mode 2 bits:16/16 channel:4 mask:f I (916) I2S_IF: TDM Mode 0 bits:16/16 channel:4 sample_rate:16000 mask:f I (916) I2S_IF: channel mode 2 bits:16/16 channel:4 mask:f I (916) I2S_IF: TDM Mode 1 bits:16/16 channel:4 sample_rate:16000 mask:f I (916) ES7210: Bits 16 I (926) ES7210: Enable ES7210_INPUT_MIC1 I (926) ES7210: Enable ES7210_INPUT_MIC2 I (936) ES7210: Enable ES7210_INPUT_MIC3 I (936) ES7210: Enable TDM mode I (946) ES7210: Unmuted I (946) Adev_Codec: Open codec device OK I (946) BOARD_DEVICE: Device handle audio_dac found, Handle: 0x3fce9b1c TO: 0x3fce9b1c I (946) BOARD_DEVICE: Device handle audio_adc found, Handle: 0x3fcebc6c TO: 0x3fcebc6c I (946) ESP_GMF_POOL: Registered items on pool:0x3c2b4f00, audio_manager_init-248 I (946) ESP_GMF_POOL: IO, Item:0x3c2b4fb4, H:0x3c2b4f14, TAG:io_codec_dev I (946) ESP_GMF_POOL: IO, Item:0x3c2b5064, H:0x3c2b4fc4, TAG:io_codec_dev I (946) ESP_GMF_POOL: IO, Item:0x3c2b5124, H:0x3c2b5074, TAG:io_file I (946) ESP_GMF_POOL: IO, Item:0x3c2b51e4, H:0x3c2b5134, TAG:io_file I (946) ESP_GMF_POOL: IO, Item:0x3c2b52c4, H:0x3c2b51f4, TAG:io_http I (946) ESP_GMF_POOL: IO, Item:0x3c2b537c, H:0x3c2b52d4, TAG:io_embed_flash I (946) ESP_GMF_POOL: EL, Item:0x3c2b5480, H:0x3c2b538c, TAG:aud_enc I (946) ESP_GMF_POOL: EL, Item:0x3c2b559c, H:0x3c2b5490, TAG:aud_dec I (946) ESP_GMF_POOL: EL, Item:0x3c2b5690, H:0x3c2b55ac, TAG:aud_alc I (946) ESP_GMF_POOL: EL, Item:0x3c2b5770, H:0x3c2b56a0, TAG:aud_ch_cvt I (946) ESP_GMF_POOL: EL, Item:0x3c2b584c, H:0x3c2b5780, TAG:aud_bit_cvt I (946) ESP_GMF_POOL: EL, Item:0x3c2b5930, H:0x3c2b585c, TAG:aud_rate_cvt I (946) LINGXIN_AUDIO_PROCESSOR: Setting playback volume to 80... I (946) LINGXIN_AUDIO_PROCESSOR: Audio manager initialized successfully I (946) LINGXIN_AUDIO_PROCESSOR: Opening audio prompt... W (946) AUD_SDEC_REG: Overwrote ES decoder 542523735 W (946) AUD_SDEC_REG: Overwrote ES decoder 1094792269 W (946) AUD_SDEC_REG: Overwrote ES decoder 1398026829 I (946) ASP_POOL: Dest rate:16000 I (956) ASP_POOL: Dest channels:4 I (956) ASP_POOL: Dest bits:16 I (956) ESP_GMF_TASK: Waiting to run... [tsk:TSK_0x600fe180-0x600fe180, wk:0x0, run:0] I (956) LINGXIN_AUDIO_PROCESSOR: Audio prompt opened successfully I (956) LINGXIN_AUDIO_PROCESSOR: Opening audio playback... I (956) NEW_DATA_BUS: New ringbuffer:0x3c2b5e28, num:1, item_cnt:8192, db:0x3c2b7e54 I (956) ESP_GMF_TASK: Waiting to run... [tsk:audio_playback_task-0x600fe1dc, wk:0x0, run:0] I (956) ESP_GMF_TASK: Waiting to run... [tsk:audio_playback_task-0x600fe1dc, wk:0x3c2c24a8, run:0] I (956) ESP_GMF_TASK: Waiting to run... [tsk:audio_playback_task-0x600fe1dc, wk:0x3c2c24a8, run:0] I (956) LINGXIN_AUDIO_PROCESSOR: Audio playback opened successfully I (956) LINGXIN_AUDIO_PROCESSOR: Starting audio playback... I (956) LINGXIN_AUDIO_PROCESSOR: CB: Playback Pipeline EVT: el:NULL-0x3c2b7ebc, type:8192, sub:ESP_GMF_EVENT_STATE_OPENING, payload:0x0, size:0,0x3fcb7a74 I (956) ESP_GMF_TASK: One times job is complete, del[wk:0x3c2c24a8, ctx:0x3c2b7f00, label:aud_dec_open] I (956) ESP_GMF_PORT: ACQ IN, new self payload:0x3c2c24a8, port:0x3c2b840c, el:0x3c2b7f00-aud_dec I (956) LINGXIN_AUDIO_PROCESSOR: Audio playback started successfully I (956) PERIPH_GPIO: Initialize success, pin: 0, default_level: 1 I (956) BOARD_PERIPH: Peripheral gpio_boot_key config found: 0x3c239670 (size: 32) I (956) DEV_BUTTON_SUB_GPIO: Initializing GPIO button on port 0, active level: 0, power_save: 0, disable_pull: 0 I (956) button: IoT Button Version: 4.1.6 I (956) DEV_BUTTON: Successfully initialized button: boot_key_btn, sub_type: gpio I (956) BOARD_MANAGER: Device boot_key_btn initialized I (956) BOARD_DEVICE: Device handle boot_key_btn found, Handle: 0x600fe434 TO: 0x600fe434 I (956) DEV_BUTTON: User data is NULL, use button name as default value I (956) DEV_BUTTON: Successfully registered callback for boot_key_btn I (956) BOARD_DEVICE: Callback registered for device boot_key_btn I (956) LINGXIN_DEVICES_MANAGER: Starting initialization of all custom devices... I (956) LINGXIN_DEVICES_MANAGER: Attempting to initialize custom device: pca9557_manager I (956) pca9557_manager: Initializing pca9557_manager device I (956) pca9557_manager: Device Name: pca9557_manager I (956) pca9557_manager: Chip: pca9557 I (956) pca9557_manager: Type: custom I (956) pca9557_manager: Peripheral Name: i2c_master I (966) pca9557_manager: PCA9557 initialized successfully using board manager's I2C bus I (966) pca9557_manager: PCA9557 PA EN pin set to level: 1 I (966) pca9557_manager: PCA9557 pins configured according to IO config I (966) BOARD_MANAGER: Device pca9557_manager initialized I (966) LINGXIN_DEVICES_MANAGER: Successfully initialized custom device: pca9557_manager I (966) LINGXIN_DEVICES_MANAGER: Custom devices initialization completed. Success: 1, Failed: 0 I (986) pp: pp rom version: e7ae62f I (986) net80211: net80211 rom version: e7ae62f I (996) wifi:wifi driver task: 3fcbd990, prio:23, stack:6656, core=0 I (1006) wifi:wifi firmware version: 14da9b7 I (1006) wifi:wifi certification version: v7.0 I (1006) wifi:config NVS flash: enabled I (1006) wifi:config nano formatting: disabled I (1006) wifi:Init data frame dynamic rx buffer num: 32 I (1006) wifi:Init static rx mgmt buffer num: 5 I (1006) wifi:Init management short buffer num: 32 I (1006) wifi:Init dynamic tx buffer num: 32 I (1006) wifi:Init static tx FG buffer num: 2 I (1006) wifi:Init static rx buffer size: 1600 I (1006) wifi:Init static rx buffer num: 10 I (1006) wifi:Init dynamic rx buffer num: 32 I (1006) wifi_init: rx ba win: 6 I (1006) wifi_init: accept mbox: 6 I (1006) wifi_init: tcpip mbox: 32 I (1006) wifi_init: udp mbox: 6 I (1006) wifi_init: tcp mbox: 6 I (1006) wifi_init: tcp tx win: 5760 I (1006) wifi_init: tcp rx win: 5760 I (1006) wifi_init: tcp mss: 1440 I (1006) wifi_init: WiFi IRAM OP enabled I (1006) wifi_init: WiFi RX IRAM OP enabled I (1006) phy_init: phy_version 701,f4f1da3a,Mar 3 2025,15:50:10 I (1056) wifi:mode : sta (94:a9:90:2f:a1:80) I (1056) wifi:enable tsf I (1056) lingxin_basic_wifi_station: wifi_init_sta finished. I (1056) wifi:new:<11,0>, old:<1,0>, ap:<255,255>, sta:<11,0>, prof:1, snd_ch_cfg:0x0 I (1066) wifi:state: init -> auth (0xb0) I (1066) wifi:state: auth -> init (0x1c0) I (1076) wifi:new:<11,0>, old:<11,0>, ap:<255,255>, sta:<11,0>, prof:1, snd_ch_cfg:0x0 I (1076) lingxin_basic_wifi_station: retry to connect to the AP I (1076) lingxin_basic_wifi_station: connect to the AP fail I (3486) lingxin_basic_wifi_station: retry to connect to the AP I (3486) lingxin_basic_wifi_station: connect to the AP fail I (3486) wifi:new:<11,0>, old:<11,0>, ap:<255,255>, sta:<11,0>, prof:1, snd_ch_cfg:0x0 I (3486) wifi:state: init -> auth (0xb0) I (3496) wifi:state: auth -> assoc (0x0) I (3526) wifi:state: assoc -> run (0x10) I (3546) wifi:connected with aliyun_iot_test, aid = 8, channel 11, BW20, bssid = 4a:eb:8d:48:dd:be I (3546) wifi:security: WPA2-PSK, phy: bgn, rssi: -51 I (3546) wifi:pm start, type: 1 I (3546) wifi:dp: 1, bi: 102400, li: 3, scale listen interval from 307200 us to 307200 us I (3546) wifi:set rx beacon pti, rx_bcn_pti: 0, bcn_timeout: 25000, mt_pti: 0, mt_time: 10000 I (3646) wifi:dp: 2, bi: 102400, li: 4, scale listen interval from 307200 us to 409600 us I (3646) wifi:AP's beacon interval = 102400 us, DTIM period = 2 I (4076) wifi:idx:0 (ifx:0, 4a:eb:8d:48:dd:be), tid:0, ssn:0, winSize:64 I (5096) esp_netif_handlers: sta ip: 192.168.150.29, mask: 255.255.255.0, gw: 192.168.150.116 I (5096) lingxin_basic_wifi_station: got ip:192.168.150.29 I (5096) lingxin_basic_wifi_station: connected to ap SSID:aliyun_iot_test password:aliyun_iot_123456 I (5096) lingxin_app_main: WiFi连接成功! I (5096) LINGXIN_AUDIO_PROCESSOR: Starting prompt playback: file://spiffs/NetCfgSucc.mp3 I (5096) ESP_GMF_TASK: Waiting to run... [tsk:TSK_0x600fe180-0x600fe180, wk:0x3c2c5230, run:0] I (5096) ESP_GMF_FILE: Open, dir:1, uri:file://spiffs/NetCfgSucc.mp3 I (5096) ESP_GMF_FILE: File size: 38448 byte, file position: 0 I (5096) ESP_GMF_TASK: One times job is complete, del[wk:0x3c2c5230, ctx:0x3c2c4c00, label:aud_dec_open] I (5096) ESP_GMF_PORT: ACQ IN, new self payload:0x3c2c5230, port:0x3c2c518c, el:0x3c2c4c00-aud_dec W (5096) ESP_GMF_ASMP_DEC: Not enough memory for out, need:1152, old: 1024, new: 1152 I (5096) ESP_GMF_TASK: One times job is complete, del[wk:0x3c2c54d8, ctx:0x3c2c4cec, label:aud_rate_cvt_open] I (5096) ESP_GMF_TASK: One times job is complete, del[wk:0x3c2c5538, ctx:0x3c2c4e40, label:aud_ch_cvt_open] I (5096) LINGXIN_AUDIO_PROCESSOR: Get info, rate:16000, channels:4, bits:16 I (5106) LINGXIN_AUDIO_PROCESSOR: Get State, 1,ESP_AUD_SIMPLE_PLAYER_RUNNING I (5106) ESP_GMF_TASK: One times job is complete, del[wk:0x3c2c54d8, ctx:0x3c2c4f90, label:aud_bit_cvt_open] I (5106) lingxin_app_main: lingxin_gmf_wakeup_init I (5106) LINGXIN_GMF_WAKEUP: KWS callback registered I (5106) LINGXIN_AUDIO_PROCESSOR: Opening audio recorder... I (5106) MODEL_LOADER: The storage free size is 21824 KB I (5106) MODEL_LOADER: The partition size is 5168 KB I (5106) MODEL_LOADER: Successfully load srmodels I (5106) AFE_CONFIG: Set WakeNet Model: wn9_hilexin wakeword model in AFE config: wn9_hilexin /********** General AFE (Audio Front End) Parameter **********/ pcm_config.total_ch_num: 4 pcm_config.mic_num: 2: [ ch0, ch2 ] pcm_config.ref_num: 1: [ ch1 ] pcm_config.sample_rate: 16000 afe_type: SR afe_mode: HIGH PERF afe_perferred_core: 0 afe_perferred_priority: 5 afe_ringbuf_size: 50 memory_alloc_mode: 3 afe_linear_gain: 1.0 debug_init: false fixed_first_channel: false /********** AEC (Acoustic Echo Cancellation) **********/ aec_init: false aec mode: SR_HIGH_PERF aec_filter_length: 4 /********** SE (Speech Enhancement, Microphone Array Processing) **********/ se_init: true, model: BSS /********** NS (Noise Suppression) **********/ ns_init: false ns model name: WEBRTC /********** VAD (Voice Activity Detection) **********/ vad_init: false vad_mode: 1 vad_model_name: NULL vad_min_speech_ms: 64 vad_min_noise_ms: 1000 vad_delay_ms: 128 vad_mute_playback: false vad_enable_channel_trigger: false /********** WakeNet (Wake Word Engine) **********/ wakenet_init: true wakenet_model_name: wn9_hilexin wakenet_model_name_2: NULL wakenet_mode: 0 /********** AGC (Automatic Gain Control) **********/ agc_init: false agc_mode: WAKENET agc_compression_gain_db: 9 agc_target_level_dbfs: 9 /**************************************************/ MC Quantized wakenet9: wakenet9_v1h24_嗨,乐鑫_3_0.608_0.615, tigger:v4, mode:4, p:0, (Aug 11 2025 15:20:50) I (5196) AFE: AFE Version: (2MIC_V250113) I (5196) AFE: Input PCM Config: total 4 channels(2 microphone, 1 playback), sample rate:16000 I (5196) AFE: AFE Pipeline: [input] -> |SE(BSS)| -> |WakeNet(wn9_hilexin,)| -> [output] I (5196) AFE_MANAGER: Feed task, ch 4, chunk 1024, buf size 8192 I (5196) GMF_AFE: Create AFE, ai_afe-0x3c2c5780 I (5196) GMF_AFE: Create AFE, ai_afe-0x3c38b7a0 I (5196) GMF_AFE: New an object,ai_afe-0x3c38b7a0 I (5196) ESP_GMF_TASK: Waiting to run... [tsk:audio_recorder_task-0x3c378210, wk:0x0, run:0] I (5196) ESP_GMF_TASK: Waiting to run... [tsk:audio_recorder_task-0x3c378210, wk:0x3c2c58cc, run:0] I (5206) ESP_GMF_TASK: Waiting to run... [tsk:audio_recorder_task-0x3c378210, wk:0x3c2c58cc, run:0] I (5206) LINGXIN_AUDIO_PROCESSOR: CB: RECV Pipeline EVT: el:NULL-0x3c2c5888, type:8192, sub:ESP_GMF_EVENT_STATE_OPENING, payload:0x0, size:0,0x0 I (5206) NEW_DATA_BUS: New ringbuffer:0x3c378304, num:2, item_cnt:8192, db:0x3c37832c I (5206) NEW_DATA_BUS: New ringbuffer:0x3c378394, num:1, item_cnt:20480, db:0x3c3783bc I (5206) AFE_MANAGER: AFE manager suspend 1 I (5206) AFE_MANAGER: AFE manager suspend 0 I (5206) ESP_GMF_TASK: One times job is complete, del[wk:0x3c2c58cc, ctx:0x3c38b7a0, label:ai_afe_open] I (5206) ESP_GMF_PORT: ACQ IN, new self payload:0x3c2c58cc, port:0x3c3781d0, el:0x3c38b7a0-ai_afe I (5206) LINGXIN_AUDIO_PROCESSOR: Audio recorder opened successfully I (5206) lingxin_adapter_sys_time: Initializing SNTP client I (5206) lingxin_adapter_sys_time: SNTP client initialized [03-19 23:55:23.554] [LINGXIN_ESP32S3_1.2.0] [D] [app_main:138] [main] voiceChat init begin [03-19 23:55:23.555] [LINGXIN_ESP32S3_1.2.0] [D] [chat_api:74] [main] [chat_api_voice_chat_init_start] [03-19 23:55:23.555] [LINGXIN_ESP32S3_1.2.0] [D] [chat_api:90] [main] [chat_api_voice_chat_config_init_start] [03-19 23:55:23.555] [LINGXIN_ESP32S3_1.2.0] [D] [chat_api:105] [main] [chat_api_voice_chat_config_init_success] [03-19 23:55:23.556] [LINGXIN_ESP32S3_1.2.0] [D] [chat_api:122] [main] [chat_api_lingxin_config_get_thread_create] [03-19 23:55:23.556] [LINGXIN_ESP32S3_1.2.0] [D] [lingxin_thread:362] [main] Creating thread: name=lx_config, prio=16, stack=8192, args=0x3fcb2fe0 [03-19 23:55:23.557] [LINGXIN_ESP32S3_1.2.0] [D] [lingxin_http:135] [lx_config] URL: http://eagent.edu-aliyun.com:80/gw/d/api/v1/terminal/config/get [03-19 23:55:23.560] [LINGXIN_ESP32S3_1.2.0] [D] [lingxin_thread:385] [main] Thread created successfully: name=lx_config, prio=16, stack=8192, tid=1070369132 [03-19 23:55:23.561] [LINGXIN_ESP32S3_1.2.0] [D] [chat_api:137] [main] lingxin_config_get_state=0, count=1 [03-19 23:55:23.659] [LINGXIN_ESP32S3_1.2.0] [D] [chat_api:137] [main] lingxin_config_get_state=0, count=2 I (5386) ESP_GMF_TASK: One times job is complete, del[wk:0x3c37828c, ctx:0x3c38b8a8, label:aud_bit_cvt_open] I (5396) ESP_GMF_TASK: One times job is complete, del[wk:0x3c39fd80, ctx:0x3c38b9d4, label:aud_rate_cvt_open] I (5396) LINGXIN_AUDIO_PROCESSOR: CB: RECV Pipeline EVT: el:aud_ch_cvt-0x3c3780e4, type:12288, sub:ESP_GMF_EVENT_STATE_INITIALIZED, payload:0x3fcc5f00, size:16,0x0 I (5396) LINGXIN_AUDIO_PROCESSOR: CB: RECV Pipeline EVT: el:aud_ch_cvt-0x3c3780e4, type:8192, sub:ESP_GMF_EVENT_STATE_RUNNING, payload:0x0, size:0,0x0 I (5396) ESP_GMF_TASK: One times job is complete, del[wk:0x3c37828c, ctx:0x3c3780e4, label:aud_ch_cvt_open] [03-19 23:55:23.759] [LINGXIN_ESP32S3_1.2.0] [D] [chat_api:137] [main] lingxin_config_get_state=0, count=3 [03-19 23:55:23.859] [LINGXIN_ESP32S3_1.2.0] [D] [chat_api:137] [main] lingxin_config_get_state=0, count=4 [03-19 23:55:23.897] [LINGXIN_ESP32S3_1.2.0] [D] [lingxin_http:80] [lx_config] HTTP request finished [03-19 23:55:23.898] [LINGXIN_ESP32S3_1.2.0] [D] [chat_api:483] [lx_config] parse responese: {"success":true,"err_code":null,"err_message":null,"request_id":"R8fd09929382e4740a2b85ee721a6ae11","code":"20000001","err_msg":null,"readable_err_msg":null,"data":{"input_format":null,"input_sample_rate":null,"output_format":null,"output_sample_rate":null,"enable_schedule_task":true,"enable_log_upload":true}} [03-19 23:55:23.900] [LINGXIN_ESP32S3_1.2.0] [D] [chat_api:520] [lx_config] parse success [03-19 23:55:23.900] [LINGXIN_ESP32S3_1.2.0] [D] [lingxin_thread:265] [lx_config] [[lingxin_thread_destroy] called in thread:] Task Info - ID: 1070369132, Name: lx_config, Priority: 16, State: 0 [03-19 23:55:23.901] [LINGXIN_ESP32S3_1.2.0] [D] [lingxin_thread:404] [lx_config] thread 1070369132 enter self destroy [03-19 23:55:23.959] [LINGXIN_ESP32S3_1.2.0] [D] [chat_api:163] [main] [chat_api_user_track_init_start] [03-19 23:55:23.960] [LINGXIN_ESP32S3_1.2.0] [D] [lingxin_user_track:637] [main] begin [03-19 23:55:23.961] [LINGXIN_ESP32S3_1.2.0] [D] [lingxin_thread:362] [main] Creating thread: name=lx_ut_thread, prio=9, stack=4096, args=0x0 [03-19 23:55:23.966] [LINGXIN_ESP32S3_1.2.0] [D] [lingxin_thread:385] [main] Thread created successfully: name=lx_ut_thread, prio=9, stack=4096, tid=1070364940 [03-19 23:55:23.967] [LINGXIN_ESP32S3_1.2.0] [D] [chat_api:165] [main] [chat_api_user_track_init_success] [03-19 23:55:23.967] [LINGXIN_ESP32S3_1.2.0] [D] [chat_api:172] [main] [chat_api_state_machine_init_start] [03-19 23:55:23.968] [LINGXIN_ESP32S3_1.2.0] [D] [chat_api:176] [main] [chat_api_state_machine_init_success] [03-19 23:55:23.968] [LINGXIN_ESP32S3_1.2.0] [D] [chat_api:179] [main] [chat_api_record_manager_init_start] [03-19 23:55:23.969] [LINGXIN_ESP32S3_1.2.0] [D] [recorder_manager:53] [main] [recorder_manager_init] send_uni_size is 2048, send_cbuf_scale is 0 [03-19 23:55:23.969] [LINGXIN_ESP32S3_1.2.0] [D] [lingxin_user_track:384] [lx_ut_thread] /spiffs/ut.lx exist [03-19 23:55:23.970] [LINGXIN_ESP32S3_1.2.0] [D] [lingxin_http:135] [lx_ut_thread] URL: http://eagent.edu-aliyun.com:80/gw/d/api/v1/terminal/meta [03-19 23:55:23.974] [LINGXIN_ESP32S3_1.2.0] [D] [recorder_manager:79] [main] [recorder_manager_init_success] [03-19 23:55:23.974] [LINGXIN_ESP32S3_1.2.0] [D] [chat_api:181] [main] [chat_api_record_manager_init_success] [03-19 23:55:23.975] [LINGXIN_ESP32S3_1.2.0] [D] [chat_api:184] [main] [chat_api_local_player_manager_init_start] [03-19 23:55:23.975] [LINGXIN_ESP32S3_1.2.0] [D] [chat_api:200] [main] [chat_api_local_player_manager_init_success] [03-19 23:55:23.975] [LINGXIN_ESP32S3_1.2.0] [D] [chat_api:205] [main] [chat_api_schedule_timer_manager_init_start] [03-19 23:55:23.976] [LINGXIN_ESP32S3_1.2.0] [D] [lingxin_queue:63] [main] [schedule_str] ring_queue created, capacity=5, overwrite=true, free_fn=yes [03-19 23:55:23.976] [LINGXIN_ESP32S3_1.2.0] [D] [lingxin_thread:362] [main] Creating thread: name=task_update, prio=16, stack=4096, args=0x0 [03-19 23:55:23.977] [LINGXIN_ESP32S3_1.2.0] [D] [schedule_timer_manager:182] [task_update] 定时器设置线程 before pend [03-19 23:55:23.977] [LINGXIN_ESP32S3_1.2.0] [D] [lingxin_thread:385] [main] Thread created successfully: name=task_update, prio=16, stack=4096, tid=1070366376 [03-19 23:55:23.977] [LINGXIN_ESP32S3_1.2.0] [D] [schedule_timer_manager:507] [main] 任务处理线程创建成功,PID: 1070366376 [03-19 23:55:23.978] [LINGXIN_ESP32S3_1.2.0] [D] [lingxin_queue:63] [main] [timer_trigger] ring_queue created, capacity=10, overwrite=false, free_fn=yes [03-19 23:55:23.982] [LINGXIN_ESP32S3_1.2.0] [D] [lingxin_thread:362] [main] Creating thread: name=timer_trigger, prio=16, stack=4096, args=0x0 [03-19 23:55:23.982] [LINGXIN_ESP32S3_1.2.0] [D] [schedule_timer_manager:378] [timer_trigger] timer_trigger_thread_entry before pend [03-19 23:55:23.983] [LINGXIN_ESP32S3_1.2.0] [D] [lingxin_thread:385] [main] Thread created successfully: name=timer_trigger, prio=16, stack=4096, tid=1070366924 [03-19 23:55:23.983] [LINGXIN_ESP32S3_1.2.0] [D] [schedule_timer_manager:465] [main] 线程timer_trigger创建成功,PID: 1070366924 [03-19 23:55:23.983] [LINGXIN_ESP32S3_1.2.0] [D] [schedule_protocol:332] [main] [schedule_manager_first_ws_begin] [03-19 23:55:23.985] [LINGXIN_ESP32S3_1.2.0] [D] [lingxin_websocket:547] [main] websocket_cfg.task_name: lx_ws_1773935723 W (5636) websocket_client: `network_timeout_ms` is not set, or it is less than or equal to zero, using default time out 10000 (milliseconds) [03-19 23:55:23.987] [LINGXIN_ESP32S3_1.2.0] [D] [lingxin_websocket:564] [main] Connecting to ws://eagent.edu-aliyun.com:80/gw/ws/open/api/v1/unifiedAccess... [03-19 23:55:23.988] [LINGXIN_ESP32S3_1.2.0] [D] [lingxin_websocket:234] [lx_ws_177393572] WEBSOCKET_EVENT_BEGIN I (5646) websocket_client: Started [03-19 23:55:23.990] [LINGXIN_ESP32S3_1.2.0] [D] [lingxin_websocket:593] [main] Websocket client started successfully [03-19 23:55:23.990] [LINGXIN_ESP32S3_1.2.0] [D] [schedule_protocol:406] [main] [schedule_manager_first_ws_finished] [03-19 23:55:23.991] [LINGXIN_ESP32S3_1.2.0] [D] [chat_api:207] [main] [chat_api_schedule_timer_manager_init_success] [03-19 23:55:23.991] [LINGXIN_ESP32S3_1.2.0] [D] [chat_api:217] [main] [chat_api_voice_chat_init_success] [03-19 23:55:23.991] [LINGXIN_ESP32S3_1.2.0] [D] [app_main:159] [main] voiceChat init finish I (5646) main_task: Returned from app_main() D (5726) websocket_client: Transport connected to ws://eagent.edu-aliyun.com:80 [03-19 23:55:24.071] [LINGXIN_ESP32S3_1.2.0] [D] [lingxin_websocket:242] [lx_ws_177393572] WEBSOCKET_EVENT_CONNECTED [03-19 23:55:24.071] [LINGXIN_ESP32S3_1.2.0] [D] [schedule_protocol:214] [lx_ws_177393572] ON_WEBSOCKET_CONNECTION_SUCCESS [03-19 23:55:24.072] [LINGXIN_ESP32S3_1.2.0] [D] [lingxin_timer:263] [lx_ws_177393572] one_shot_timer_create: 0x3fcb1af0, 10000 ms [03-19 23:55:24.072] [LINGXIN_ESP32S3_1.2.0] [D] [schedule_protocol:242] [lx_ws_177393572] Created timeout timer (10s) for system_event, timer_id=0 [03-19 23:55:24.096] [LINGXIN_ESP32S3_1.2.0] [D] [lingxin_http:80] [lx_ut_thread] HTTP request finished [03-19 23:55:24.099] [LINGXIN_ESP32S3_1.2.0] [D] [lingxin_websocket:333] [lx_ws_177393572] Received complete message: 181 bytes [03-19 23:55:24.100] [LINGXIN_ESP32S3_1.2.0] [D] [schedule_protocol:75] [lx_ws_177393572] onEventMessageReceived: {"header":{"action":"system_event","code":"20000001","err_msg":""},"payload":{"data":{"schedule_task_config":{"advance_connect_time":0},"task_list":[],"type":"schedule_task_list"}}} [03-19 23:55:24.101] [LINGXIN_ESP32S3_1.2.0] [D] [schedule_protocol:31] [lx_ws_177393572] dealEventFromServer: system_event [03-19 23:55:24.101] [LINGXIN_ESP32S3_1.2.0] [D] [schedule_protocol:58] [lx_ws_177393572] delete system_event timeout timer 0 [03-19 23:55:24.102] [LINGXIN_ESP32S3_1.2.0] [D] [schedule_protocol:62] [lx_ws_177393572] [schedule_manager_recv_system_event] payload: {"data":{"schedule_task_config":{"advance_connect_time":0},"task_list":[],"type":"schedule_task_list"}} [03-19 23:55:24.102] [LINGXIN_ESP32S3_1.2.0] [D] [schedule_ws_manager:22] [lx_ws_177393572] -----SCHEDULECHAT_EVENT_ON_SYSTEM_EVENT-----{"data":{"schedule_task_config":{"advance_connect_time":0},"task_list":[],"type":"schedule_task_list"}} [03-19 23:55:24.103] [LINGXIN_ESP32S3_1.2.0] [D] [chat_state_machine:1378] [lx_ws_177393572] [chat_state_machine] state_machine_post_schedule_data [03-19 23:55:24.103] [LINGXIN_ESP32S3_1.2.0] [D] [schedule_timer_manager:118] [lx_ws_177393572] [schedule_list_update_begin] [03-19 23:55:24.104] [LINGXIN_ESP32S3_1.2.0] [D] [lingxin_queue:129] [lx_ws_177393572] [schedule_str] ring_queue enqueue, count=1/5 [03-19 23:55:24.104] [LINGXIN_ESP32S3_1.2.0] [D] [schedule_timer_manager:184] [task_update] 定时器设置线程 after pend [03-19 23:55:24.104] [LINGXIN_ESP32S3_1.2.0] [D] [lingxin_queue:155] [task_update] [schedule_str] ring_queue dequeue, count=0/5 [03-19 23:55:24.105] [LINGXIN_ESP32S3_1.2.0] [D] [schedule_timer_manager:188] [task_update] [schedule_list_parse_begin] [03-19 23:55:24.105] [LINGXIN_ESP32S3_1.2.0] [D] [json_util:315] [task_update] [schedule_list_parse_finished] [03-19 23:55:24.106] [LINGXIN_ESP32S3_1.2.0] [D] [schedule_timer_manager:214] [task_update] [schedule_list_update_finished] [03-19 23:55:24.106] [LINGXIN_ESP32S3_1.2.0] [D] [schedule_timer_manager:182] [task_update] 定时器设置线程 before pend [03-19 23:55:24.106] [LINGXIN_ESP32S3_1.2.0] [D] [schedule_timer_manager:175] [lx_ws_177393572] initTimerTaskList finish [03-19 23:55:24.107] [LINGXIN_ESP32S3_1.2.0] [D] [schedule_protocol:448] [lx_ws_177393572] [schedule_ws_destroy_begin] [03-19 23:55:24.107] [LINGXIN_ESP32S3_1.2.0] [D] [lingxin_websocket:674] [lx_ws_177393572] closeWebsocket begin [03-19 23:55:24.107] [LINGXIN_ESP32S3_1.2.0] [D] [lingxin_websocket:688] [lx_ws_177393572] Sending websocket close op to queue [03-19 23:55:24.108] [LINGXIN_ESP32S3_1.2.0] [D] [schedule_protocol:456] [lx_ws_177393572] scheduleWsDestroy after [03-19 23:55:24.108] [LINGXIN_ESP32S3_1.2.0] [D] [lingxin_websocket:381] [lx_adapter_ws] processing close op [03-19 23:55:24.108] [LINGXIN_ESP32S3_1.2.0] [D] [lingxin_websocket:386] [lx_adapter_ws] Websocket Closing [03-19 23:55:24.108] [LINGXIN_ESP32S3_1.2.0] [D] [lingxin_websocket:387] [lx_adapter_ws] websocket is connected: true [03-19 23:55:24.146] [LINGXIN_ESP32S3_1.2.0] [D] [lingxin_websocket:343] [lx_ws_177393572] Received closed message with code=1000 D (5796) websocket_client: Received close frame D (5796) websocket_client: Waiting for TCP connection to be closed by the server [03-19 23:55:24.156] [LINGXIN_ESP32S3_1.2.0] [D] [lingxin_websocket:247] [lx_ws_177393572] WEBSOCKET_EVENT_CLOSED [03-19 23:55:24.156] [LINGXIN_ESP32S3_1.2.0] [D] [lingxin_websocket:199] [lx_ws_177393572] HTTP status code [03-19 23:55:24.157] [LINGXIN_ESP32S3_1.2.0] [D] [lingxin_websocket:360] [lx_ws_177393572] WEBSOCKET_EVENT_FINISH [03-19 23:55:24.157] [LINGXIN_ESP32S3_1.2.0] [D] [lingxin_websocket:120] [lx_ws_177393572] Start websocket_cleanup... [03-19 23:55:24.157] [LINGXIN_ESP32S3_1.2.0] [D] [schedule_protocol:273] [lx_ws_177393572] [schedule_ws_destroy_finished] [03-19 23:55:24.158] [LINGXIN_ESP32S3_1.2.0] [D] [schedule_protocol:274] [lx_ws_177393572] 销毁初始化时用于定时任务同步的ws连接 [03-19 23:55:24.158] [LINGXIN_ESP32S3_1.2.0] [D] [schedule_protocol:121] [lx_ws_177393572] freeScheduleWs begin [03-19 23:55:24.159] [LINGXIN_ESP32S3_1.2.0] [D] [schedule_protocol:102] [lx_ws_177393572] freeConfig finished [03-19 23:55:24.159] [LINGXIN_ESP32S3_1.2.0] [D] [schedule_protocol:165] [lx_ws_177393572] freeScheduleWs after [03-19 23:55:24.159] [LINGXIN_ESP32S3_1.2.0] [D] [lingxin_websocket:190] [lx_ws_177393572] Sending websocket destroy op to queue [03-19 23:55:24.160] [LINGXIN_ESP32S3_1.2.0] [D] [lingxin_websocket:389] [lx_adapter_ws] esp_websocket_client_close ret: 0 [03-19 23:55:24.161] [LINGXIN_ESP32S3_1.2.0] [D] [lingxin_websocket:402] [lx_adapter_ws] processing destroy op [03-19 23:55:24.161] [LINGXIN_ESP32S3_1.2.0] [D] [lingxin_websocket:61] [lx_adapter_ws] Start full_clean_websocket... [03-19 23:55:24.162] [LINGXIN_ESP32S3_1.2.0] [D] [lingxin_websocket:115] [lx_adapter_ws] Finish full_clean_websocket... I (8266) ESP_GMF_FILE: No more data, ret: 0 I (8296) ESP_GMF_FILE: No more data, ret: 0 I (8296) ESP_GMF_TASK: Job is done, [tsk:TSK_0x600fe180-0x600fe180, wk:0x3c2c5268, job:0x3c2c4c00-aud_dec_proc] I (8296) ESP_GMF_TASK: Job is done, [tsk:TSK_0x600fe180-0x600fe180, wk:0x3c2c54fc, job:0x3c2c4cec-aud_rate_cvt_proc] I (8306) ESP_GMF_TASK: Job is done, [tsk:TSK_0x600fe180-0x600fe180, wk:0x3c2c5570, job:0x3c2c4e40-aud_ch_cvt_proc] I (8306) ESP_GMF_TASK: Job is done, [tsk:TSK_0x600fe180-0x600fe180, wk:0x3c2c55a8, job:0x3c2c4f90-aud_bit_cvt_proc] I (8306) ESP_GMF_FILE: CLose, 0x3c2c50dc, pos = 38448/38448 I (8306) ESP_GMF_TASK: One times job is complete, del[wk:0x3c2c54fc, ctx:0x3c2c4c00, label:aud_dec_close] I (8306) ESP_GMF_TASK: One times job is complete, del[wk:0x3c2c5268, ctx:0x3c2c4cec, label:aud_rate_cvt_close] I (8306) ESP_GMF_TASK: One times job is complete, del[wk:0x3c2c528c, ctx:0x3c2c4e40, label:aud_ch_cvt_close] I (8306) ESP_GMF_TASK: One times job is complete, del[wk:0x3c39fdd4, ctx:0x3c2c4f90, label:aud_bit_cvt_close] I (8306) LINGXIN_AUDIO_PROCESSOR: Get State, 4,ESP_AUD_SIMPLE_PLAYER_FINISHED I (8306) ESP_GMF_TASK: Waiting to run... [tsk:TSK_0x600fe180-0x600fe180, wk:0x0, run:0] I (8306) ESP_GMF_TASK: Waiting to run... [tsk:TSK_0x600fe180-0x600fe180, wk:0x0, run:0] ``` --- ## 项目补充说明 以下内容为基于当前仓库实际状态追加的补充说明,不替代上文原有指南。 ### 一、当前已适配板卡 当前仓库已经新增并验证了一版 `waveshare_175` 板级适配,相关文件位于: - [board_info.yaml](/Users/pan/Desktop/Develop/esp32/LINGXIN_ESP32_S3/components/esp_board_manager/boards/waveshare_175/board_info.yaml) - [board_peripherals.yaml](/Users/pan/Desktop/Develop/esp32/LINGXIN_ESP32_S3/components/esp_board_manager/boards/waveshare_175/board_peripherals.yaml) - [board_devices.yaml](/Users/pan/Desktop/Develop/esp32/LINGXIN_ESP32_S3/components/esp_board_manager/boards/waveshare_175/board_devices.yaml) - [setup_device.c](/Users/pan/Desktop/Develop/esp32/LINGXIN_ESP32_S3/components/esp_board_manager/boards/waveshare_175/setup_device.c) 对应硬件信息: - 主控:`ESP32-S3` - 屏幕:`1.75 寸 AMOLED 466x466` - Panel Driver:`CO5300` - Touch IC:`CST9217` - PMU:`AXP2101` - IMU:`QMI8658` - RTC:`PCF85063` - 音频 DAC:`ES8311` - 音频 ADC:`ES7210` ### 二、当前验证状态 目前已经验证通过的能力: - `ESP-IDF v5.5.1` 下可正常编译 - 自定义分区表生效 - `SPIFFS` 资源分区可正常生成和挂载 - 音频播放链路可用 - 唤醒词链路可用 - `CO5300` AMOLED 已点亮 - 屏幕纯色轮播测试可用 当前尚未完全闭环的部分: - `CST9217` 触摸完整交互 - `AXP2101` 电源管理完整封装 - `RTC / IMU` 的板级接入 ### 三、`waveshare_175` 构建注意事项 项目当前保留了多份配置文件: - [sdkconfig](/Users/pan/Desktop/Develop/esp32/LINGXIN_ESP32_S3/sdkconfig) - [sdkconfig.lingxin](/Users/pan/Desktop/Develop/esp32/LINGXIN_ESP32_S3/sdkconfig.lingxin) - [sdkconfig.waveshare_175](/Users/pan/Desktop/Develop/esp32/LINGXIN_ESP32_S3/sdkconfig.waveshare_175) 建议: - `waveshare_175` 相关构建统一以 `sdkconfig.waveshare_175` 作为恢复源 原因: - `esp_board_manager` 生成板级代码时,会备份并删除当前 `sdkconfig` - 如果不恢复,会导致 `sdkconfig` 与 `gen_bmgr_codes` 不一致 推荐流程: 1. 修改 `waveshare_175` 的 YAML 或板级代码 2. 生成 board 代码 3. 恢复 `sdkconfig` 4. 再执行构建 参考命令: ```bash export IDF_PYTHON_ENV_PATH=/Users/pan/.espressif/python_env/idf5.5_py3.13_env source /Users/pan/.espressif/v5.5.1/esp-idf/export.sh python components/esp_board_manager/gen_bmgr_config_codes.py waveshare_175 cp sdkconfig.waveshare_175 sdkconfig idf.py build ``` ### 四、自定义分区表说明 当前工程使用自定义分区表: - [partitions.csv](/Users/pan/Desktop/Develop/esp32/LINGXIN_ESP32_S3/partitions.csv) 关键分区: - `factory` - `storage` - `model` 说明: - `storage` 用于 `SPIFFS` - `model` 用于语音模型资源 如果构建时报错: ```text Failed to create SPIFFS image for partition 'storage' ``` 通常意味着: - 当前实际生效的 `sdkconfig` 没有启用自定义分区表 - 或者 `sdkconfig` 被 board generator 删除后,没有恢复正确版本 ### 五、屏幕模块说明 当前主流程已经接入独立屏幕模块: - [screen.h](/Users/pan/Desktop/Develop/esp32/LINGXIN_ESP32_S3/main/display/screen.h) - [screen.c](/Users/pan/Desktop/Develop/esp32/LINGXIN_ESP32_S3/main/display/screen.c) 特点: - 与 `app_main` 解耦 - 主流程只保留少量调用 - 当前支持纯色显示与 RGB 轮播测试 注意: - 当前颜色补偿仍保留在 `screen` 模块内 - 还没有下沉到底层 `CO5300` 驱动 - 这样做是为了先保证效果正确,降低对底层组件的影响 ### 六、音频与唤醒配置补充 音频相关关键位置: - [board_config.h](/Users/pan/Desktop/Develop/esp32/LINGXIN_ESP32_S3/main/lingxin_gmf/board_config.h) - [board_peripherals.yaml](/Users/pan/Desktop/Develop/esp32/LINGXIN_ESP32_S3/components/esp_board_manager/boards/waveshare_175/board_peripherals.yaml) - [board_devices.yaml](/Users/pan/Desktop/Develop/esp32/LINGXIN_ESP32_S3/components/esp_board_manager/boards/waveshare_175/board_devices.yaml) 当前适配经验: - 板级 I2S 采样率需要与项目链路保持一致,当前使用 `16000` - `board_config.h` 里的输入通道分配必须与实际 I2S 输入配置一致 - 如果 `AFE` 期待 4 通道,而硬件输入实际只有 2 通道,唤醒通常会失效 ### 七、补充文档 适配过程中已整理的文档如下: - [ESP32-S3-Touch-AMOLED-1.75.pdf](/Users/pan/Desktop/Develop/esp32/LINGXIN_ESP32_S3/Doc/ESP32-S3-Touch-AMOLED-1.75.pdf) - [waveshare_175_board_plan.md](/Users/pan/Desktop/Develop/esp32/LINGXIN_ESP32_S3/Doc/waveshare_175_board_plan.md) - [waveshare_175_porting_notes.md](/Users/pan/Desktop/Develop/esp32/LINGXIN_ESP32_S3/Doc/waveshare_175_porting_notes.md) 如果后续继续移植新板,建议优先参考: - [waveshare_175_porting_notes.md](/Users/pan/Desktop/Develop/esp32/LINGXIN_ESP32_S3/Doc/waveshare_175_porting_notes.md)