何錦淳 李爵成 李丹
摘 要:針對智能安防的需求,文中設(shè)計(jì)了一款基于STM32微處理器,在FreeRtos上開發(fā),使用WiFi技術(shù)組網(wǎng)接入云平臺的安防系統(tǒng)。用戶可以在手機(jī)終端監(jiān)控多種傳感器數(shù)據(jù)(溫濕度、火情)和實(shí)時(shí)圖像。針對單片機(jī)優(yōu)化的JPEG壓縮算法在保證圖像質(zhì)量的前提下增加了圖像壓縮比,解決了低價(jià)格MCU內(nèi)存小的問題,并降低了硬件設(shè)計(jì)復(fù)雜度。
關(guān)鍵詞:STM32F103VET;JPEG編碼;FreeRtos;APP;圖像壓縮比;軟件開發(fā)
中圖分類號:TP216文獻(xiàn)標(biāo)識碼:A文章編號:2095-1302(2020)05-00-06
0 引 言
隨著社會技術(shù)的發(fā)展,家庭、實(shí)驗(yàn)室、辦公室等對方位安全監(jiān)控系統(tǒng)的需求愈加凸顯。安防監(jiān)控系統(tǒng)能夠?qū)崿F(xiàn)圖像、溫度、濕度和門狀態(tài)等的監(jiān)測與控制,通過及時(shí)觸發(fā)警報(bào)來減少災(zāi)害事故。市面上的監(jiān)控產(chǎn)品是作為單獨(dú)系統(tǒng)出現(xiàn),僅僅具有視頻監(jiān)控或空氣質(zhì)量和室內(nèi)環(huán)境的監(jiān)測、改善功能??紤]到火災(zāi)和入侵警報(bào)系統(tǒng)復(fù)雜度高,價(jià)格昂貴,且兩者未集成在一個(gè)系統(tǒng)中,因此文中設(shè)計(jì)了一款基于STM32微處理器的智能安防系統(tǒng)。
系統(tǒng)通過平臺網(wǎng)頁和安卓APP可以進(jìn)行實(shí)時(shí)監(jiān)控與控制,并實(shí)現(xiàn)遠(yuǎn)程開門;通過紅外熱釋傳感器監(jiān)測火情,如果門被強(qiáng)制打開,還將發(fā)出警報(bào)并通過云將通知發(fā)送給住戶手機(jī)APP。該系統(tǒng)適用場景廣泛,安裝方便,無需對原有建筑進(jìn)行改造,且圖像壓縮存儲,大大降低了用戶的維護(hù)成本和管理成本。
1 智能安防系統(tǒng)方案設(shè)計(jì)
文中設(shè)計(jì)的基于OneNET的智能安防監(jiān)控系統(tǒng)采用STM32作為主控制器,通過WiFi技術(shù)組網(wǎng),經(jīng)EDP協(xié)議連接OneNET云服務(wù)器,由用戶端顯示和控制。通過安卓APP進(jìn)行實(shí)時(shí)監(jiān)控,并由攝像頭采集圖像信息,待編碼后上傳到OneNET云平臺。采用紅外熱釋傳感器檢測火情,將ESP8266作為NodeMCU以檢測門的狀態(tài)[1-2]。系統(tǒng)設(shè)計(jì)方案如圖1所示。
2 系統(tǒng)硬件設(shè)計(jì)
2.1 STM32主控芯片
STM32系列ARM Cortex-M3是32位閃存微控制器,其工作時(shí)具有低功率、低電壓、實(shí)時(shí)功能極佳等特點(diǎn)。32位72 MHz CPU的速度基本可滿足本文中圖片壓縮編碼的性能需求,其中13個(gè)通信接口包括USART,SDIO,I2C和SPI等,實(shí)現(xiàn)了系統(tǒng)的圖像采集、SD卡讀寫和網(wǎng)絡(luò)通信功能[3-4]。電路如圖2所示。
2.2 數(shù)據(jù)采集模塊
2.2.1 OV7725攝像頭
攝像頭模塊內(nèi)部集成有AL422B FIFO芯片,支持輸出的最大圖像為30萬像素,其中單個(gè)像素點(diǎn)RGB分量為
2 B,通過輸出端口DO0~DO7將像素信息傳送至STM32。主控芯片在使用模塊時(shí)通過SCCB對OV7725的寄存器進(jìn)行配置。本系統(tǒng)采用兩線SCCB對OV7725進(jìn)行控制,與I2C總線類似。STM32作為主設(shè)備,OV7725作為從設(shè)備,通過時(shí)鐘線SIO_C和數(shù)據(jù)線SIO_D通信(相當(dāng)于I2C中的CLK和SDA)。攝像頭模塊與STM32的引腳連接如圖3所示。
2.2.2 溫濕度傳感器、火焰?zhèn)鞲衅骷伴T磁傳感器
DHT11溫濕度傳感器是一款含有已校準(zhǔn)數(shù)字信號輸出的溫濕度復(fù)合傳感器。它應(yīng)用專用的數(shù)字模塊采集技術(shù)和溫濕度傳感技術(shù),確保產(chǎn)品的可靠性與長期穩(wěn)定性。單片機(jī)通過I2C總線對其進(jìn)行配置和控制,在本設(shè)計(jì)中使用三線型封裝。
本設(shè)計(jì)中使用的火焰?zhèn)鞲衅骺梢詸z測火焰或者波長在 760~1 100 nm范圍內(nèi)的光源,探測角度約為60°,對火焰光譜較為靈敏。
在本設(shè)計(jì)中,常閉型門磁傳感器與ESP8266連接,作為獨(dú)立于主控的門狀態(tài)檢測和警報(bào)發(fā)出模塊。
2.3 通信模塊
2.3.1 ESP8266
ESP8266系列無線模塊是安信可科技有限公司自主研發(fā)的高性價(jià)比WiFi SoC模組。該系列模組支持標(biāo)準(zhǔn)的IEEE802.11b/g/協(xié)議,內(nèi)置完整的TCP/IP協(xié)議棧。該模塊用以實(shí)現(xiàn)設(shè)備的聯(lián)網(wǎng),也可以構(gòu)建獨(dú)立的網(wǎng)絡(luò)控制器。ESP8266的頻率高達(dá)160 MHz,外設(shè)齊全,支持通用的AT指令開發(fā)和SDK二次開發(fā)。
2.3.2 ALK8266
ALK8266WiFi是一款靈活、功能強(qiáng)大、高性能、小尺寸的高性價(jià)比802.11b/g/n無線模組。上文所提到的ESP8266通過串口通信,通信受串口波特率的限制,網(wǎng)絡(luò)傳輸速度無法滿足本系統(tǒng)的需求。ALK8266模組提供了SPI接口,可連接MCU,實(shí)現(xiàn)與遠(yuǎn)端TCP/UDP服務(wù)器的高速通信,最大波特率可達(dá)40 Mb/s,實(shí)測有效吞吐量可達(dá)1 MB/s,適用于高速采集、語音通信及視頻傳輸?shù)葓龊?。該模組與MCU集成方便,占用主機(jī)資源少,同時(shí)還提供豐富、實(shí)用的API庫函數(shù),用以對模組進(jìn)行配置查詢及高速數(shù)據(jù)收發(fā)。MCU和ALK8266的連接示意如圖4所示,ALK8266WiFi模組主機(jī)系統(tǒng)架構(gòu)如圖5所示。
3 系統(tǒng)軟件設(shè)計(jì)
3.1 FreeRtos編程
本系統(tǒng)將STM32作為主控進(jìn)行溫濕度、火焰信息、圖片數(shù)據(jù)采集等任務(wù)。為了更好地進(jìn)行多任務(wù)調(diào)度,本設(shè)計(jì)引入FreeRtos?;诓僮飨到y(tǒng)的程序設(shè)計(jì)將硬件的控制權(quán)轉(zhuǎn)交給操作系統(tǒng),只需要為硬件模塊分配任務(wù)及相應(yīng)優(yōu)先級即可,因此可以使得程序代碼變得更簡潔且層次分明。
經(jīng)過移植操作后,在主函數(shù)設(shè)計(jì)中進(jìn)行硬件初始化與網(wǎng)絡(luò)初始化,創(chuàng)建人物并調(diào)用vTaskStartScheduler()啟動任務(wù)。
代碼如下:
int main(void)
{
Hardware_Init();
while(OneNet_DevLink())//接入OneNET
mDelay(500);
xTaskCreate((TaskFunction_t)ReceiveCmdTask,"ReceiveCmdTask",ReceiveCmd_Stack,"ReceiveCmdTask",ReceiveCMd_Priority,&ReceiveCmdTask_Handler);
//接受命令任務(wù)
xTaskCreate((TaskFunction_t)Net_Task,"Net_Task",Net_Task_Stack,"Net_Task",Net_Task_Priority,&NetTask_Handler);
//網(wǎng)絡(luò)任務(wù)
xTaskCreate((TaskFunction_t)CheckSensorTask,"Check_Task",CheckSensor_Stack,"Check_Task",CheckSensor_Priority,&CheckSensor_Handler);//數(shù)據(jù)采集任務(wù)
vTaskStartScheduler();
}
3.2 網(wǎng)絡(luò)傳輸軟件設(shè)計(jì)
3.2.1 設(shè)備接入
在云平臺上完成設(shè)備創(chuàng)建后,為用戶分配產(chǎn)品ID,設(shè)備ID和API-KEY。設(shè)備通過以太網(wǎng)、WiFi和2G/3G等通信方式連接服務(wù)器,并發(fā)送請求。
連接請求包含3部分,即消息頭、選項(xiàng)和消息體。消息體中可能包含設(shè)備ID、產(chǎn)品ID(可選)、鑒權(quán)信息。數(shù)據(jù)包前12 B由開發(fā)SDK的API填充,用戶只需修改后面的設(shè)備號和API-KEY即可。以本系統(tǒng)上線為例,當(dāng)圖6所示服務(wù)器收到請求確認(rèn)設(shè)備權(quán)限時(shí),會返回連接反饋{0x20,0x02,0x00,0x00},表示設(shè)備成功上線[5-6],如圖7所示。
3.2.2 上傳數(shù)據(jù)和圖片
EDP協(xié)議支持雙向消息傳輸,消息既可以從設(shè)備傳向云,也可以由設(shè)備云傳向設(shè)備。上傳數(shù)據(jù)包由消息頭和消息體組成。本設(shè)計(jì)使用Json格式,如{"temperature":"22","humidity":"95%"}。該格式結(jié)構(gòu)簡單,多數(shù)據(jù)傳輸只需按照鍵值對的形式添加到字符串即可。經(jīng)EDP協(xié)議封包后的數(shù)據(jù)報(bào)結(jié)構(gòu)如圖8所示。
3.3 JPEG壓縮編碼實(shí)現(xiàn)
STM32F103獲得OV7725的RGB565圖像信息,這些數(shù)據(jù)以數(shù)組的形式存儲在FIFO中,通過開啟幀中斷控制取出圖像數(shù)據(jù)。RGB數(shù)據(jù)加上BMP文件頭信息和調(diào)色板信息后就是一張BMP圖片,一張320×240的16位深度的BMP圖大小為225 Kb。為了提高圖片傳輸效率,安防系統(tǒng)中需要對圖像進(jìn)行壓縮以降低圖片數(shù)據(jù)量。在保證圖像顯示效果的前提下,本設(shè)計(jì)引入JpegLib實(shí)現(xiàn)JPEG壓縮。JPEG是一種有損圖像壓縮方法,可以在存儲大小和壓縮程度之間進(jìn)行權(quán)衡,可以針對用戶對畫質(zhì)的需求調(diào)整文件大小,降低了系統(tǒng)硬件的成本消耗[1,7]。算法流程如圖9所示。
系統(tǒng)部分代碼如下:
jpeg_set_default(cinfo,inbuf_buf);//設(shè)置默認(rèn)參數(shù)
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) {//當(dāng)數(shù)據(jù)填滿時(shí)壓縮并輸出數(shù)據(jù)(填滿16行) count=0; jint_process_rows(cinfo);//壓縮 memset((void*)(cinfo->inbuf),0,cinfo->inbuf_size); //清空輸入緩沖區(qū) } } jpeg_finish_compress(cinfo); 4 安卓軟件開發(fā) 該APP主要實(shí)現(xiàn)對監(jiān)測環(huán)境各項(xiàng)環(huán)境指標(biāo)的實(shí)時(shí)查看,對溫濕度閾值和攝像頭的拍照功能進(jìn)行控制,還可通過手機(jī)控制門的開關(guān)。APP主要包括三大模塊,分別為實(shí)時(shí)數(shù)據(jù)模塊、調(diào)控模塊和歷史數(shù)據(jù)模塊。圖10所示為APP操作功能圖。 (1)實(shí)時(shí)數(shù)據(jù)模塊:支持獲取當(dāng)時(shí)環(huán)境的圖片、火情、門狀態(tài)以及溫濕度和當(dāng)前溫濕度的閾值,可以實(shí)時(shí)獲取當(dāng)前環(huán)境參數(shù),并支持下拉刷新。 (2)調(diào)控模塊:可通過當(dāng)前模塊給設(shè)備發(fā)送命令,從而控制當(dāng)前溫濕度的閾值范圍,并能控制設(shè)備的攝像頭拍照,也能夠通過手機(jī)前置攝像頭拍照功能實(shí)現(xiàn)人臉識別,以控制門鎖的開關(guān)。 (3)歷史數(shù)據(jù)模塊:可實(shí)現(xiàn)對以往各項(xiàng)數(shù)據(jù)的查詢。 4.1 實(shí)時(shí)數(shù)據(jù)模塊 該模塊負(fù)責(zé)獲取數(shù)據(jù)并展示給用戶,其界面主要包括上半部分的照片區(qū)域和下半部分的環(huán)境參數(shù)區(qū)域。模塊使用SwipeRefreshLayout實(shí)現(xiàn)下拉刷新功能,使用Retrofit+RaJava網(wǎng)絡(luò)請求框架實(shí)現(xiàn)用GET方法通過由設(shè)備上傳到OneNET平臺上的數(shù)據(jù)流來讀取設(shè)備收集到的數(shù)據(jù),并顯示到各數(shù)據(jù)區(qū)域中。圖11與圖12分別為數(shù)據(jù)模塊的界面與從OneNET獲取數(shù)據(jù)的流程。 4.2 調(diào)控模塊 該模塊負(fù)責(zé)對設(shè)備功能的控制,主要包括溫濕度閾值控制、拍照控制和對門開關(guān)的控制。本界面設(shè)計(jì)了TextInputLayout與TextInputEditText的聯(lián)合使用,用戶輸入計(jì)劃改變的溫濕度閾值,然后點(diǎn)擊“確認(rèn)”按鈕,通過網(wǎng)絡(luò)請求框架用POST方法給平臺下達(dá)命令,從而控制設(shè)備。調(diào)控界面如圖13所示,對設(shè)備的控制流程如圖14所示。 4.3 歷史數(shù)據(jù)模塊 歷史數(shù)據(jù)模塊負(fù)責(zé)提供對以往環(huán)境參數(shù)的查詢功能。該模塊使用Spinner控件提供要查詢的參數(shù)選擇,設(shè)有三個(gè)EditText用以方便用戶輸入要查詢的日期,同時(shí)還使用RecyclerView來顯示查詢的數(shù)據(jù)。圖15為歷史數(shù)據(jù)模塊界面。 5 系統(tǒng)測試與應(yīng)用 5.1 應(yīng)用測試 智能安防系統(tǒng)上線后,系統(tǒng)定時(shí)上傳數(shù)據(jù)并在平臺Web頁面(圖16)和安卓APP顯示。手機(jī)對系統(tǒng)進(jìn)行的控制均響應(yīng)在1 s之內(nèi),若WiFi異?;蚍?wù)器異常,則系統(tǒng)會采取相應(yīng)的重連措施,并在LCD顯示網(wǎng)絡(luò)狀態(tài),如圖17所示。 5.2 網(wǎng)絡(luò)測試 STM32F103在CPU 72 MHz條件下實(shí)測UDP的傳輸速度達(dá)到700~800 Kb/s,TCP傳輸速度達(dá)到650~750 Kb/s,是普通串口WiFi模塊的700倍以上。經(jīng)測試,系統(tǒng)在普通WiFi環(huán)境下不丟包、不多包,不多字節(jié),穩(wěn)定高速的通信可持續(xù)5 h以上。 5.3 圖片壓縮測試 本次實(shí)驗(yàn)測試在單片機(jī)STM32F103VEt上運(yùn)行JPEG壓縮算法,進(jìn)行圖像壓縮(壓縮一張圖片大概需要2 s)后對達(dá)到實(shí)際圖像品質(zhì)的圖像加以對比分析。 圖18中,原圖是OV7725拍攝的照片,為BMP格式,圖像分辨率為320×240。通過設(shè)置質(zhì)量因子,可以得到不同壓縮程度的照片。質(zhì)量因子越小,壓縮后照片的質(zhì)量越高,壓縮比越小。經(jīng)過反復(fù)測試可知,將質(zhì)量因子設(shè)定為75時(shí)的清晰度和文件大小比較適合本應(yīng)用。 6 結(jié) 語 本文利用STM32F103VET通過ALK8266模塊實(shí)現(xiàn)了安防系統(tǒng)與OneNET云平臺的對接,通過客戶端對系統(tǒng)進(jìn)行監(jiān)控和控制,可以在有人闖入或者發(fā)生火情時(shí)及時(shí)向用戶發(fā)出警報(bào)。同時(shí)實(shí)現(xiàn)了圖片的壓縮算法,大大降低了帶寬要求和傳輸延時(shí)。該系統(tǒng)實(shí)際運(yùn)行穩(wěn)定,成本低,適用于大部分安防情景。基于云平臺的智能安防系統(tǒng)還可以在智能家居網(wǎng)關(guān)中進(jìn)行擴(kuò)展,實(shí)現(xiàn)對家中老人和小孩的監(jiān)控。 注:本文通訊作者為李丹。 參考文獻(xiàn) [1]張藝.基于STM32的監(jiān)測系統(tǒng)中圖像處理技術(shù)的研究與應(yīng)用[D].武漢:湖北大學(xué),2018. [2]王坤,丁紅勝.基于STM32的圖像編碼與采集系統(tǒng)[J].電子設(shè)計(jì)工程,2018,26(5):179-183. [3]任志敏.一種ARM Cortex-M3 MCU的圖像采集與JPEG壓縮系統(tǒng)設(shè)計(jì)[J].自動化技術(shù)與應(yīng)用,2013,32(9):24-28. [4]曾勝艷,王善偉.基于STM32的無線圖像采集器[J].福建電腦,2018,34(11):110-111. [5]徐建功,趙捷,李偉,等.基于STM32F103XX微處理器的Micro SD卡讀寫[J].現(xiàn)代電子技術(shù),2010,33(20):26-28. [6]崔鵬偉,閆學(xué)文.基于SD卡的FATFS文件系統(tǒng)的研究與應(yīng)用[J].工業(yè)控制計(jì)算機(jī),2013,26(11):141-142. [7]崔憲偉.一種基于物聯(lián)網(wǎng)的智能大棚監(jiān)控系統(tǒng)的研究[D].青島:青島科技大學(xué),2018. [8]劉曉劍.基于OneNET的物聯(lián)網(wǎng)監(jiān)控系統(tǒng)[D].鄭州:鄭州大學(xué),2016. [9]劉美枝,楊磊.基于Matlab人臉檢測實(shí)現(xiàn)方法在智能安防系統(tǒng)中的應(yīng)用[J].電子技術(shù)與軟件工程,2019(19):63-64. [10]許寶成.華為發(fā)布2019智能安防業(yè)務(wù)新戰(zhàn)略[J].計(jì)算機(jī)與網(wǎng)絡(luò),2019(16):74-75.