阶段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>
95 lines
4.7 KiB
C
95 lines
4.7 KiB
C
#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_
|