基于STM32的智能安防系统
2020-06-11何锦淳李爵成李丹
何锦淳 李爵成 李丹
摘 要:针对智能安防的需求,文中设计了一款基于STM32微处理器,在FreeRtos上开发,使用WiFi技术组网接入云平台的安防系统。用户可以在手机终端监控多种传感器数据(温湿度、火情)和实时图像。针对单片机优化的JPEG压缩算法在保证图像质量的前提下增加了图像压缩比,解决了低价格MCU内存小的问题,并降低了硬件设计复杂度。
关键词:STM32F103VET;JPEG编码;FreeRtos;APP;图像压缩比;软件开发
中图分类号:TP216文献标识码:A文章编号:2095-1302(2020)05-00-06
0 引 言
随着社会技术的发展,家庭、实验室、办公室等对方位安全监控系统的需求愈加凸显。安防监控系统能够实现图像、温度、湿度和门状态等的监测与控制,通过及时触发警报来减少灾害事故。市面上的监控产品是作为单独系统出现,仅仅具有视频监控或空气质量和室内环境的监测、改善功能。考虑到火灾和入侵警报系统复杂度高,价格昂贵,且两者未集成在一个系统中,因此文中设计了一款基于STM32微处理器的智能安防系统。
系统通过平台网页和安卓APP可以进行实时监控与控制,并实现远程开门;通过红外热释传感器监测火情,如果门被强制打开,还将发出警报并通过云将通知发送给住户手机APP。该系统适用场景广泛,安装方便,无需对原有建筑进行改造,且图像压缩存储,大大降低了用户的维护成本和管理成本。
1 智能安防系统方案设计
文中设计的基于OneNET的智能安防监控系统采用STM32作为主控制器,通过WiFi技术组网,经EDP协议连接OneNET云服务器,由用户端显示和控制。通过安卓APP进行实时监控,并由摄像头采集图像信息,待编码后上传到OneNET云平台。采用红外热释传感器检测火情,将ESP8266作为NodeMCU以检测门的状态[1-2]。系统设计方案如图1所示。
2 系统硬件设计
2.1 STM32主控芯片
STM32系列ARM Cortex-M3是32位闪存微控制器,其工作时具有低功率、低电压、实时功能极佳等特点。32位72 MHz CPU的速度基本可满足本文中图片压缩编码的性能需求,其中13个通信接口包括USART,SDIO,I2C和SPI等,实现了系统的图像采集、SD卡读写和网络通信功能[3-4]。电路如图2所示。
2.2 数据采集模块
2.2.1 OV7725摄像头
摄像头模块内部集成有AL422B FIFO芯片,支持输出的最大图像为30万像素,其中单个像素点RGB分量为
2 B,通过输出端口DO0~DO7将像素信息传送至STM32。主控芯片在使用模块时通过SCCB对OV7725的寄存器进行配置。本系统采用两线SCCB对OV7725进行控制,与I2C总线类似。STM32作为主设备,OV7725作为从设备,通过时钟线SIO_C和数据线SIO_D通信(相当于I2C中的CLK和SDA)。摄像头模块与STM32的引脚连接如图3所示。
2.2.2 温湿度传感器、火焰传感器及门磁传感器
DHT11温湿度传感器是一款含有已校准数字信号输出的温湿度复合传感器。它应用专用的数字模块采集技术和温湿度传感技术,确保产品的可靠性与长期稳定性。单片机通过I2C总线对其进行配置和控制,在本设计中使用三线型封装。
本设计中使用的火焰传感器可以检测火焰或者波长在 760~1 100 nm范围内的光源,探测角度约为60°,对火焰光谱较为灵敏。
在本设计中,常闭型门磁传感器与ESP8266连接,作为独立于主控的门状态检测和警报发出模块。
2.3 通信模块
2.3.1 ESP8266
ESP8266系列无线模块是安信可科技有限公司自主研发的高性价比WiFi SoC模组。该系列模组支持标准的IEEE802.11b/g/协议,内置完整的TCP/IP协议栈。该模块用以实现设备的联网,也可以构建独立的网络控制器。ESP8266的频率高达160 MHz,外设齐全,支持通用的AT指令开发和SDK二次开发。
2.3.2 ALK8266
ALK8266WiFi是一款灵活、功能强大、高性能、小尺寸的高性价比802.11b/g/n无线模组。上文所提到的ESP8266通过串口通信,通信受串口波特率的限制,网络传输速度无法满足本系统的需求。ALK8266模组提供了SPI接口,可连接MCU,实现与远端TCP/UDP服务器的高速通信,最大波特率可达40 Mb/s,实测有效吞吐量可达1 MB/s,适用于高速采集、语音通信及视频传输等场合。该模组与MCU集成方便,占用主机资源少,同時还提供丰富、实用的API库函数,用以对模组进行配置查询及高速数据收发。MCU和ALK8266的连接示意如图4所示,ALK8266WiFi模组主机系统架构如图5所示。
3 系统软件设计
3.1 FreeRtos编程
本系统将STM32作为主控进行温湿度、火焰信息、图片数据采集等任务。为了更好地进行多任务调度,本设计引入FreeRtos。基于操作系统的程序设计将硬件的控制权转交给操作系统,只需要为硬件模块分配任务及相应优先级即可,因此可以使得程序代码变得更简洁且层次分明。
经过移植操作后,在主函数设计中进行硬件初始化与网络初始化,创建人物并调用vTaskStartScheduler()启动任务。
代码如下:
int main(void)
{
Hardware_Init();
while(OneNet_DevLink())//接入OneNET
mDelay(500);
xTaskCreate((TaskFunction_t)ReceiveCmdTask,"ReceiveCmdTask",ReceiveCmd_Stack,"ReceiveCmdTask",ReceiveCMd_Priority,&ReceiveCmdTask_Handler);
//接受命令任务
xTaskCreate((TaskFunction_t)Net_Task,"Net_Task",Net_Task_Stack,"Net_Task",Net_Task_Priority,&NetTask_Handler);
//网络任务
xTaskCreate((TaskFunction_t)CheckSensorTask,"Check_Task",CheckSensor_Stack,"Check_Task",CheckSensor_Priority,&CheckSensor_Handler);//数据采集任务
vTaskStartScheduler();
}
3.2 网络传输软件设计
3.2.1 设备接入
在云平台上完成设备创建后,为用户分配产品ID,设备ID和API-KEY。设备通过以太网、WiFi和2G/3G等通信方式连接服务器,并发送请求。
连接请求包含3部分,即消息头、选项和消息体。消息体中可能包含设备ID、产品ID(可选)、鉴权信息。数据包前12 B由开发SDK的API填充,用户只需修改后面的设备号和API-KEY即可。以本系统上线为例,当图6所示服务器收到请求确认设备权限时,会返回连接反馈{0x20,0x02,0x00,0x00},表示设备成功上线[5-6],如图7所示。
3.2.2 上传数据和图片
EDP协议支持双向消息传输,消息既可以从设备传向云,也可以由设备云传向设备。上传数据包由消息头和消息体组成。本设计使用Json格式,如{"temperature":"22","humidity":"95%"}。该格式结构简单,多数据传输只需按照键值对的形式添加到字符串即可。经EDP协议封包后的数据报结构如图8所示。
3.3 JPEG压缩编码实现
STM32F103获得OV7725的RGB565图像信息,这些数据以数组的形式存储在FIFO中,通过开启帧中断控制取出图像数据。RGB数据加上BMP文件头信息和调色板信息后就是一张BMP图片,一张320×240的16位深度的BMP图大小为225 Kb。为了提高图片传输效率,安防系统中需要对图像进行压缩以降低图片数据量。在保证图像显示效果的前提下,本设计引入JpegLib实现JPEG压缩。JPEG是一种有损图像压缩方法,可以在存储大小和压缩程度之间进行权衡,可以针对用户对画质的需求调整文件大小,降低了系统硬件的成本消耗[1,7]。算法流程如图9所示。
系统部分代码如下:
jpeg_set_default(cinfo,inbuf_buf);//设置默认参数
jpeg_start_compress(cinfo);//开始压缩,写压缩文件头信息
FIFO_PREPARE;
count=0;
while(cinfo->next_line
{
for(i=0;i { READ_FIFO_PIXEL(color); cinfo->inbuf[count++]=(u8)((color&0xf800)>>8); cinfo->inbuf[count++]=(u8)((color&0x07e0)>>3); cinfo->inbuf[count++]=(u8)((color&0x001f)<<3); } cinfo->next_line++; if(cinfo->next_line%cinfo->inbuf_height==0) {//当数据填满时压缩并输出数据(填满16行) count=0; jint_process_rows(cinfo);//压缩 memset((void*)(cinfo->inbuf),0,cinfo->inbuf_size); //清空輸入缓冲区 } } jpeg_finish_compress(cinfo); 4 安卓软件开发 该APP主要实现对监测环境各项环境指标的实时查看,对温湿度阈值和摄像头的拍照功能进行控制,还可通过手机控制门的开关。APP主要包括三大模块,分别为实时数据模块、调控模块和历史数据模块。图10所示为APP操作功能图。 (1)实时数据模块:支持获取当时环境的图片、火情、门状态以及温湿度和当前温湿度的阈值,可以实时获取当前环境参数,并支持下拉刷新。 (2)调控模块:可通过当前模块给设备发送命令,从而控制当前温湿度的阈值范围,并能控制设备的摄像头拍照,也能够通过手机前置摄像头拍照功能实现人脸识别,以控制门锁的开关。 (3)历史数据模块:可实现对以往各项数据的查询。 4.1 实时数据模块 该模块负责获取数据并展示给用户,其界面主要包括上半部分的照片区域和下半部分的环境参数区域。模块使用SwipeRefreshLayout实现下拉刷新功能,使用Retrofit+RaJava网络请求框架实现用GET方法通过由设备上传到OneNET平台上的数据流来读取设备收集到的数据,并显示到各数据区域中。图11与图12分别为数据模块的界面与从OneNET获取数据的流程。 4.2 调控模块 该模块负责对设备功能的控制,主要包括温湿度阈值控制、拍照控制和对门开关的控制。本界面设计了TextInputLayout与TextInputEditText的联合使用,用户输入计划改变的温湿度阈值,然后点击“确认”按钮,通过网络请求框架用POST方法给平台下达命令,从而控制设备。调控界面如图13所示,对设备的控制流程如图14所示。 4.3 历史数据模块 历史数据模块负责提供对以往环境参数的查询功能。该模块使用Spinner控件提供要查询的参数选择,设有三个EditText用以方便用户输入要查询的日期,同时还使用RecyclerView来显示查询的数据。图15为历史数据模块界面。 5 系统测试与应用 5.1 应用测试 智能安防系统上线后,系统定时上传数据并在平台Web页面(图16)和安卓APP显示。手机对系统进行的控制均响应在1 s之内,若WiFi异常或服务器异常,则系统会采取相应的重连措施,并在LCD显示网络状态,如图17所示。 5.2 网络测试 STM32F103在CPU 72 MHz条件下实测UDP的传输速度达到700~800 Kb/s,TCP传输速度达到650~750 Kb/s,是普通串口WiFi模块的700倍以上。经测试,系统在普通WiFi环境下不丢包、不多包,不多字节,稳定高速的通信可持续5 h以上。 5.3 图片压缩测试 本次实验测试在单片机STM32F103VEt上运行JPEG压缩算法,进行图像压缩(压缩一张图片大概需要2 s)后对达到实际图像品质的图像加以对比分析。 图18中,原图是OV7725拍摄的照片,为BMP格式,图像分辨率为320×240。通过设置质量因子,可以得到不同压缩程度的照片。质量因子越小,压缩后照片的质量越高,压缩比越小。经过反复测试可知,将质量因子设定为75时的清晰度和文件大小比较适合本应用。 6 结 语 本文利用STM32F103VET通过ALK8266模块实现了安防系统与OneNET云平台的对接,通过客户端对系统进行监控和控制,可以在有人闯入或者发生火情时及时向用户发出警报。同时实现了图片的压缩算法,大大降低了带宽要求和传输延时。该系统实际运行稳定,成本低,适用于大部分安防情景。基于云平台的智能安防系统还可以在智能家居网关中进行扩展,实现对家中老人和小孩的监控。 注:本文通讯作者为李丹。 参考文献 [1]张艺.基于STM32的监测系统中图像处理技术的研究与应用[D].武汉:湖北大学,2018. [2]王坤,丁红胜.基于STM32的图像编码与采集系统[J].电子设计工程,2018,26(5):179-183. [3]任志敏.一种ARM Cortex-M3 MCU的图像采集与JPEG压缩系统设计[J].自动化技术与应用,2013,32(9):24-28. [4]曾胜艳,王善伟.基于STM32的无线图像采集器[J].福建电脑,2018,34(11):110-111. [5]徐建功,赵捷,李伟,等.基于STM32F103XX微处理器的Micro SD卡读写[J].现代电子技术,2010,33(20):26-28. [6]崔鹏伟,闫学文.基于SD卡的FATFS文件系统的研究与应用[J].工业控制计算机,2013,26(11):141-142. [7]崔宪伟.一种基于物联网的智能大棚监控系统的研究[D].青岛:青岛科技大学,2018. [8]刘晓剑.基于OneNET的物联网监控系统[D].郑州:郑州大学,2016. [9]刘美枝,杨磊.基于Matlab人脸检测实现方法在智能安防系统中的应用[J].电子技术与软件工程,2019(19):63-64. [10]许宝成.华为发布2019智能安防业务新战略[J].計算机与网络,2019(16):74-75.