何錦淳 李爵成 李丹



摘 要:針對智能安防的需求,文中設計了一款基于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.