Rdzleo c24a9bc162 feat: 集成 dzbj LVGL 显示模块 + 配网模式内存优化
阶段1: 将 dzbj 项目的 LVGL 8.3.11 LCD 显示集成到 AI小智 主项目,
开机显示 ScreenHome 界面,同时优化配网模式下的内存使用,
确保 WiFi+BLE+LVGL 三者共存运行。

## 新增功能

### dzbj 显示模块集成
- 新增 main/dzbj/ 目录,移植 LCD 驱动(ST77916 QSPI)、触摸驱动(CST816S)、
  LVGL 初始化和 SquareLine Studio UI 界面
- I2C 总线共享:dzbj 触摸控制器复用主项目的 I2C_NUM_1 总线
- GPIO 冲突解决:LED(GPIO21)、Touch1(GPIO1)、Touch4(GPIO7) 改为 NC,
  电池 ADC 从 GPIO6 改为 GPIO3
- 添加 LVGL、esp_lcd_st77916、esp_lcd_touch_cst816s 等组件依赖
- managed_components 纳入版本管理

### 配网模式轻量化启动
- BoxAudioCodec: 新增 output_only 模式,仅创建 I2S TX 通道(省 ~13KB DMA)
  跳过 ES7210 ADC 初始化(省 ~2-4KB)
- AudioCodec: 新增 StartOutputOnly() 方法,仅启用扬声器输出
- Application: 配网模式跳过 Opus 编码器、输入重采样器、协议初始化、
  天气位置检测等网络业务
- 板级构造函数: 配网模式跳过电池检测、IMU传感器、PowerSaveTimer

### WifiBoard 配网流程修复
- NeedsProvisioning() 静态方法: 读取 NVS force_ap 和 SSID 列表,
  用于提前判断配网模式
- force_ap 竞态修复: 构造函数不再清零 force_ap,改在 StartNetwork() 清零,
  确保 NeedsProvisioning() 能正确读到 force_ap=1
- Application 缓存 provisioning_mode_ 成员变量,避免重复读 NVS

### BLE 配网重启修复
- 配网成功后用 esp_timer 延迟重启替代 xTaskCreate,
  避免内存紧张时任务创建失败导致设备不重启
- 注释掉 WiFi 连接成功后的 MAC 地址发送步骤

### sdkconfig 内存优化
- BT_ALLOCATION_FROM_SPIRAM_FIRST=y (BLE 动态分配优先 PSRAM)
- SPIRAM_MALLOC_RESERVE_INTERNAL=32768
- NVS_ALLOCATE_CACHE_IN_SPIRAM=y
- WiFi 静态缓冲区数量优化 (RX=10, TX=8)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-27 17:07:51 +08:00

95 lines
4.7 KiB
C
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#ifndef _BOARD_CONFIG_H_
#define _BOARD_CONFIG_H_
// Movecall Moji configuration
#include <driver/gpio.h> // 包含GPIO驱动库
// 音频采样率配置16kHz
#define AUDIO_INPUT_SAMPLE_RATE 16000 // 输入采样率
#define AUDIO_OUTPUT_SAMPLE_RATE 16000 // 输出采样率
// I2S音频接口GPIO配置
#define AUDIO_I2S_GPIO_MCLK GPIO_NUM_16 // 主时钟 MCLK GPIO16
#define AUDIO_I2S_GPIO_WS GPIO_NUM_45 // 字选择线 LRCK GPIO45
#define AUDIO_I2S_GPIO_BCLK GPIO_NUM_9 // 位时钟 SCLK GPIO09
#define AUDIO_I2S_GPIO_DIN GPIO_NUM_10 // 数据输入(麦克风) DSDIN GPIO8
#define AUDIO_I2S_GPIO_DOUT GPIO_NUM_8 // 数据输出(扬声器) ASDOUT GPIO8
// ES8311音频编解码器配置
#define AUDIO_CODEC_PA_PIN GPIO_NUM_48 // 功放使能引脚 PA_CTRL GPIO48
#define AUDIO_CODEC_I2C_SDA_PIN GPIO_NUM_17 // I2C数据引脚 ES_I2C_SDA GPIO17
#define AUDIO_CODEC_I2C_SCL_PIN GPIO_NUM_18 // I2C时钟引脚 ES_I2C_CLK GPIO18
#define AUDIO_CODEC_ES8311_ADDR ES8311_CODEC_DEFAULT_ADDR // ES8311音频编解码器I2C地址
// ES7210音频编解码器ADC地址与参考通道开关
#define AUDIO_CODEC_ES7210_ADDR ES7210_CODEC_DEFAULT_ADDR
#define AUDIO_INPUT_REFERENCE 0
// 系统指示灯与启动按钮
#define BUILTIN_LED_GPIO GPIO_NUM_NC // 已被 LCD D3 占用GPIO21
#define BOOT_BUTTON_GPIO GPIO_NUM_0 // BOOT按钮 BOOT GPIO0
// 按键GPIO定义
#define KEY1_GPIO GPIO_NUM_NC // KEY1 - 本项目不启用该 按键
#define KEY2_GPIO GPIO_NUM_NC // KEY2 - 本项目不启用该 按键
#define KEY4_GPIO GPIO_NUM_4 // KEY4 - 播放故事(发送文本消息) Stoey GPIO04
// ADC电量检测引脚GPIO6 已被触摸 RST 占用,改为 GPIO3
#define BATTERY_ADC_GPIO GPIO_NUM_3 // 电池电压检测引脚GPIO3
#define BATTERY_ADC_CHANNEL ADC_CHANNEL_2 // GPIO3 对应 ADC1_CHANNEL_2
#define BATTERY_ADC_UNIT ADC_UNIT_1 // 使用ADC单元1
// 电容触摸板按钮开关0=禁用1=启用)
// 本项目不使用触摸按钮功能禁用以节约资源touch_pad驱动、ISR、FreeRTOS任务、队列
#define ENABLE_TOUCH_PAD_BUTTONS 0
// 六路触摸按键定义Touch1/Touch4 已被 LCD 占用)
#define TOUCH1_GPIO GPIO_NUM_NC // 已被 LCD 背光 EN 占用GPIO1
#define TOUCH2_GPIO GPIO_NUM_2 // Touch2 GPIO02
#define TOUCH3_GPIO GPIO_NUM_15 // Touch3 GPIO15
#define TOUCH4_GPIO GPIO_NUM_NC // 已被 LCD RST 占用GPIO7
#define TOUCH5_GPIO GPIO_NUM_NC // Touch5 (未连接)
#define TOUCH6_GPIO GPIO_NUM_NC // Touch6 (未连接)
// UART引脚定义 原4G接口引脚
#define UART_TX_PIN GPIO_NUM_37 // UART TX 引脚 U0TXD GPIO37
#define UART_RX_PIN GPIO_NUM_36 // UART RX 引脚 U0RXD GPIO36
// 音量按键定义
#define VOLUME_UP_BUTTON_GPIO GPIO_NUM_NC // 音量加 (未连接)
#define VOLUME_DOWN_BUTTON_GPIO GPIO_NUM_NC // 音量减 (未连接)
// 显示器配置 - 无显示器板载,引脚设为无效
#define DISPLAY_SDA_PIN GPIO_NUM_NC // 未连接
#define DISPLAY_SCL_PIN GPIO_NUM_NC // 未连接
#define DISPLAY_WIDTH 128 // 保留参数
#define DISPLAY_HEIGHT 128 // 保留参数
#define DISPLAY_MIRROR_X false // X轴镜像禁用
#define DISPLAY_MIRROR_Y false // Y轴镜像禁用
#define DISPLAY_SWAP_XY false // 坐标轴不交换
#define DISPLAY_OFFSET_X 0 // X轴偏移
#define DISPLAY_OFFSET_Y 0 // Y轴偏移
// 显示器背光控制(未使用)
#define DISPLAY_BACKLIGHT_PIN GPIO_NUM_NC // 背光控制引脚
#define DISPLAY_BACKLIGHT_OUTPUT_INVERT false // 输出不反
// // ES7210功能开关与默认参数按需启用
// #define AUDIO_ES7210_ENABLE 0
// #define ES7210_INPUT_SAMPLE_RATE 16000
// #define ES7210_OUTPUT_SAMPLE_RATE 16000
// #define ES7210_MIC_GAIN_DB 18
// #define ES7210_LINEIN_GAIN_DB 0
// #define ES7210_MCLK_FREQUENCY_HZ 12288000
// #define ES7210_BCLK_FREQUENCY_HZ 1024000
// #define ES7210_LRCK_FREQUENCY_HZ ES7210_INPUT_SAMPLE_RATE
// #define ES7210_POWER_ENABLE_GPIO GPIO_NUM_NC
// #define ES7210_POWER_ON_LEVEL 1
// #define ES7210_I2C_SDA_PIN GPIO_NUM_17
// #define ES7210_I2C_SCL_PIN GPIO_NUM_18
// #define ES7210_I2C_ADDRESS 0x40
// #define ES7210_I2C_PORT I2C_NUM_0
// #define ES7210_I2C_SPEED_HZ 400000
#endif // _BOARD_CONFIG_H_