錢光明++李楓
摘要:用STM32單片機(jī)+WIFI模塊+攝像頭可以組成一個簡單、便宜且低功耗的現(xiàn)場裝置,用于網(wǎng)絡(luò)遠(yuǎn)程監(jiān)控。該文基于GainSpan公司推出的低功耗WIFI模塊GS1011M,主要研究傳送圖片數(shù)據(jù)時頗為值得注意的格式問題,如果處理不好,易出現(xiàn)接收圖片時好時壞或嚴(yán)重失真等現(xiàn)象。文章總結(jié)了GS1011M的幾種主要數(shù)傳方式,研究了圖片傳送時的相關(guān)細(xì)節(jié),提出了一種透明傳輸方案。
關(guān)鍵詞:WIFI模塊;S格式;Y格式;透明傳輸
中圖分類號:TP393 文獻(xiàn)標(biāo)識碼:A 文章編號:1009-3044(2015)11-0049-02
在當(dāng)今的無線網(wǎng)絡(luò)應(yīng)用中,WIFI為越來越多的人所熟悉。人們在感嘆WIFI技術(shù)帶來方便的同時,也在不斷地挖掘著它的潛力,如何將該技術(shù)用于網(wǎng)絡(luò)遠(yuǎn)程監(jiān)控就是近年來許多人關(guān)心的問題,而低功耗網(wǎng)絡(luò)監(jiān)控更是有著特別的吸引力。GS1011M是GainSpan公司推出的WIFI模塊,該模塊給用戶提供UART或SPI接口,用戶通過簡單的AT指令即可進(jìn)行網(wǎng)絡(luò)連接和數(shù)據(jù)傳輸[1]。尤其要指出的是:GS1011M模塊有著優(yōu)良的低功耗性能,其待機(jī)電流典型值只有7μA,是低功耗WIFI應(yīng)用的不錯選擇。如果將GS1011M用于簡單的傳感器數(shù)據(jù)傳送(如溫度、位置等測量),有些文獻(xiàn)可供參考[2]。而本文要研究的是用GS1011M通過WIFI進(jìn)行圖像傳送這一問題。
1 簡單的圖片傳送裝置
圖1是用GS1011M組成的、簡單的圖像傳送裝置。攝像頭模塊通過SCCB接口接受STM32單片機(jī)發(fā)來的命令,由該模塊采集并處理后的圖像數(shù)據(jù)通過8位并行數(shù)據(jù)線傳向STM32單片機(jī),再由單片機(jī)的UART接口送往WIFI模塊,傳向網(wǎng)絡(luò)。實(shí)驗用攝像頭采用OV2640,它與STM32單片機(jī)還有一些其它的連接,如系統(tǒng)時鐘輸入XVCLK、場同步輸出VSYNC等等。
圖1 簡單的圖像傳送裝置。
2 GS1011M的圖像數(shù)據(jù)傳送方式
“數(shù)據(jù)處理”(Data Processing)方式和“自動連接”(Auto Connection Operation)方式是GS1011M的兩個主要數(shù)據(jù)傳輸方式。自然可用于圖像數(shù)據(jù)傳送。
2.1 “數(shù)據(jù)處理”方式
采用“數(shù)據(jù)處理”方式,可以比較好地把握整個數(shù)據(jù)的傳遞過程,尤其是在調(diào)試過程中。而該方式的具體實(shí)施又有兩類主要格式:
先看第一種格式。數(shù)據(jù)包的開頭和結(jié)尾均出現(xiàn)
如果采用S格式,“0x1b”(在串口精靈上顯示為短左箭頭)將不會被GS1011傳遞,數(shù)據(jù)中若包含該特殊字符,應(yīng)心中有數(shù),這時必須采用透明傳輸?shù)霓k法。這類似于網(wǎng)絡(luò)教材中面向字節(jié)的透明傳輸原理。例如,圖2是一個用OV2640得到的JPG彩條圖片文件的部分?jǐn)?shù)據(jù),其中就包含“0x1b”。如果采用S格式直接對圖2所示文件傳輸,因為丟失“0x1b”,彩條圖片傳出后顯示的結(jié)果如圖3所示,顯然已經(jīng)嚴(yán)重失真。
圖2 一個彩條JPG圖片的部分?jǐn)?shù)據(jù)
圖3 丟失0x1b后的彩條圖片。320*240分辨率
如何使“0x1b”用S格式傳出去?實(shí)驗中,我們在發(fā)送端采用一串特殊字符“0x22 0x33 0x44”來代替“0x1b”,在接收端再將“0x22 0x33 0x44”換成“0x1b”。圖片數(shù)據(jù)中一些地方會不會本身就含有“0x22 0x33 0x44”呢?如果有,我們的處理辦法是:在發(fā)送端只要出現(xiàn)“0x22 0x33”,就馬上插入一個“0x00”;在接收端只要出現(xiàn)“0x22 0x33”,就將緊隨其后的“0x00”去掉。如此便實(shí)現(xiàn)了透明傳輸。為什么選擇“0x22 0x33 0x44”而不采用“0xFF”之類的字符呢?因為“0xff”在JPG文件中作為標(biāo)志性的字符肯定要出現(xiàn),我們再選它來代替“0x1b”顯然不合適。實(shí)際上,在原始圖片數(shù)據(jù)中,出現(xiàn)“0x22 0x33”的概率很低,我們的實(shí)驗中從未出現(xiàn)過。
再看第二種格式。數(shù)據(jù)包以
2.2 “自動連接”方式
有別于“數(shù)據(jù)處理”方式,GS1011M模塊進(jìn)入“自動連接”方式后,起到的完全是一個透明傳遞的橋梁(pass-through)作用。該方式中,GS1011M不再接收AT命令,也不會把
但是,如果數(shù)據(jù)傳輸時連續(xù)出現(xiàn)3個“+”,然后停頓1秒鐘(不傳遞任何字符),GS1011M模塊將退出“自動連接”方式。符號“+”對應(yīng)的十六進(jìn)制是“0x2b”。圖像數(shù)據(jù)中有沒有可能連續(xù)出現(xiàn)3個“0x2b”呢?有。圖4是用OV2640采集的一個YUV422文件的片段,其中包含了連續(xù)4個“0x2b”的情況。那么,有沒有可能在連續(xù)3個以上的“0x2b”后,出現(xiàn)1秒鐘的數(shù)據(jù)傳輸停頓呢?雖然概率低,但不是沒有可能,這一點(diǎn)應(yīng)該引起設(shè)計者的注意。一旦出現(xiàn),不管預(yù)定的數(shù)據(jù)是否傳輸完畢,GS1011M就不再是要它傳什么就會傳什么的狀態(tài)了。
圖4 包含了連續(xù)4個“+”的一個YUV422文件部分?jǐn)?shù)據(jù)
3 結(jié)束語
通過以上分析可知:利用“數(shù)據(jù)處理”方式中的S格式傳輸數(shù)據(jù)時,需要注意特殊數(shù)據(jù)“0x1b”;采用“自動連接”方式時,則需要注意特殊數(shù)據(jù)串“0x2b 0x2b 0x2b”再加1秒鐘的停頓。因為圖像數(shù)據(jù)格式多,內(nèi)容豐富,每一個數(shù)據(jù)字節(jié)可能是從“0x00”到“0xff”中的任何一個,因此,碰到這些特殊數(shù)據(jù)是可能的。而如果采用“數(shù)據(jù)處理”方式中的Y格式的話,就可以免去這種特殊數(shù)據(jù)帶來的煩惱。只不過要注意用Y格式時,每次可以傳遞的字節(jié)數(shù)是有限制的。
參考文獻(xiàn):
[1] Gain Span. GS1011M_Datasheet_rev_1_6. 2013.
[2] 張耀,丁恩杰,史巖巖,等.礦山人員狀態(tài)感知節(jié)點(diǎn)的研究與設(shè)計[J].計算機(jī)測量與控制, 2012,20(12): 3302-3305.
[3] GainSpan. Serial_to_WiFi_Adapter_Guide_ver_5_14. 2012.