随着物联网技术的发展,智能家居的需求不断增加,但仍存在设备兼容性差和成本高等问题。本文提出了一种基于STM32单片机的多模式智能家居控制系统,该系统通过温湿度、光照强度和烟雾浓度传感器与OLED显示屏实现环境监测和实时数据显示。
它结合了ASRPRO语音识别模块与ESP8266 Wi-Fi模块,提供手动控制、自动调节、语音识别和远程控制四种操作模式,能够智能控制灯光、风扇、窗帘和加湿器等设备。测试结果表明,该系统在环境监测精度和语音响应速度方面表现优异,为低成本、高兼容性的智能家居解决方案奠定基础。
013D实景地图

图1 系统总体设计框图
本系统旨在实现家庭中常用电器的智能控制,设计了一款基于STM32单片机的多控制智能家居系统,整体设计框图如图1所示。该系统集成了环境检测、自动控制、语音识别和远程通信等多种功能,采用模块化结构。主要由主控模块、传感器采集模块、执行控制模块、语音识别模块以及显示与通信模块构成。各模块通过串口、I2C、PWM和GPIO等接口进行互联,由主控芯片协调处理,实现对包括灯光、风扇、窗帘和加湿器在内的多种设备的多模式智能控制。
02 硬件设计
2.1 主控模块电路设计
主控模块在电路设计中以STM32F103C8T6最小系统板为基础,核心电路内部主要由时钟电路、复位电路、电源稳压电路及引脚接口组成。外部8MHz晶振通过内建PLL实现主频上升,为系统提供稳定的时钟源;复位端接入RC延时电路,确保单片机在上电或干扰下能可靠复位;电源模块通过AMS1117稳压器将5V电压稳定输出至3.3V,为核心逻辑部分供电。整体硬件电路设计图如图2所示。
2.2 语音识别模块电路设计
语音识别模块采用ASRPRO模块,通过串口方式与STM32主控进行通信。模块的PA2引脚连接至主控的PB11引脚,用于向主控发送识别后的语音指令编码。模块由5V电源供电,GND接系统公共地线。该模块识别结果以串口编码形式传输,主控接收后解析执行对应操作,完成语音控制功能。
2.3 无线通信模块电路设计
无线通信模块选用ESP8266-01S,用于实现系统与云平台之间的Wi-Fi数据通信。模块采用串口(UART)方式与主控芯片进行双向通信,TXD引脚连接至STM32的PA3(USART1_RX),RXD引脚连接至PA2(USART1_TX),实现主从数据交互。模块通过AT指令配置为STA模式后可连接路由器,结合机智云平台实现远程数据上传与控制命令下发。
图2 整体硬件电路设计图
2.4 传感器模块电路设计
温湿度检测模块采用DHT11数字型传感器,该模块只需一个数据引脚与主控相连,便可通过单总线方式与STM32主控进行通信。模块的VCC端接5V电源,GND接地,OUT引脚连接至STM32的PB3引脚。模块周期性将温湿度数据打包输出,主控芯片通过定时轮询读取并进行解析。
烟雾检测模块使用MQ-2传感器,能够检测烟雾、液化气、酒精等可燃性气体浓度。该模块输出模拟电压信号,主控通过ADC接口进行采样判断。模块供电为5V,GND接地,A0引脚连接至STM32的PA4引脚,实时读取电压值。当空气中烟雾浓度升高,输出电压随之变化,主控将采样值与设定阈值比较,从而判断是否触发报警。
光照检测模块选用GY-302光照传感器,通过I2C接口与STM32主控进行通信。模块VCC引脚连接至3.3V电源,GND接地,SCL与SDA引脚分别连接至STM32的PB4和PB5引脚,构成I2C总线通信。模块上电后可直接输出以勒克斯(lx)为单位的光照强度数据,主控通过I2C协议读取测量值并用于判断是否启用照明装置。
2.5 屏幕显示模块电路设计
显示模块采用0.96英寸OLED屏幕,用于在本地实时显示系统采集的环境数据与设备运行模式。该模块采用I2C通信方式连接主控,SCL引脚与STM32的PB1相连,SDA引脚连接至PB0,供电电压为3.3V,GND接地。OLED模块支持字符、图形和动态刷新显示,模块内部已集成驱动芯片SSD1306,可直接通过标准I2C协议与主控进行数据通信。
2.6 执行机构模块电路设计
步进电机驱动电路运用ULN2003驱动板,将其与28BYJ-48步进电机以及STM32主控相连,共同协同工作,以此来模拟窗帘开合的功能,ULN2003内部整合了达林顿管阵列,可直接接收STM32输出的脉冲信号,驱动步进电机实现转动,驱动模块的四个输入控制信号IN1至IN4引脚,分别与STM32的PA8、PA11、PA12、PA15引脚相连接,其目的在于接收方向以及步进控制信号,而OUT1至OUT4则连接着步进电机的四相绕组。该模块由外部5V电源进行供电,COM端连接电源正极,GND接地,主控借助定时器产生脉冲序列,对电机转动的步数以及方向加以控制,再配合ULN2003的高电流输出能力,保证电机可平稳地运行。
继电器模块用于控制加湿器的开关,采用5V直流继电器,通过STM32的PB13引脚输出高低电平信号驱动。继电器控制端通过NPN三极管与主控连接,基极串联限流电阻连接至PB13,发射极接地,集电极连接继电器线圈。当PB13输出高电平时,三极管导通,继电器吸合,加湿器通电工作;低电平时断开,加湿器停止工作。
PWM控制电路用于调节LED亮度与风扇转速,分别由STM32的PB14和PB15引脚输出PWM信号,实现对输出功率的连续调节。主控芯片通过定时器模块配置不同频率和占空比的PWM波形,输出至LED和风扇控制电路。LED驱动采用MOS管,栅极通过限流电阻连接PB14,漏极串联LED灯至5V电源,源极接地。风扇通过PB15引脚连接驱动电路。PWM信号经滤波后转换为模拟电压,从而实现控制风扇转速和LED亮度。
蜂鸣器用于烟雾浓度超标时发出声音警报。采用有源蜂鸣器,工作电压为5V,通过STM32的PA0引脚控制。PA0连接NPN三极管基极,发射极接地,集电极接蜂鸣器负极,正极接电源。当PA0输出高电平时,三极管导通,蜂鸣器鸣响。在电路中加入了一个拨码开关SW1,可以用来切换蜂鸣器的工作状态,避免蜂鸣器始终处于响声状态。
2.7 按键模块电路设计
按键模块采用四路独立按键,分别连接至STM32的PB6~PB9引脚,用于模式切换、阈值设置和设备手动控制。每个按键一端接至IO口,另一端接地,同时在IO口与电源之间接入10kΩ上拉电阻,确保按键未按下时IO保持高电平。按键按下后引脚电平变为低,主控通过轮询方式检测按键状态,为避免抖动干扰,软件中设置消抖延时处理逻辑,确保操作识别准确。
2.8 供电模块电路设计
供电模块负责为整个系统提供稳定的工作电压,确保各功能模块正常运行。系统使用外部DC 5V电源适配器作为主输入电源,经过AMS1117-3.3稳压芯片将电压降至3.3V,供主控STM32以及其他3.3V模块使用,继电器、风扇、语音模块等设备直接使用5V供电。
03软件设计
3.1 系统主程序设计
主程序流程图如图3所示。在系统上电后,首先进行定时器和GPIO端口的初始化,随后系统便进入到主循环之中,传感器会实时采集环境数据,然后在OLED屏幕上展示当前状态信息,还会把传感器数据借助Wi-Fi模块上传至机智云平台,以此达成远程数据同步。
系统有四种控制模式,分别是手动控制、自动控制、语音控制以及远程控制,用户可依靠语音识别、按键以及手机APP来切换控制模式并下达具体指令。在手动控制模式下,可通过按键对灯光、风扇、窗帘、加湿器等执行设备直接实施控制;在自动控制模式下,系统会依据环境参数与用户设置的阈值作出判断;在语音控制模式下,系统会识别用户语音指令并对执行设备进行相应的控制;在远程控制模式下,通过手机APP将控制指令上传至云端,系统自动接收来自云端下发的指令并对执行设备进行相应的控制。
3.2 语音识别控制程序设计
语音识别是本系统的人机交互核心之一,采用ASRPRO语音识别模块进行本地离线识别,并通过USART串口与STM32主控通信。模块在识别到有效语音指令后,将指令对应的编号以串口数据形式发送给主控芯片,主控程序通过中断接收方式捕获该数据,并根据编号内容判断用户意图,从而控制对应的智能设备运行状态。语音模块程序流程图如图4所示。
图3 主程序流程图
图4 语音模块程序流程图

图5 按键控制与阈值设置程序流程图
程序运行过程中,首先对语音模块初始化并配置串口接收通道。当串口接收到来自模块的指令编码时,主控立即解析该编号,并在预设命令表中查找其对应功能。若指令有效,系统将执行相关控制操作,同时通过OLED模块更新当前状态。若为无效或错误编码,则直接忽略,并继续监听下一条指令。语音识别控制逻辑反应迅速、指令明确,特别适合在手动操作不便的场景。
3.3 按键控制程序设计
本系统配备多功能按键模块,用于在无语音及无网络环境下实现本地控制,主要包括运行模式切换、设备手动开关控制以及自动控制模式下的阈值设定。在程序里运用轮询的方式来扫描按键状态,按键输入信号经由GPIO引脚接入到STM32主控当中,程序会对按键按下以及释放的时间长度作出判断,区分短按与长按操作,其中短按可用来切换运行模式以及直接控制某一设备的启动和停止,长按则是用于进入参数设置流程。流程图如图5所示。
在阈值设置功能里,用户可以借助按键去设置温度,湿度,光照等参数的上下限数值,这些阈值并非会立刻对系统行为产生影响,而是只有在切换到自动控制模式的时候,才会作为环境判断的依据来加以使用,系统处于自动模式时,会按照一定周期读取当下的环境数据,并把它和用户所设定的阈值进行对比。如果超出了范围,那么就会触发执行模块做出响应,比如自动开启或者关闭风扇,窗帘,加湿器,同时蜂鸣器发出报警声。
在阈值设置的过程当中OLED显示屏会实时反馈当前设置的项目以及对应的数值,用户可以依靠加减键来调整参数,借助确认键来保存设置,最终会把设定值存储在主控变量之中。并且配置写入EEPROM来实现掉电保存功能。
3.4 OLED显示程序设计
OLED显示程序流程图如图6所示。所选OLED模块基于SSD1306驱动芯片,采用I2C总线方式与STM32主控通信,在程序实现方面,首先需要在STM32CubeMX中对I2C接口进行配置,包括选择I2C通道、映射引脚、开启中断及波特率设置。配置完成后生成初始化代码,并在工程目录中添加OLED显示模块所需的驱动文件,用于封装底层显示函数及命令通信接口。在主函数中包含相关头文件,完成驱动初始化调用,即可实现对屏幕的控制。
3.5 无线通信模块程序设计
ESP8266-01S作为WiFi通信模块,负责将本地STM32主控与机智云平台建立数据交互通道。该模块通过串口与主控芯片通信,使用AT指令集完成无线网络连接、云平台接入以及控制指令与传感器数据的双向传输。WiFi模块流程图如图7所示。
当ESP8266成功连接到局域网后,模块会尝试与机智云平台建立通信连接。平台接入方式基于USART串口和MQTT数据传输协议,由机智云平台生成的通信协议文档和数据点格式统一规范通信内容。开发者无需手动构建MQTT包结构,只需遵循平台提供的协议说明,封装上传数据和解析下发指令。

图6 OLED显示程序流程图

图7 Wi-Fi模块流程图
04 系统功能测试
4.1 显示功能测试
首先,确保所有硬件模块正确连接,检查各模块电源、引脚、通信接口,确保它们连接牢固,没有松动或接触不良。使用Type-C接入电源模块给整个系统供电,供电后可通过供电模块的按键开关启动整个系统。系统上电后会进行一系列程序的初始化之后OLED屏幕开始工作显示由传感器采集到的环境数据和系统当前运行模式。第一行显示的是温度数据和湿度数据,第二行显示的是光照强度,第三行显示的是烟雾浓度,第四行显示的是系统当前模式。硬件整体实物图如图8所示。

图8 硬件整体实物图
4.2 语音控制功能测试
语音控制是本设计的核心内容,为避免误触发,系统设定了唤醒机制。用户需先说出唤醒词“你好,小智”以激活语音识别通道,系统接收到唤醒信号后将进入十秒倒计时监听阶段,在此期间内可识别有效控制指令。若超过十秒未识别到任何指令,系统将自动退出语音模式,返回默认运行状态。对系统语音控制功能进行了5次近距离、5次远距离测试,结果表明,系统距离指令发出者5m内能3s内快速响应,且识别准确,超过5m时会因语音信号有干扰时受到影响。
4.3 手动控制功能测试
在无网络或语音不可用的情况下,系统可以通过按键手动控制,以实现模式切换、设备控制与阈值调整三类操作,按键控制如图9所示,系统右下方从左往右依次有四个功能按键,短按K1按键可进行模式切换,当前系统模式可直接显示在OLED屏幕上,K2、K3、K4按键分别控制灯光、风扇和步进电机。K2、K3按键通过按动不同次数,还可以调整灯光亮度和风扇风速,K4按键用来控制步进电机转动,正转模拟窗帘打开,反转模拟窗帘关闭。长按K1两秒钟进入阈值设置界面,可以通过按键调整温度、湿度、光照强度以及烟雾浓度参数,用于在自动模式下的阈值判断。阈值参数设置图如图10所示。

图9 按键控制测试结果
4.4 自动模式功能测试
通过按键以及语音控制可切换为自动模式,在自动控制模式下,系统将依据传感器实时采集的数据与用户设定的阈值进行比较。当系统检测到当前温度大于设定阈值时,风扇开始转动,超于阈值越高,风扇转速越快。温度低于设定阈值时,风扇停止转动。当系统检测到当前湿度低于设定阈值时,加湿器开启,湿度高于设定阈值时,加湿器关闭。
当系统检测到当前烟雾浓度高于设定阈值时,蜂鸣器便会触发声音警报,当烟雾浓度持续高于设定值时,可通过蜂鸣器报警开关手动关闭声音警报。当系统检测到当前光照强度大于阈值时,窗帘打开灯光关闭用来模拟白天,反之当光照强度低于阈值时,窗帘关闭灯光打开用来模拟黑夜。自动模式测试图如图11所示。

图10 阈值参数设置

图11 自动模式测试结果
4.5 远程控制功能测试
系统上电后,使设备与手机控制端处于同一局域网下,打开机智云手机APP,添加设备,并进行一键配网,数据将通过ESP8266Wi-Fi模块与机智云平台完成设备与云端数据交互,实现远程对智能家居系统的操控。通过机智云APP可以实时显示当前的温湿度数据、烟雾浓度数据、光照强度数据以及烟雾浓度数据。通过手机APP还可以实现对风扇、加湿器、灯光以及窗帘的控制。

图12 远程控制测试结果
05总结
该设计基于STM32主控制器,结合温湿度、光照、烟雾传感器,以及语音、通信和Wi-Fi模块,构建了一个支持手动、自动、语音和远程四种控制模式的智能家居控制系统。该系统具有低成本、高兼容性和强可操作性的优势,并展现出良好的发展潜力。未来可通过扩展环境传感器类型来提升系统的环境感知能力,并可接入云端语音识别服务,以增强语言识别性能。