2026 M-Design设计竞赛 - 用ESP32S3实现的语音控制电脑开机
该项目使用了XIAO esp32S3,实现了通过语音控制电脑开机的设计,它的主要功能为:使用命令字,控制电脑开机。。
标签
嵌入式系统
ESP32S3
语音唤醒
命令字识别
happy
更新2026-06-09
8

一、项目介绍

家里有一台老电脑,安装了Ubuntu系统。用的不多,塞在桌子底下的角落里。每次需要使用,需要钻到桌子底下去开机,空间很逼仄,操作非常麻烦。借着这次“2026 贸泽电子 M-Design 创意设计大赛”决定制作一个通过语音控制的电脑开机键,来远程语音控制电脑的开机。基本要求有:

1、要安全可靠,不能随意误触发。只能在我需要时开机,其余时间不能随意误触发。

2、通过语音控制,要求识别准确。

3、无需联网,不需要依赖wifi、蓝牙、红外等无线设备,遥控器的管理实在是太麻烦。

二、硬件选择

依照以上需求,再加上大赛规则,这里硬件我选择了 Seeed Studio家的XIAO ESP32S3 Sense。

Seeed Studio XIAO ESP32S3 Sense 采用高集成度的 Xtensa 处理器 ESP32-S3R8 SoC,支持 2.4GHz WiFi 和低功耗蓝牙® BLE 5.0 双模,适用于多种无线应用。它具有锂电池充电管理功能。作为 Seeed Studio XIAO ESP32S3 的高级版本,该电路板配备了一个插入式 OV2640 摄像头传感器,可显示 1600*1200 的全分辨率。它的底座甚至兼容 OV5640,支持高达 2592*1944 的分辨率。电路板还配有数字麦克风,用于语音感应和音频识别。SenseCraft AI 可为XIAO ESP32S3 Sense 提供各种预训练的人工智能(AI)模型和无代码部署。本项目未使用到摄像头,所以摄像头就没有安装。

image.png

三、任务选择

本项目主要功能为控制角落里的电脑开机。应该属于 方向一:智能家居。

、任务实现

本次开发使用ESP-IDF5.5进行开发,选择的编程工具为Vscode。乐鑫官方的ESP-IDF中有提供开源的语音解决方案esp-sr,效果非常不错。

image.png

第一步:解决供电问题。 XIAO ESP32S3 Sense是要塞到电脑机箱内部的,计划使用电脑电源供电。PC机在关机后,依然会有5V电源输出,提供给电脑主板使用。

73626e7639749f766e938008f0ecb5bd.jpg

从电脑电源插座中,绿色线的位置接出电源线。通过万用表测量是5V电压,连接给XIAO ESP32S3 Sense做为电源线使用。但是遇到了问题,ESP32S3 始终不能正常工作,上网查询,说电源标准,PC机这路5V电源输出,在关机状态下,应该能输出700ma的电流,但是不知为啥,我这台机器的关机电流就是无法带动ESP32S3工作。最后采用个折中办法,给ESP32S3连接了个锂电池,同时也连接这个PC机的5V电源。让5V电源通过XIAO ESP32S3 Sense给电池充电,同时电池做为主要的供电来源。

image.png

第二步:语音唤醒和命令识别。

image.png

dependencies:
  espressif/esp-sr: ^2.1.0

使用esp-sr组件,在idf_component.yml文件中添加以上内容。XIAO ESP32S3 Sense开发板,带了一颗PDM的硅麦。通过I2S总线,读取这颗麦克风。使用16000的采样率。

static esp_err_t bsp_i2s_init(i2s_port_t i2s_num, uint32_t sample_rate, int channel_format, int bits_per_chan)
{
    esp_err_t ret_val = ESP_OK;


#if ESP_IDF_VERSION >= ESP_IDF_VERSION_VAL(5, 0, 0)
    i2s_chan_config_t chan_cfg = I2S_CHANNEL_DEFAULT_CONFIG(i2s_num, I2S_ROLE_MASTER);


    ret_val |= i2s_new_channel(&chan_cfg, NULL, &rx_handle);
    i2s_pdm_rx_config_t pdm_rx_cfg = {
        .clk_cfg = I2S_PDM_RX_CLK_DEFAULT_CONFIG(s_play_sample_rate),
        /* The data bit-width of PDM mode is fixed to 16 */
        .slot_cfg = I2S_PDM_RX_SLOT_DEFAULT_CONFIG(I2S_DATA_BIT_WIDTH_16BIT, I2S_SLOT_MODE_MONO),
        .gpio_cfg = {
            .clk = GPIO_NUM_42,
            // Only ESP32-S3 can support 4-line PDM RX
            .dins = {
                GPIO_NUM_41,
            },
            .invert_flags = {
                .clk_inv = false,
            },
        },
    };
    ret_val |= i2s_channel_init_pdm_rx_mode(rx_handle, &pdm_rx_cfg);
    ret_val |= i2s_channel_enable(rx_handle);
#else
    // i2s_config_t i2s_config = I2S_CONFIG_DEFAULT(16000, I2S_CHANNEL_FMT_ONLY_LEFT, 32);
    i2s_config_t i2s_config = I2S_CONFIG_DEFAULT(sample_rate, I2S_CHANNEL_FMT_ONLY_LEFT, bits_per_chan);


    i2s_pin_config_t pin_config = {
        .bck_io_num = GPIO_I2S_SCLK,
        .ws_io_num = GPIO_I2S_LRCK,
        .data_out_num = GPIO_I2S_DOUT,
        .data_in_num = GPIO_I2S_SDIN,
        .mck_io_num = GPIO_I2S_MCLK,
    };


    ret_val |= i2s_driver_install(i2s_num, &i2s_config, 0, NULL);
    ret_val |= i2s_set_pin(i2s_num, &pin_config);
#endif


    return ret_val;
}

唤醒词通过配置来进行选择,这里我选择了“喵喵同学”和“小鸭小鸭”。系统唤醒后,就进入命令词识别阶段。

image.png

命令词通过拼音方式提供给系统,这里只有一个开机动作,给了三个命令字,都对应开机动作。

    esp_mn_commands_add(1, (char *)"da kai dian nao");
    esp_mn_commands_add(1, (char *)"qi dong dian nao");
    esp_mn_commands_add(1, (char *)"kai ji");

最后一步——开机。PC机的开机还是挺简单的,只需要将主板上PWR拉低电平,并持续一段时间即可触发电脑开机。所以这里的处理逻辑就是当收到唤醒词后,识别命令字——识别成功后,拉低GPIO(与电脑PWR连接)并持续100ms,然后立即退出唤醒模式。即实现了开机动作。

               gpio_set_direction(OPENPC_GPIO, GPIO_MODE_OUTPUT);
                gpio_set_level(OPENPC_GPIO, 0);
                vTaskDelay(100 / portTICK_PERIOD_MS);
                gpio_set_level(OPENPC_GPIO, 1);
                gpio_set_direction(OPENPC_GPIO, GPIO_MODE_INPUT);
                detect_flag=0;

五、效果展示

将机箱上的开机按键连接的杜邦线拆除,更换为自己的杜邦线,连接到ESP32S3上。

9629e579c7074d1c51125245f045c0b6.jpg

26671a8f1e12104cea595cf88452b424.jpg

从PC机上接出5V电源(绿线,关机后依然有电),通过Type-c接头给ESP32S3供电,同时还连接了一节锂电池供电。

image.png

当听到唤醒词时,板载的LED灯开始闪烁,等待命令字的发出。

image.png

听到开机命令字,开机。

image.png

六、心得体会

感谢贸泽电子、感谢硬禾科技。参加这次大赛,没有自己再去打板子,直接使用了Seeed Studio XIAO ESP32S3 Sense成品开发板。板子很小巧,安装在机箱内部,基本不可见,通过语音控制电脑的开机,语音识别非常准确且灵敏。功能虽然简单,却实实在在的解决了生活中的痛点。



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