一、ESP32-S3开发板功能拆解(百思AI语音机器人板)

 1. 核心主控 ESP32-S3芯片:双核Xtensa LX7,内置AI向量加速指令,专门适配语音识别、TTS、大模型本地推理,自带Wi-Fi+蓝牙5,是AI语音硬件主流选型。

2. 板载外设功能

1). 显示模块:LCD彩色显示屏,可驱动UI界面、传感器数据可视化(图中温湿度界面就是该功能)

2). 传感采集 - DHT11:温湿度采集 - 光敏电阻:环境光照检测

3). 人机交互 - 3路物理按键:指令触发、唤醒交互 - 四路独立LED:状态指示灯

4). 音频链路(课程核心) - 喇叭输出接口:播放TTS合成语音 - 预留麦克风座:音频录入、拾音

5). 存储与拓展 - SD卡卡槽:存放音频文件、本地模型、配置文件 - USB接口:程序烧录、串口调试、供电 - 多路GPIO排针:外接传感器、继电器等拓展外设

6). 配套电路:电源稳压、BOOT 下载电路,简化开发调试流程

 3. 课程核心业务链路

 传感器采集数据 → ESP32-S3本地音频采集编码 → 联网对接DeepSeek大模型 → 意图识别 → TTS语音播报输出,完整AI语音硬件落地项目。

二、分阶段学习计划

阶段1:已完成(第1-2天)基础夯实 已掌握:C语言基础、ESP-IDF环境搭建、LCD屏驱动、板卡烧录、Trae辅助编码 

巩固任务

1. 整理DHT11、光敏传感器驱动代码,封装通用读取函数,做成可复用代码模块

基于STM32 HAL库的光敏传感器通用驱动模块代码,采用ADC读取模拟信号,包含初始化、读取原始值和转换光照强度功能。代码设计为可复用模块,支持多实例和参数配置。

头文件(light_sensor.h)

#ifndef LIGHT_SENSOR_H
#define LIGHT_SENSOR_H

#include "stm32f1xx_hal.h"

typedef struct {
    ADC_HandleTypeDef *hadc;       // ADC句柄指针
    uint32_t adc_channel;          // ADC通道
    float voltage_ref;             // 参考电压(V)
    float max_lux;                 // 最大量程(lux)
    uint32_t calibration_offset;   // 校准偏移量
} LightSensor_TypeDef;

void LightSensor_Init(LightSensor_TypeDef *sensor, ADC_HandleTypeDef *hadc, uint32_t channel);
uint32_t LightSensor_ReadRaw(LightSensor_TypeDef *sensor);
float LightSensor_ReadVoltage(LightSensor_TypeDef *sensor);
float LightSensor_ReadLux(LightSensor_TypeDef *sensor);

#endif
 

实现文件(light_sensor.c)

#include "light_sensor.h"
#include <math.h>

void LightSensor_Init(LightSensor_TypeDef *sensor, ADC_HandleTypeDef *hadc, uint32_t channel) {
    sensor->hadc = hadc;
    sensor->adc_channel = channel;
    sensor->voltage_ref = 3.3f;       // 默认参考电压3.3V
    sensor->max_lux = 1000.0f;       // 默认最大量程1000lux
    sensor->calibration_offset = 0;  // 默认无偏移
}

uint32_t LightSensor_ReadRaw(LightSensor_TypeDef *sensor) {
    ADC_ChannelConfTypeDef sConfig = {0};
    sConfig.Channel = sensor->adc_channel;
    sConfig.Rank = 1;
    sConfig.SamplingTime = ADC_SAMPLETIME_71CYCLES_5;
    HAL_ADC_ConfigChannel(sensor->hadc, &sConfig);

    HAL_ADC_Start(sensor->hadc);
    HAL_ADC_PollForConversion(sensor->hadc, 10);
    uint32_t raw_value = HAL_ADC_GetValue(sensor->hadc);
    HAL_ADC_Stop(sensor->hadc);

    return raw_value + sensor->calibration_offset;
}

float LightSensor_ReadVoltage(LightSensor_TypeDef *sensor) {
    uint32_t raw = LightSensor_ReadRaw(sensor);
    return (raw * sensor->voltage_ref) / 4095.0f;  // 12位ADC
}

float LightSensor_ReadLux(LightSensor_TypeDef *sensor) {
    float voltage = LightSensor_ReadVoltage(sensor);
    // 线性转换公式(根据实际传感器特性调整)
    return (voltage / sensor->voltage_ref) * sensor->max_lux;
}
 

使用示例

LightSensor_TypeDef light_sensor;

int main(void) {
    // HAL初始化代码...
    
    // 初始化光敏传感器(使用ADC1, 通道0)
    LightSensor_Init(&light_sensor, &hadc1, ADC_CHANNEL_0);
    light_sensor.max_lux = 2000.0f;  // 根据传感器规格修改
    
    while (1) {
        float lux = LightSensor_ReadLux(&light_sensor);
        printf("当前光照强度: %.2f lux\n", lux);
        HAL_Delay(1000);
    }
}
 

2. 梳理ESP32-S3 GPIO、中断、屏幕显示基础Demo,归档到个人项目仓库 

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐