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