智能家居是以住宅为平台,利用综合布线、网络通信、智能家居系统设计方案、安全防范、自动控制、音视频技术将家居生活有关的设施集成,构建高效的住宅设施与家庭日程事务的管理系统,提升家居安全性、便利性、舒适性、艺术性,并实现环保节能的居住环境。
1 智能家居系统硬件平台
STM32的智能家居的系统拓扑结构如图1所示,STM32系列基于专为要求高性能、低成本、低功耗的嵌入式应用专门设计的ARM Cortex-M3内核。该系统采用STM32F103“增强型”系列的STM32芯片,设计的总体思路通过手机或其它手持设备的蓝牙通信模块与STM32上的蓝牙模块进行通信,接收到的数据进行处理,再通过红外模块发送到受控终端上。受控终端接收到红外指令后执行指定的操作,如电视、风扇、空调等电器设备的开关等操作。红外模块可以学习到各种遥控器的指令,通过学习遥控器的指令储存到QT软件所编写的界面中,解决了遥控器过多的烦恼,从而实现家居的智能化控制。通过报警模块可以实现火灾时的报警,保障了家居安全。
1.1 蓝牙模块
蓝牙HC05是主从一体的蓝牙串口模块,即当蓝牙设备与蓝牙设备配对连接成功后,可以忽视蓝牙内部的通信协议,直接将蓝牙当作串口用。当建立连接,两设备共同使用一通道也就是同一个串口,一个设备发送数据到通道中,另外一个设备便可以接收通道中的数据。当然,对于建立这种通道连接有一定条件,那就是对蓝牙设置好能进行配对连接的AT模式。
HC05蓝牙模块与STM32的串口3相连接。HC05的RDX与STM32芯片的第55管脚USART3-TX连接,TXD与第56管脚USART3-RX连接,GND与Vcc连接到相应的GND与Vcc上,KEY与第65管脚PC8连接。模块上电后,通过KEY接Vcc,使模块进入AT指令,模块的波特率设置为38400。
1.2 红外模块
BC7210芯片由海外知名厂商制造,比高公司拥有版权的红外遥控解码专用芯片。BC7210可以完成目前国内市场上常用的飞利浦RC5和NEC两种红外编码信号的解码。BC7210的输出可以设置为并行输出或者串行输出,串行输出方式兼容SPI和UART两种接口,可以轻松完成与各种MCU的接口相连接,完成与MCU的通信。BC7210与STM32连接的硬件设计方法如图2所示。
BC7210的串行输出兼容于“波特率9 600 bit·s-1,1个起始位,1个停止位,无奇偶校验”的USART,只需D7与STM32的87管脚USART2-RX连接。MOD与S/P分别与PB3和PB5相连接。这种接口方式只需占用1根口线,微处理器的数据接收可以由硬件完成,占用CPU资源少。
1.3 报警模块
无线收发模组,采用射频技术,也叫RF433射频小模块,采用全数字科技生产的单IC射频前段与ATMEL的AVR单片机组成,可高速传输数据信号的微型收发信机,无线传输的数据进行打包、检错、纠错处理。元器件都采用工业级标准,工作稳定可靠,体积小便于安装。适用于安全报警、无线自动抄表、家居及工业自动化、远端遥控、无线数传等领域,433报警模块与STM32的串口1相连接。
SM30型433MHz微功率无线串口通信模块,是上海上志电子信息技术有限公司生产,可以动态管理无线通信方式:将STM32和无线模块JP1引脚的1(GND),2(Vcc),3(RXD/TTL),4(TXD/TTL),9(RESET)共5个引脚连接好,1脚接GND,2脚接VCC,3和4两脚分别接STM32的串口上,通过串口发送给模块设置命令,设置完成以后,置SETEN为高电平或与地断开,上电复位或RST(如果8脚接在用户STM32的I/O口上)低电平(10 ms)复位,及可以用新的参数工作。
2 软件系统设计
整个智能家居系统以STM32微处理器为控制核心,使用C语言编写。智能家居系统的软件可分为手机、STM32系统2个部分,主要由蓝牙驱动程序、红外驱动程序和433报警程序组成。QT的软件控制流程如图3所示。当一个特定事件发生时,一个信号被发射。QT的窗口部件有多种预定义的信号,但可以通过继承来加入自己的信号。槽就是一个可以被调用处理特定信号的函数。信号与槽是宽松地联系在一起:一个发射信号的类无需已知哪个槽要接收这个信号。QT信号和槽可以保证如果将一个信号与一个槽连接起来,槽会在正确的时间使用信号的参数而被调用。信号和槽可以使用任何数量、任何类型的参数。
2.1 手机软件设计
通过调用Qobject对象的connect函数来将某个对象的信号与另一个对象的沐曹函数相关联,这样当发射者发射信号时,接收者的槽函数将被调用,该函数的定义为:
boolQObjeet::eonnect(eonstQOb—ieet*sender,eonstchar*signal,
eonstQObjeet*reeeiver,eonstehar*mexnber)
conneet函数将sender对象中的信号signal与reeeiver中的member槽函数相关联,这里的sender和receiver都是指向QObject类型对象的指针。QT的宏signal()用于指定信号signal;宏slot()用于指定槽函数。
当对象内部发生某些事件时,它有可能发出信号。如果这个信号连接到槽,那么相应的槽函数就被执行。可以将多个槽连接到同一个信号,那么这些槽就将一一被执行,其执行顺序是任意的。
2.2 STM32系统软件设计
STM32系统软件设计首先对STM32系统的初始化,采用Rtthread系统并创建了3个子进程,分别为蓝牙模块子进程、红外模块子进程、报警模块子进程,设定任务的优先级并初始化各子进程。编写相应的初始化及数据处理函数实现系统的正常运行,通过Rtthread进行系统的线程调度。
STM32的软件控制流程如图4所示。
(1)蓝牙子进程程序设计,KEY位置高电平进入AT指令模式,通过发送AT指令进行蓝牙模块的设置,例如USART_Send_Cmd(“%s\r\n”,atstr);设置完成后KEY位置低进入数据透传模式,进行数据传输。接受到指令后返回数据,手机端对返回数据进行分析,如果接受错误数据,则手机端重新发送数据。接收到正确数据后发送给相应的模块,执行相应的操作。蓝牙软件设计流程如图5所示。
(2)红外子进程程序设计,先初始化红外模块,对要发送的数据解码后编码再经过红外模块发送出去。判断是否发送结束,未发送完整则继续发送。红外软件设计流程如图6所示。
(3)报警子进程程序设计,初始化报警模块,将一个家用烟感探测器与报警模块相连,一旦超过设定值报警模块通过STM32系统将报警信息,发送送到手机或其他终端设备上实现智能报警。判断是否有报警信息,如果有报警信息则通过串口1将数据发送给STM32芯片,再执行报警函数。
2.3 该系统在智能家居系统中的应用
要控制红外设备必须先学习控制该设备的红外码。首先,通过半口工具连接到该模块,将该设备的遥控器对准红外接收头,通过半口工具发送对应的报文,按下需要学习的键,然后就可以收到该控制键对应的红外码。将学习到的红外码保存在QT的槽函数内。实现了一个手机或终端设备智能的控制家电,并且实现了智能报警。
3 结束语
综上所述,可知基于STM32的智能家居系统实现简单,应用广泛。而蓝牙技术的成熟和普及,可以将各种遥控器由一个Android手机软件所代替,实现了智能化的控制电视、风扇、空调等设备。通过在室内安装多个STM32系统,可以实现对每间房间的控制。基于STM32的智能家居系统综合了多门技术,主要包括视蓝牙通信、红外遥控技术、433报警等,随着这些技术的发展,该智能家居系统将拥有更为广阔的发展空间。