STM32的GPRS農(nóng)田多點圖像傳輸系統(tǒng)設(shè)計
摘要:設(shè)計了基于32位STM32F103VET6微控制器的農(nóng)田多點圖像傳輸系統(tǒng),重點介紹了其軟件和硬件的設(shè)計過程。在Visual C++6.0平臺,運用Windows socket編寫PC端多線程的服務(wù)器程序,對農(nóng)田多個位置的監(jiān)測終端設(shè)備進(jìn)行圖像傳輸、接收和存儲。該系統(tǒng)實現(xiàn)了圖像從監(jiān)測端到PC服務(wù)器的傳輸和保存等功能。農(nóng)田測試結(jié)果表明,該系統(tǒng)運行穩(wěn)定,圖像傳輸速度較快。
引言
農(nóng)田圖像的監(jiān)測和傳輸對于農(nóng)田管理具有指導(dǎo)意義,其中的農(nóng)田作物圖像含有的信息量大、形象直觀,對農(nóng)田合理和高效管理起著重要作用,因此研究該項技術(shù)十分必要。傳統(tǒng)的農(nóng)田作物圖像傳輸往往利用總線結(jié)構(gòu)或以太網(wǎng)網(wǎng)絡(luò)等有線方式進(jìn)行圖像傳輸,光纖常用于遠(yuǎn)距離的圖像傳輸,這些有線的圖像傳輸方式都不靈活,而且在許多條件惡劣的地方,由于農(nóng)田需要監(jiān)控的區(qū)域廣、監(jiān)控的農(nóng)田作物繁多,需要花費大量人力、物力。隨著圖像處理和移動網(wǎng)絡(luò)傳輸技術(shù)的快速發(fā)展,無線的圖像傳輸方式得到技術(shù)人員的青睞。GPRS網(wǎng)絡(luò)具有時刻在線、網(wǎng)絡(luò)架構(gòu)成熟、以流量計費等優(yōu)點,可根據(jù)用戶需要進(jìn)行農(nóng)田作物圖像數(shù)據(jù)量間歇地傳輸。SIM900A模塊是面向中國的GPRS模塊,具有雙頻信號。根據(jù)GPRS技術(shù)特點,結(jié)合農(nóng)田圖像多監(jiān)測點的需求,研究和設(shè)計了基于SIM900A模塊和STM32F103VET6微控制器的農(nóng)田多點圖像傳輸系統(tǒng),結(jié)合網(wǎng)絡(luò)套接字通信軟件技術(shù),實現(xiàn)了對農(nóng)田多點圖像的遠(yuǎn)程監(jiān)測和圖片的本地存儲。
1 系統(tǒng)總體設(shè)計
多點圖像傳輸系統(tǒng)以STM32微控制器為主控芯片,結(jié)合網(wǎng)絡(luò)套接字通信軟件技術(shù),實現(xiàn)圖像處理壓縮和遠(yuǎn)程傳輸兩大功能。本設(shè)計用STM32F103VET6(以下簡稱STM32)芯片控制CMOS圖像傳感器OV2640獲取圖像,OV2640能夠通過硬件電路實現(xiàn)JPEG壓縮算法,在不影響作物觀測效果的前提下減小了圖像數(shù)據(jù)量,為圖像的無線傳輸提供了方便。
圖像傳感器采集模擬信號轉(zhuǎn)換成相應(yīng)的數(shù)字量,通過8位并行口發(fā)送給STM32,STM32將數(shù)據(jù)發(fā)送給SIM900A,數(shù)據(jù)經(jīng)SIM900A打包成TCP/IP數(shù)據(jù)包,然后通過無線網(wǎng)絡(luò)運營商的網(wǎng)關(guān)服務(wù)器,接入Internet,將采集到的圖像數(shù)據(jù)發(fā)送給服務(wù)器。本設(shè)計利用具有公網(wǎng)固定IP地址的微機作TCP服務(wù)器。系統(tǒng)總體結(jié)構(gòu)設(shè)計如圖1所示。
2 監(jiān)控系統(tǒng)硬件設(shè)計
通過STM32控制OV2640采集農(nóng)田圖像,并通過GPRS模塊把數(shù)據(jù)傳輸給服務(wù)器,系統(tǒng)硬件電路主要包括以下幾部分:圖像傳感器模塊、微控制器模塊、GPRS通信模塊,電源管理模塊。圖像采集由OV2640傳感器完成,負(fù)責(zé)采集農(nóng)田作物的圖像,并將模擬數(shù)據(jù)轉(zhuǎn)換成數(shù)字量,微控制器通過8位并行數(shù)據(jù)口接收圖像數(shù)據(jù)。GPRS通信模塊負(fù)責(zé)把微控制器發(fā)送來的圖像數(shù)據(jù)通過天線傳入Internet,電源管理模塊為系統(tǒng)提供穩(wěn)定的電源。
2.1 微控制器模塊
STM32F103VET6是高性能、低功耗的32位微控制器,8 MHz的外部晶振經(jīng)倍頻后時鐘頻率可達(dá)到72MHz,豐富的外設(shè)資源、大容量的FLASH和SRAM存儲器可以滿足系統(tǒng)設(shè)計要求,其較強的運算能力可以保證大批量圖像數(shù)據(jù)快速傳輸和處理。SPI、UART等豐富的串行接口使得控制器與外部芯片數(shù)據(jù)交換更加自由靈活。STM32接口的PC0~PC7作為OV2640并行數(shù)據(jù)交換口,PA9和PA10組成的UART1作為控制OV2640的信號口使用,PA2和PA3組成的UART2與SIM900A進(jìn)行串口通信。
2.2 OV2640圖像傳感器工作原理
為了采集到清晰的農(nóng)田作物圖像,Omnivision公司的OV2640型圖像傳感器最高圖片輸出分辨率為1600×1200。此傳感器內(nèi)部集成了JPEG壓縮電路,可以通過編程實現(xiàn)原始的200萬像素圖片的JPEG壓縮,使得圖像數(shù)據(jù)量大量減少,便于GPRS網(wǎng)絡(luò)傳輸,功耗也隨之降低。
STM32通過PC0~PC7端口與OV2640的8位數(shù)據(jù)線D0~D7通信,行同步信號HREF、像素同步信號PCLK,以及場同步信號VSYNC和SCCB總線的SDA和SCL信號,用于對傳感器設(shè)備進(jìn)行圖像采集的過程控制。圖像傳感器接口電路設(shè)計如圖2所示,圖2中AVDD2.8V和DOVDD2.8V由3.3V電源通過LM1117—2.85芯片得到;AVDD2.8V與DOVDD2.8V通過0 Ω電阻相連,此方法減少了相互干擾,XCLK由24 MHz的有源晶振輸出提供信號;DVDD1.5V由LM1117—1.5輸出得到74LVC1G00是與非門電路。
HREF是高電平有效,場同步信號VSYNC是低電平有效。當(dāng)引腳VSYNC為高電平時,表示一幀數(shù)據(jù)已經(jīng)準(zhǔn)備好;當(dāng)由高電平變成低電平時,表明開始傳輸一幀圖像數(shù)據(jù)。為了得到有效的像素數(shù)據(jù),需要兩個中斷信號,捕獲場同步VSYNC的信號送入中斷引腳PB8,捕獲HREF和PCLK的與非信號輸出到PB13中斷引腳,使得在行信號無效時不輸出像素同步信號,用其輸出信號作為像素數(shù)據(jù)同步。OV2640的工作模式是由內(nèi)部寄存器確定的,其與外部的接口為SCCB總線,STM32通過PA9和PA10引腳模擬SCCB總線時序讀寫OV2640寄存器,設(shè)置其工作模式,本設(shè)計設(shè)置了輸出圖像的分辨率、亮度、格式等。STM32工作在主模式,對工作在從模式的OV2640內(nèi)部的寄存器進(jìn)行配置,配置完成后經(jīng)一段圖像采集時間后,OV2640即開始按照配置的模式工作。本設(shè)計圖像輸出格式為JPG,分辨率為640×480。
2.3 圖像處理軟件設(shè)計
圖像處理程序負(fù)責(zé)OV2640初始化配置,以便實現(xiàn)圖像的采集功能。通過檢測場同步信號VSYNC判斷一幀圖像的起始位置,程序中設(shè)計128個內(nèi)存單元,可以使系統(tǒng)運行流暢。中斷程序檢測像素同步信號PCLK來采集圖像數(shù)據(jù),當(dāng)PCLK為下降沿時,讀取D0~D7口數(shù)據(jù),并存入內(nèi)存,等待發(fā)送信號的到來,這就完成了圖像的采集與發(fā)送。
圖像采集控制程序是基于OV2640指令集編寫的。init()函數(shù)用于設(shè)置圖片大小、通信波特率和圖片壓縮率等圖片參數(shù),初始化的時候務(wù)必關(guān)閉串口1,start()函數(shù)用于發(fā)出拍照命令,get()函數(shù)完成獲取圖片信息的功能。
2.4 GPRS通信模塊
SIM900A是2頻的GSM/GPRS模塊,工作頻段為900 MHz或1800 MHz,采用SMT封裝,SIM900A型針對中國地區(qū)。SIM900A性能穩(wěn)定、體積小、支持標(biāo)準(zhǔn)和擴展的AT指令。SIM900A還支持GPRS class8/class10和CS-1、CS-2、CS-3和CS-4的GPRS編碼格式,可以低功耗實現(xiàn)語音、SMS、數(shù)據(jù)的傳輸。SIM900A和STM32之間的通信主要是通過端口RXD與STM32上的UART2~TXD,TXD與UART2~RXD之間的數(shù)據(jù)交換來完成。其中,SIM900A上的UART2~TXD是發(fā)送串行數(shù)據(jù)口,UART2~RXD是接收數(shù)據(jù)口。
STM32通過AT指令和SIM900A模塊進(jìn)行通信,這些指令是以普通字符串的形式傳輸?shù)?。每個AT命令執(zhí)行后,模塊都會反饋狀態(tài)信息,表明命令執(zhí)行的結(jié)果,方便程序員了解程序的執(zhí)行情況,要用到AT擴展指令中的TCP/IP型。
2.5 GPRS通信模塊與SIM卡的連接
SIM卡具有5個引腳,分別為SIM卡時鐘信號、電源引腳、數(shù)據(jù)引腳、狀態(tài)引腳和復(fù)位引腳。SIM卡的電源電壓為1.8 V,SIM900A模塊對其供電。
2.6 電源管理
STM32的典型供電電壓是3.3 V,本設(shè)計采用9 V電源供電,要提供9~3.3 V電壓轉(zhuǎn)換,以LM2576-ADJ芯片為核心的電源電路可為STM32提供3.3 V的電壓。LM2576-ADJ最大可提供2 A的電流。
SIM900A模塊典型供電電壓值為4 V,天線發(fā)送信號時的瞬時最大電流可達(dá)到2 A左右,電流增大會使SIM900A電壓突降,影響系統(tǒng)穩(wěn)定性和發(fā)射功率。采用低壓差的MIC29302電源芯片和電源引腳并接大容量電容可以解決此問題,回差電壓低于0.3 V,可提供高達(dá)2.8 A左右的電流,能夠滿足SIM900A峰值電流2 A的要求,9 V電源符合其輸入電壓范圍。
3 監(jiān)測端圖像發(fā)送軟件設(shè)計
在Keil uVision4.12集成環(huán)境下,開發(fā)了監(jiān)測端圖像發(fā)送程序,首先進(jìn)行各模塊的初始化工作,使能STM32相關(guān)中斷,接著STM32控制OV2640拍照和圖片的壓縮,壓縮完成后,接著將流式數(shù)據(jù)通過8位并口存入SRAM為10 428字節(jié)的數(shù)組中。設(shè)置串口2的波特率,并將流式數(shù)據(jù)通過串口2發(fā)送至SIM900A,STM32同時控制SIM900A通過GPRS網(wǎng)絡(luò)連接TCP服務(wù)器,連接過程中首先初始化網(wǎng)絡(luò),即激活移動場景,接著查詢附著是否成功,否則手動附著,并向Internet上具有設(shè)定IP地址的服務(wù)器通過AT+CIPSTART指令申請建立連接,將AT+CIPSTART指令返回的IP地址和端口號存放到一個buff中,然后將這個buff里的內(nèi)容寫入到串口2中。如果之后能夠讀取到返回值“CONNECT OK”,就表示TCP連接已經(jīng)成功建立,失敗則收到“CONNECT FAIL”;TCP連接建立成功后,設(shè)置協(xié)議為TCP,SIM900A請求發(fā)送。
接著使用AT+CIPSEND命令發(fā)送信息,監(jiān)測端將圖片分解成若干個數(shù)據(jù)包,按照GPRS編碼格式組建數(shù)據(jù)包,將數(shù)據(jù)包發(fā)送到服務(wù)器,需要先發(fā)送數(shù)據(jù)包頭,為了保證圖片傳送的完整性,每次在發(fā)送下一個數(shù)據(jù)包之前,需等待上個包發(fā)送成功的回復(fù),若發(fā)送成功返回指令“OK”,否則返回“FAIL”,系統(tǒng)重新發(fā)送,以確保數(shù)據(jù)包被成功交付。
最后等圖片信息包發(fā)送完畢后,發(fā)送AT+CIP-CLOSE指令關(guān)閉連接。此AT命令沒有返回值,直接將該指令寫到串口2中,如果檢測到“CLOSE OK”信息,就表示TCP連接已經(jīng)被關(guān)閉。
服務(wù)器端的監(jiān)聽口接收TCP數(shù)據(jù)包,由于采用多線程設(shè)計,多個點的圖像監(jiān)測設(shè)備可以同時發(fā)送圖像數(shù)據(jù)到服務(wù)器。按程序流程給出進(jìn)行TCP傳輸時用到的AT擴展指令和相關(guān)緩存區(qū)定義。
4 多線程的服務(wù)器端軟件設(shè)計
基于Visual C++6.0平臺開發(fā)了服務(wù)器端對話框形式的程序界面,服務(wù)器端程序設(shè)計主要運用C/S架構(gòu)的套接字,服務(wù)器端程序主要包括3大部分:數(shù)據(jù)流接收、數(shù)據(jù)文件處理并顯示和圖片的硬盤存儲。主線程和用戶子線程分別承擔(dān)不同的任務(wù):主線程負(fù)責(zé)用戶子線程的創(chuàng)建、界面事件的響應(yīng)和圖片文件存儲等工作。監(jiān)測子線程主要完成發(fā)送開始采集命令和與監(jiān)測端進(jìn)行通信的功能,接收完圖像信息后在界面窗口中顯示。各線程運行時相互獨立,因此每個監(jiān)測端與服務(wù)器的數(shù)據(jù)傳輸互不影響。為了防止出現(xiàn)GPRS網(wǎng)絡(luò)連接中斷的情況,程序中采用了斷點續(xù)傳的補救方法,保證了數(shù)據(jù)傳輸過程的準(zhǔn)確和可靠性。
在單個監(jiān)測子線程設(shè)計中,首先創(chuàng)建監(jiān)聽的socket(),用于接收來自網(wǎng)絡(luò)端口的數(shù)據(jù)流,并且分配足夠大的緩沖區(qū)用于存放接收到的數(shù)據(jù)包。在圖片接收過程中,服務(wù)器接收的是分包數(shù)據(jù)流,根據(jù)數(shù)據(jù)包的包頭進(jìn)行數(shù)據(jù)包的排列,并使用校驗位進(jìn)行數(shù)據(jù)包校驗。當(dāng)數(shù)據(jù)包接收完成后校驗完好性,然后將數(shù)據(jù)包保存到一個文件中,最后調(diào)用OpenCV中的庫函數(shù)完成對生成的文件進(jìn)行解碼顯示。在硬盤上按照系統(tǒng)要求的文件名建立3個文件夾,即可自動存入3個不同地點的農(nóng)田圖片。監(jiān)測端程序如圖3所示,服務(wù)器端單個監(jiān)測子線程的工作流程如圖4所示。
5 系統(tǒng)測試與分析
本設(shè)計通過SCCB總線設(shè)置OV2640的圖像大小為JPEG壓縮格式,即分辨率為640×480,經(jīng)過JPEG壓縮后數(shù)據(jù)量從185 KB降低至17 KB左右。樣機制作完成后經(jīng)過多次測試,傳輸速率可達(dá)10 Kbps,傳輸中存在斷點情況,續(xù)傳功能發(fā)揮了作用。圖像文件發(fā)送到服務(wù)器端時間測試結(jié)果如表1所列。
結(jié)語
本文設(shè)計的基于STM32的GPRS農(nóng)田多點圖像傳輸系統(tǒng),具有體積小、監(jiān)控范圍大等優(yōu)點,克服了現(xiàn)場布線成本高、環(huán)境惡劣等難題,為農(nóng)田圖像監(jiān)測和傳輸提出了一種解決方案。由于GPRS通信流量資費、速度和網(wǎng)絡(luò)質(zhì)量的限制,系統(tǒng)傳輸?shù)膱D像分辨率不是很高。隨著4G網(wǎng)絡(luò)技術(shù)的發(fā)展,該系統(tǒng)的架構(gòu)很容易升級到4G網(wǎng)絡(luò)進(jìn)行遠(yuǎn)程的語音、高清圖像傳輸。