若该文为原创文章,转载请注明原文出处。
一、 引言
(一)研究背景及意义
随着物联网(IoT)、人工智能(AI)和嵌入式技术的飞速发展,智能家居从概念逐步走向千家万户,成为提升生活品质、实现家居智能化、节能化的重要途径。传统家居控制系统多依赖于手机APP或物理开关,交互方式单一,未能完全解放用户双手。语音识别技术作为一种自然、便捷的人机交互方式,将其与智能家居控制系统深度融合,能够极大地增强用户体验,特别适用于老人、儿童及行动不便的特殊群体。本研究旨在设计并实现一套以STM32微控制器为核心,集成多传感器数据采集、本地语音控制、远程APP监控、云平台数据交互于一体的综合性智能家居系统,对推动智能家居技术的普及和应用具有重要的实践意义。
(二)国内外研究现状
目前,国内外智能家居市场呈现蓬勃发展的态势。国外以Amazon Echo、Google Home等智能音箱为代表的产品,依托强大的云处理能力和丰富的生态链,实现了广泛的语音控制。国内小米、天猫精灵、百度等公司也推出了类似产品,构建了各自的智能家居体系。这些方案大多依赖于云端进行语音识别和处理,对网络稳定性要求高,且存在隐私泄露风险。
在学术和开源领域,基于ESP32、树莓派和STM32的本地化智能家居解决方案也层出不穷。STM32凭借其出色的性能、丰富的外设资源和低功耗特性,在实时控制和传感器数据处理方面具有独特优势。结合本地离线语音识别模块(如SU-03T),可以在无网络或网络不佳的情况下提供快速、稳定的语音控制响应,保护用户隐私,是当前研究的一个热点方向。
(三)论文研究内容
本论文主要研究内容包括:
-
设计以STM32F103C8T6为主控芯片的系统硬件平台,集成温湿度(DHT11)、空气质量(MQ-135)、烟雾浓度(MQ-2)和光照强度(GY-30)传感器。
-
选用SU-03T离线语音识别模块,实现本地化的语音指令识别,用于控制灯光、风扇、空调(继电器模拟)等执行单元。
-
通过0.96寸OLED显示屏实时显示环境数据和系统状态,并通过独立按键设置各环境参数的报警阈值。
-
集成ESP8266 WiFi模块,将传感器数据上传至中国移动OneNet云平台,并实现通过手机APP远程监控数据、控制设备及设置阈值。
-
设计报警功能,当任何环境参数超过阈值时,触发蜂鸣器报警,并通过云平台向APP推送报警信息。
-
完成系统软硬件的联调测试与性能优化,最终形成一个稳定、可靠、交互方式多样的智能家居原型系统。
二、 系统总体设计
(一)系统架构
本系统采用分层式架构,主要包括感知层、控制层、网络层和应用层。系统总体架构框图如下所示:
图1:系统总体架构框图

(二)功能模块划分
-
主控模块:STM32F103C8T6,作为系统大脑,负责调度所有任务,包括数据采集、处理、逻辑判断、通信控制等。
-
传感器模块:负责采集环境数据(温湿度、空气质量、烟雾、光照)。
-
语音识别模块:SU-03T,识别特定语音指令,并将识别结果串口发送给STM32。
-
通信模块:ESP8266,负责与OneNet云平台建立MQTT/HTTP连接,实现数据上下行。
-
执行模块:继电器组,接收STM32指令,控制灯光、风扇、空调等外设的开关。
-
显示与输入模块:OLED用于显示,按键用于本地设置阈值。
-
报警模块:有源蜂鸣器,在异常情况下发出警报。
-
云平台与APP:OneNet提供数据中转与存储,APP作为远程用户界面。
三、 硬件设计与实现
(一)主控模块选型及介绍
采用STM32F103C8T6(核心板俗称"Blue Pill")。该芯片基于ARM Cortex-M3内核,主频72MHz,具有64KB Flash、20KB RAM,资源丰富,包括多个UART、I2C、SPI、ADC等外设,完全满足本系统多外设、多任务的需求。
(二)传感器模块选型及电路设计
-
温湿度传感器DHT11:单总线通信,电路简单,仅需一个4.7K上拉电阻。
-
空气质量传感器MQ-135:模拟输出,接入STM32的ADC引脚,通过ADC采集模拟电压值。
-
烟雾传感器MQ-2:同MQ-135,为模拟传感器,接入另一个ADC通道。
-
光照传感器BH1750 (GY-30) :I2C通信,精度高,电路仅需2个上拉电阻。
*电路设计:所有传感器VCC接3.3V/5V,GND共地,信号线按通信协议接至STM32对应引脚,模拟传感器需注意信号滤波。*
(三)通信模块选型及配置
采用ESP-01S ESP8266模块。该模块支持IEEE 802.11 b/g/n协议,可通过AT指令或SDK进行开发。本设计采用AT指令模式,通过UART与STM32通信。电路连接:ESP8266的TX->STM32的RX1 (PA10)
, RX->STM32的TX1 (PA9)
,并需单独稳压供电。
(四)执行模块选型及驱动电路
采用5V继电器模块。STM32的IO口驱动能力不足,需通过一个三极管(如S8050)或光耦来驱动继电器的线圈。电路图如下:
图2:继电器驱动电路示意图

(五)显示模块选型及接口电路
采用0.96寸I2C接口的OLED显示屏(SSD1306驱动)。仅需连接4根线:VCC (3.3V)
, GND
, SCL (PB6)
, SDA (PB7)
。I2C总线需接上拉电阻(通常模块已集成)。
(六)电源模块设计
系统采用USB供电(5V)。STM32核心板及部分传感器由板载LDO转换为3.3V供电。ESP8266和继电器模块需5V供电,需确保电源总功率充足,建议使用外部5V/2A适配器。
四、 软件设计与实现
(一)开发环境搭建
使用Keil uVision5 MDK作为主要开发环境,安装STM32F1xx Device Family Pack。使用STM32CubeMX进行引脚分配、时钟树配置和生成初始化代码框架,大大提高开发效率。
(二)系统初始化
系统上电后,首先初始化所有外设:
int main(void) {
HAL_Init();
SystemClock_Config();
MX_GPIO_Init();
MX_ADC1_Init();
MX_I2C1_Init();
MX_USART1_UART_Init(); // For ESP8266
MX_USART2_UART_Init(); // For SU-03T
/* Initialize all peripherals */
OLED_Init();
DHT11_Init();
ESP8266_Init(); // Send AT commands to config WiFi & OneNet
SU03T_Init(); // Check voice module connection
Buzzer_Off();
Relay_Off(ALL);
/* Start FreeRTOS Scheduler if using OS */
// osKernelStart();
while (1) {
// Super Loop Task Scheduler
Task_Sensor_Read();
Task_Voice_Process();
Task_Cloud_Update();
Task_Display_Update();
Task_Key_Scan();
HAL_Delay(100);
}
}
(三)传感器数据采集与处理
MQ-2:
#define MQ2_ADC_CHANNEL hadc1, ADC_CHANNEL_0
#define SAMPLE_NUM 10
uint16_t Get_MQ2_Value() {
uint32_t sum = 0;
uint16_t adc_value;
for(int i=0; i<SAMPLE_NUM; i++) {
HAL_ADC_Start(&MQ2_ADC_CHANNEL);
HAL_ADC_PollForConversion(&MQ2_ADC_CHANNEL, 50);
adc_value = HAL_ADC_GetValue(&MQ2_ADC_CHANNEL);
sum += adc_value;
HAL_Delay(5);
}
return (uint16_t)(sum / SAMPLE_NUM);
}
(四)语音控制功能实现
SU-03T通过UART与STM通信。需在SU-03T官方平台配置语音指令和对应的串口输出数据。STM32解析串口数据并执行相应动作。
// 在USART2中断服务函数中解析数据
void USART2_IRQHandler(void) {
if(__HAL_UART_GET_FLAG(&huart2, UART_FLAG_RXNE)) {
uint8_t recv_char = (uint8_t)(huart2.Instance->DR & 0x00FF);
if(recv_char == '\n') { // End of a command
voice_cmd_buf[voice_index] = '\0';
Voice_Cmd_Parse(voice_cmd_buf);
voice_index = 0;
} else {
voice_cmd_buf[voice_index++] = recv_char;
}
}
}
void Voice_Cmd_Parse(char* cmd) {
if(strstr(cmd, "open light")) {
Relay_On(RELAY_LIGHT);
OLED_ShowString(0, 0, "Light: ON ");
}
else if(strstr(cmd, "close light")) {
Relay_Off(RELAY_LIGHT);
OLED_ShowString(0, 0, "Light: OFF");
}
// ... Parse other commands like fan, air condition
}
(五)远程控制功能实现
STM32通过AT指令控制ESP8266连接OneNet并上传数据(HTTP/MQTT例程)。同时,STM32需解析从OneNet下发的指令。
关键代码片段(HTTP POST上传数据):
void ESP8266_HTTP_PostData(float temp, float humi) {
char at_cmd[512];
sprintf(at_cmd, "AT+HTTPCLIENT=2,0,\"http://api.heclouds.com/devices/12345678/datapoints?type=3\","
"\"api.heclouds.com\",,\"X-Api-Key: yourapikeyhere\r\nContent-Type: application/json\r\n\","
"\"{\\\"datastreams\\\":[{\\\"id\\\":\\\"temp\\\",\\\"datapoints\\\":[{\\\"value\\\":%.1f}]},"
"{\\\"id\\\":\\\"humi\\\",\\\"datapoints\\\":[{\\\"value\\\":%.1f}]}]}\",0\r\n",
temp, humi);
ESP8266_Send_Cmd(at_cmd, "OK", 5000);
}
(六)报警功能实现
在主循环中判断传感器数据是否超出阈值,若超出则启动报警。
void Task_Sensor_Read() {
int smoke_value = Get_MQ2_Value();
if(smoke_value > SMOKE_THRESHOLD) {
Buzzer_On();
OLED_ShowString(0, 4, "!SMOKE ALARM!");
// Also can push alarm message to cloud
} else {
Buzzer_Off();
}
// ... Check other sensors
}
五、 系统测试与优化
(一)测试方案
-
单元测试:逐一测试各模块功能,如传感器数据准确性、语音识别率、继电器开关、WiFi连接稳定性、OLED显示等。
-
集成测试:将全部模块集成后,测试系统整体功能。模拟各种场景:正常环境、高温高湿、烟雾超标、光照变化等,观察系统响应(本地显示、语音控制、远程上报、报警)是否正确。
-
压力与稳定性测试:长时间运行系统,检查是否存在内存泄漏、死机、网络断连重发等问题。
(二)测试结果与分析
经测试,各传感器数据采集基本准确,DHT11存在±1℃的误差。SU-03T在安静环境下识别率可达95%以上,但在嘈杂环境中有所下降。ESP8266连接OneNet成功率高,数据上传间隔可稳定在5s一次。整体系统运行稳定,实现了预设的所有功能。
(三)系统优化
-
软件优化:引入实时操作系统(如FreeRTOS)进行任务调度,提高系统响应速度和稳定性。增加网络异常处理机制和断线重连功能。
-
算法优化:采用更复杂的数字滤波算法(如卡尔曼滤波)提高传感器数据准确性。增加语音指令的冗余度,提高识别鲁棒性。
-
硬件优化:为麦克风增加抗噪设计,提高语音识别距离和精度。电源部分增加滤波电容,提高系统稳定性。
六、 结论与展望
(一)论文总结
本论文成功设计并实现了一套基于STM32的多功能智能家居语音控制系统。系统集环境监测、语音控制、远程监控、报警功能于一体,运行稳定,交互方式自然便捷。硬件上合理选型并设计了电路,软件上实现了模块化编程,完成了预期的设计目标。该系统为智能家居的本地化、低成本解决方案提供了一个可行的实践案例。
(二)未来展望
未来工作可从以下几个方面展开:
-
功能扩展:增加更多类型的传感器和执行器,如门窗磁感应、摄像头监控、窗帘电机等。
-
技术升级:采用性能更强的STM32芯片或ESP32,尝试集成更先进的本地自然语言处理(NLP)模型,实现更复杂的语音交互。
-
平台与生态:对接更多云平台(如阿里云、腾讯云)和智能语音助手(如天猫精灵、小爱同学),融入更广阔的智能家居生态。
-
低功耗设计:优化电源管理,使传感器节点进入低功耗休眠模式,打造电池供电的无线传感网络,适用于更多场景。
如有侵权,或需要完整代码,请及时联系博主。