2026 M-Design设计竞赛 - 用ESP32设计的智能照明系统
该项目使用了ESP32和光敏传感器,实现了智能照明的设计,它的主要功能为:通过语音进行开关灯,以及根据环境光的强度实现智能照明。
标签
语音识别
ESP32S3
光敏传感器
xusp99
更新2026-06-09
5

一、项目描述

随着物联网技术的飞速发展,智能家居设备逐渐融入人们的日常生活,语音交互作为一种自然、便捷的人机交互方式,在智能照明领域得到了广泛应用。 M-design 创意设计竞赛包含五大方向,其中方向一智能家居中包含有智能照明类别,本项目基于ESP32S3语音识别的智能控制照明系统,使用者通过解放双手,仅需通过简单的语音指令即可实现对LED灯的开关控制功能,另外系统配有光敏传感器,通过感知环境光的强度来实现智能照明,极大地提升了用户体验。

二、设计思路

系统使用的微处理器ESP32S3,搭载双核32位Xtensa LX7处理器,主频达240MHz,集成Wi-Fi/蓝牙双模模块,其最大优势在于内置8MB PSRAM和8MB Flash,可满足复杂语音处理任务的内存需求。音频输入推荐使用I2S接口外接MEMS麦克风阵列(如INMP441),采样率建议设置为16kHz以平衡精度与计算负载。

光敏传感器也是该项目重要元件之一,它是一种对外界光信号或光辐射具有响应或转换功能的敏感装置,属于传感器中的光敏元件类别。内部原理是感光元件:CdS 硫化镉光敏电阻 LDR,光照越强→阻值越小;无光→阻值 MΩ 级。分压电路:光敏电阻 + 固定电阻分压AO输出分压电压。

引脚

全称

作用

接线

VCC

电源

3.3V/5V 供电

开发板 3.3V/5V

GND

电源负极

开发板 GND

AO

模拟输出

电压随光照连续变化,强光电压低、暗光电压高,接 ADC 测亮度数值

MCU 模拟口 (A0)

DO

数字输出

高低电平开关,光线低于阈值 = 高电平,高于阈值 = 低电平,只判断亮 / 暗

MCU 普通 GPIO

另外系统使用硬件还包括光敏传感器、数字麦克风、功放模块及喇叭、LED灯,另外配有面包板及若干跳线。软件使用乐鑫的IDF进行设计开发及调试,使用乐鑫的esp-sr进行语音识别,根据配置的命令词来完成LED灯的开关控制,同时更加环境光的强弱,也能自动的进行灯的开和关。

下面是整个系统的连接示意图,包含管脚数字

三、软件部分

下面是项目的软件流程图。系统初始化后,监测麦克风,如果有识别到对应命令词,则执行对应的开关灯动作。同时光敏传感器也可以控制灯的开关操作。

下面列举部分重要的代码进行简单介绍。首先是初始化I2S端口,然后进行语音模型的读取及命令词的设置,这里设置了三个命令,分别对应开灯、关灯、拜拜。

    // 如果成功加载了multinet模型,添加自定义唤醒词
    if (model_data)
    {
        // 初始化命令系统
        esp_mn_commands_alloc(multinet, model_data);

        // 清除现有命令并添加自定义唤醒词(使用拼音+空格的方式)
        esp_mn_commands_clear();
        esp_mn_commands_add(1, "kai deng");
        esp_mn_commands_add(2, "guan deng");
        esp_mn_commands_add(3, "bai bai");
        esp_mn_commands_update();

        // 打印添加的唤醒词
        esp_mn_active_commands_print();
    }

以下是语音控制逻辑,用户通过语音控制LED灯的开关,当用户说开灯后,自动控制打开LED,反之当用户说关灯后,系统自动完成关灯动作。

esp_mn_results_t *mn_result = multinet->get_results(model_data);
if (mn_result != NULL && mn_result->num > 0)
{
int command_id = mn_result->phrase_id[0];
printf("检测到拼音唤醒词 ID: %d\n", command_id);

if (command_id == 0)
{
printf("执行命令: 0\n");
led_turn_on();
size_t bytes_written = 0;
i2s_write(I2S_OUT_PORT, (uint8_t*)dao, dao_len, &bytes_written, portMAX_DELAY);
}
else if (command_id == 1)
{
printf("执行命令:1\n");
led_turn_off();
size_t bytes_written = 0;
i2s_write(I2S_OUT_PORT, (uint8_t*)dao, dao_len, &bytes_written, portMAX_DELAY);

// 在这里添加您的处理逻辑 15010815122
}
else if (command_id == 2)
{
printf("执行命令:2\n");
// 在这里添加您的处理逻辑
}
}

下面是光敏传感器执行部分代码,通过接收到的光的强弱来控制灯光的打开和关闭。

    gpio_config_t config = {
        .pin_bit_mask = 1ULL << LIGHT_SENSOR_PIN,
        .mode = GPIO_MODE_INPUT,
        .pull_up_en = GPIO_PULLUP_DISABLE,
        .pull_down_en = GPIO_PULLDOWN_DISABLE,
        .intr_type = GPIO_INTR_DISABLE,
    };
    gpio_config(&config);

    while (1)
    {
         // 直接读取引脚电平:0 或 1
        int level = gpio_get_level(LIGHT_SENSOR_PIN);
        if (level == 0) {
            ESP_LOGI(TAG, "电平:%d → 低电平(无遮挡)", level);
            led_turn_off();
        } else {
            led_turn_on();
            ESP_LOGI(TAG, "电平:%d → 高电平(有遮挡)", level);
        }
        vTaskDelay(5000 / portTICK_PERIOD_MS);
    }

四、系统展示

下图为实物展示图。左侧是喇叭接在一个功放模块,左上对应的是数字麦克风,用于接收语音指令,左下部分是一个发光二极管,中间的MCU是整个系统的核心ESP32-S3,最右侧的面包板上面接入的是光敏传感器。当系统接收到开灯的语音指令或者光敏电阻感受到光线较弱的时候,发光二极管会亮起,反之灯灭。

五、心得体会

通过本次活动,加深了对乐鑫IDF的使用,了解了语音的输入和输出的编程,为后期应用到实际项目中积累了宝贵的经验。不足之处就是现在系统的语音控制和传感器控制是相互独立,会相互影响,后续要加强两者的联合控制,似的项目更好的应用于实际生活中。


附件下载
esp-led.zip
团队介绍
个人
评论
0 / 100
查看更多
硬禾服务号
关注最新动态
0512-67862536
info@eetree.cn
江苏省苏州市苏州工业园区新平街388号腾飞创新园A2幢815室
苏州硬禾信息科技有限公司
Copyright © 2024 苏州硬禾信息科技有限公司 All Rights Reserved 苏ICP备19040198号