高坤,汪瀅
(沈陽化工大學(xué)信息工程學(xué)院,沈陽110142)
ZigBee技術(shù)是一種低速率、近距離、低功耗、低復(fù)雜度、低成本、通信可靠和網(wǎng)絡(luò)容量大的無線通信技術(shù)[1]。根據(jù)IEEE 802.15.4協(xié)議標(biāo)準(zhǔn),ZigBee 的工作頻段分為868 MHz、915 MHz和2.4GHz 3個(gè)頻段,其中2.4GHz頻段上分為16個(gè)信道,該頻段為全球通用的工業(yè)、科學(xué)、醫(yī)學(xué)頻段,該頻段為免付費(fèi)、免申請的無線電頻段,在該頻段上,數(shù)據(jù)傳輸速率為250Kb/s,功耗發(fā)射輸出僅為0~3.6dBm[2],綜合考慮選擇使用2.4GHz頻段。
系統(tǒng)主要由三部分組成:光照度終端采集節(jié)點(diǎn)、協(xié)調(diào)器主節(jié)點(diǎn)和上位機(jī)服務(wù)器監(jiān)控中心。系統(tǒng)的整體結(jié)構(gòu)圖如圖1所示。
本系統(tǒng)的ZigBee無線傳輸網(wǎng)絡(luò)由4個(gè)帶有光照強(qiáng)度傳感器的終端采集節(jié)點(diǎn)和1個(gè)協(xié)調(diào)器主節(jié)點(diǎn)構(gòu)成。終端采集節(jié)點(diǎn)BH1750數(shù)字光照度傳感器采集到的光照強(qiáng)度數(shù)據(jù)通過CC2530射頻收發(fā)模塊以無線方式發(fā)送到協(xié)調(diào)器主節(jié)點(diǎn)CC2530射頻收發(fā)模塊,主節(jié)點(diǎn)CC2530射頻收發(fā)模塊再與主控制器S5PV210進(jìn)行通信,通過3G 網(wǎng)絡(luò)將數(shù)據(jù)傳輸至遠(yuǎn)程上位機(jī)服務(wù)器監(jiān)測中心。
圖1 系統(tǒng)整體結(jié)構(gòu)圖
協(xié)調(diào)器主節(jié)點(diǎn)在整個(gè)ZigBee無線網(wǎng)絡(luò)中的主要作用是建立、維護(hù)、控制終端節(jié)點(diǎn)的加入以及數(shù)據(jù)的匯總、緩存和轉(zhuǎn)發(fā),它是ZigBee網(wǎng)絡(luò)的控制中心,其結(jié)構(gòu)框圖如圖2所示。無線射頻收發(fā)芯片CC2530 完成組網(wǎng)和數(shù)據(jù)無線收發(fā);3G 上網(wǎng)完成數(shù)據(jù)的遠(yuǎn)距離無線傳輸;主控芯片S5PV210負(fù)責(zé)整個(gè)主節(jié)點(diǎn)模塊的協(xié)調(diào)與控制。
圖2 局域網(wǎng)控制主節(jié)點(diǎn)結(jié)構(gòu)框圖
CC2530 是用于IEEE802.15.4、ZigBee和RF4CE 應(yīng)用的一個(gè)真正的片上系統(tǒng)(SoC)解決方案,它能夠以非常低的總材料成本建立強(qiáng)大的網(wǎng)絡(luò)節(jié)點(diǎn),CC2530結(jié)合了RF收發(fā)器的優(yōu)良性能,具有業(yè)界標(biāo)準(zhǔn)的增強(qiáng)型8051CPU、系統(tǒng)內(nèi)可編程閃存,8 KB RAM 和其他強(qiáng)大的功能。CC2530 有4 種不同的閃存版本:CC2530F32/64/128/256,分別具有32/64/128/256KB 的閃存[5]。運(yùn)行模式之間的轉(zhuǎn)換時(shí)間較短,可進(jìn)一步確保低能源消耗。
終端采集節(jié)點(diǎn)負(fù)責(zé)將采集到的光照強(qiáng)度數(shù)據(jù)傳送到協(xié)調(diào)器主節(jié)點(diǎn),其硬件電路原理圖如圖3所示。數(shù)字光照度傳感器BH1750負(fù)責(zé)光照強(qiáng)度數(shù)據(jù)的采集;無線射頻收發(fā)芯片CC2530 負(fù)責(zé)與局域網(wǎng)控制中心無線通信,采集數(shù)據(jù)并發(fā)送數(shù)據(jù)到局域網(wǎng)控制中心。
圖3 局域網(wǎng)采集節(jié)點(diǎn)電路原理圖
BH1750是一種用于兩線式串行總線接口的數(shù)字型光強(qiáng)度傳感器集成電路,這種集成電路可以根據(jù)收集的光線強(qiáng)度數(shù)據(jù)來調(diào)整液晶或者鍵盤背景燈的亮度,利用它的高分辨率可以探測較大范圍的光強(qiáng)度變化,探測范圍可以從1~65 535lx,支持I2C 總線接口(f/s Mode Support),具有接近視覺靈敏度的光譜靈敏度特性(峰值靈敏度波長典型值為560nm)[6];輸出對應(yīng)亮度的數(shù)字值;通過降低功率功能,實(shí)現(xiàn)低電流;通過50 Hz/60 Hz除光噪音功能實(shí)現(xiàn)穩(wěn)定的測定;支持1.8V 邏輯輸入接口;無需其他外部件;光源依賴性弱(白熾燈、熒光燈、鹵素?zé)?、白光LED、日光燈);有兩種可選的I2C總線slave地址;可調(diào)的測量結(jié)果影響較大的因素為光入口大小;最小誤差變動(dòng)在±20%;受紅外線影響很小。
系統(tǒng)軟件設(shè)計(jì)包括終端節(jié)點(diǎn)采集程序、ZigBee 網(wǎng)絡(luò)無線傳輸程序、3G 網(wǎng)絡(luò)無線傳送程序和上位機(jī)服務(wù)器監(jiān)測程序的軟件設(shè)計(jì)。
BH1750與主控器之間的通信使用標(biāo)準(zhǔn)的I2C總線通信協(xié)議。I2C 總線是一種由NXP公司開發(fā)的兩線式串行總線,用于連接微控制器及其外圍設(shè)備[7]。主控器通過I2C總線接口向BH1750發(fā)送各種控制命令以及讀取測量數(shù)據(jù)。主要控制命令如下:上電指令為0x01;斷電指令為0x00;連續(xù)H 分辨率模式為0x10;連續(xù)L分辨率模式為0x13;一次H 分辨率模式為0x20;一次L分辨率模式為0x23。
以“連續(xù)高分辨率模式”為例,測量步驟如下:
①發(fā)送“上電”指令。
②發(fā)送“連續(xù)高分辨率模式”指令。
③等待完成第一次高分辨率模式的測量(最大時(shí)間為180ms)。
④發(fā)送讀指令。
⑤讀測量結(jié)果。
ZigBee協(xié)調(diào)器節(jié)點(diǎn)上電后,ZDO 層首次進(jìn)行一系列的初始化工作,然后調(diào)用ZDO 層的初始化設(shè)備函數(shù),最終觸發(fā)網(wǎng)絡(luò)初始化函數(shù),開始構(gòu)建一個(gè)新的網(wǎng)絡(luò)。建立網(wǎng)絡(luò)時(shí),協(xié)調(diào)器節(jié)點(diǎn)首先逐個(gè)對各個(gè)信道進(jìn)行掃描,根據(jù)各個(gè)信道的能量值進(jìn)行排序,選擇能量值達(dá)到一定大小的信道為可用信道。其次,由網(wǎng)絡(luò)層在可用信道中選定信道,并隨機(jī)選擇一個(gè)在所選信道中唯一的16 位網(wǎng)絡(luò)標(biāo)識符(PAN-ID)分配給這個(gè)新建的網(wǎng)絡(luò)[8]。協(xié)調(diào)器的軟件設(shè)計(jì)流程圖如圖4所示。
終端采集節(jié)點(diǎn)上電以后進(jìn)行設(shè)備初始化,然后檢測周圍是否有網(wǎng)絡(luò)存在,當(dāng)發(fā)現(xiàn)有網(wǎng)絡(luò)存在時(shí),網(wǎng)絡(luò)層將給予ZDA 層發(fā)現(xiàn)網(wǎng)絡(luò)反饋信息,然后由網(wǎng)絡(luò)層向能量強(qiáng)度相對較大的網(wǎng)絡(luò)發(fā)出加入網(wǎng)絡(luò)請求;加入網(wǎng)絡(luò)成功,則網(wǎng)絡(luò)層將給予ZDA 層加入網(wǎng)絡(luò)反饋。成功加入網(wǎng)絡(luò)之后開始向協(xié)調(diào)器發(fā)出綁定請求,綁定成功后開始對光照數(shù)據(jù)進(jìn)行采集,將采集到的數(shù)據(jù)進(jìn)行預(yù)處理并無線發(fā)送至協(xié)調(diào)器節(jié)點(diǎn)。傳感器終端采集節(jié)點(diǎn)軟件流程圖如圖5所示。
圖4 協(xié)調(diào)器的軟件流程圖
圖5 傳感器采集節(jié)點(diǎn)軟件流程圖
3.3.1 usb_modeswitch的移植
usb_modeswitch是一種在Linux系統(tǒng)下對USB設(shè)備的工作模式進(jìn)行轉(zhuǎn)換的工具,用于控制含有多個(gè)USB 子設(shè)備的USB 設(shè)備。在Linux環(huán)境下,廠家一般不會提供USB設(shè)備在Linux系統(tǒng)上的驅(qū)動(dòng),所以需要用usb_modeswitch工具來進(jìn)行模式轉(zhuǎn)換。設(shè)備模式依賴usb-storage和usbserial,所以在開發(fā)板上需要有這兩種模塊的支持,設(shè)備小能夠正常工作于這兩種模式下。
usb_modeswitch依賴于libusb提供的一系列庫文件,首先需要安裝libusb。解壓并進(jìn)入libusb-1.0.6目錄,使用如下命令建立子目錄install,用于存放最后生存的庫文件與頭文件。usb_modeswitch移植過程略——編者注。
3.3.2 PPPD的移植
Linux在內(nèi)核中已經(jīng)支持3G模塊驅(qū)動(dòng)和PPP網(wǎng)絡(luò)協(xié)議棧,需要做的工作是在內(nèi)核中配置3G模塊驅(qū)動(dòng)和PPP網(wǎng)絡(luò)協(xié)議棧的相關(guān)選項(xiàng)。PPPD的移植過程略——編者注。
在開發(fā)板文件系統(tǒng)/etc/ppp/peers目錄下邊創(chuàng)建三個(gè)文件,代碼略——編者注。
3.3.3 主節(jié)點(diǎn)與上位機(jī)通信程序設(shè)計(jì)
通過PPPD的撥號,可以建立數(shù)據(jù)鏈路層的連接,數(shù)據(jù)鏈路層采用PPP協(xié)議,它是一種面向字符的協(xié)議,是為在兩個(gè)對等實(shí)體間傳輸數(shù)據(jù)包連接而設(shè)計(jì)的,使用可擴(kuò)展的鏈路控制協(xié)議LCP來建立、配置和測試數(shù)據(jù)鏈路。網(wǎng)絡(luò)程序還需要TCP/IP協(xié)議的支持,Linux內(nèi)核已經(jīng)保留了對TCP/IP以及其他的網(wǎng)絡(luò)協(xié)議的支持。最后編寫嵌入式Linux上的網(wǎng)絡(luò)客戶端應(yīng)用程序和Windows網(wǎng)絡(luò)服務(wù)器端應(yīng)用程序,傳送想要傳送的數(shù)據(jù)。主節(jié)點(diǎn)主控制器與上位機(jī)服務(wù)器通信的程序流程圖如圖6所示。
圖6 主節(jié)點(diǎn)與上位機(jī)通信程序流程圖
服務(wù)器上位機(jī)軟件的開發(fā)采用Microsoft Visual C++6.0開發(fā)環(huán)境,采用的是面向?qū)ο蟮某绦蛟O(shè)計(jì)方法,對于每一個(gè)窗口都建立了相應(yīng)的類,在類的基礎(chǔ)上創(chuàng)建對象,對對象的操作就是對其對應(yīng)的窗口的操作。監(jiān)控中心軟件主要實(shí)現(xiàn)以下功能:建立服務(wù)器端并接收客戶端的連接;接收客戶端發(fā)送過來的數(shù)據(jù)并顯示;實(shí)時(shí)曲線顯示;歷史數(shù)據(jù)查詢。
在系統(tǒng)調(diào)試過程中,傳輸數(shù)據(jù)時(shí)上位機(jī)接收到的數(shù)據(jù)有個(gè)別是錯(cuò)誤的,通過查看二進(jìn)制代碼發(fā)現(xiàn)0x11、0x13字符沒有接收到??s小范圍查看問題出在哪個(gè)環(huán)節(jié),檢驗(yàn)發(fā)現(xiàn)主節(jié)點(diǎn)控制器S5PV210 沒有接收到0x11、0x13 字符,而主節(jié)點(diǎn)CC2530單片機(jī)已經(jīng)接收到了0x11、0x13字符,那么問題一定出現(xiàn)在串口上。
在Linux串口編程中都沒對c_iflag(termios成員變量)這個(gè)變量進(jìn)行有效的設(shè)置,這樣傳送ASCII碼時(shí)沒有問題,但傳送二進(jìn)制數(shù)據(jù)時(shí)遇到0x0d、0x11和0x13卻會被丟掉。這幾個(gè)字符是特殊字符,被用作特殊控制了,只需要關(guān)掉ICRNL和IXON 選項(xiàng)即可。
具體做法是在主控制器Linux串口初始化函數(shù)中添加以下語句:
options.c_iflag &=~(ICRNL|IXON|IXOFF);
options是之前定義的termios類型的結(jié)構(gòu)體。通過以上設(shè)置就可以屏蔽掉0x11、0x13字符的特殊功能,從而能正常傳送以上字符。
連接好硬件設(shè)備后,配置編譯內(nèi)核,將編譯好的內(nèi)核通過USB下載到開發(fā)板上,然后重啟。再將編譯好的應(yīng)用程序通過串口終端下載到開發(fā)板上。將3G 上網(wǎng)卡插到USB接口上,使用如下命令建立3個(gè)TTY 設(shè)備文件節(jié)點(diǎn),代碼略——編者注。
我們可以看到PING 新浪的WEB服務(wù)器可以PING通,說明已經(jīng)成功接入因特網(wǎng)了。然后將4個(gè)終端分節(jié)點(diǎn)放在不同的光照環(huán)境下,啟動(dòng)上位機(jī)軟件,建立服務(wù)器端,開始等待接收主節(jié)點(diǎn)客戶端的連接請求和發(fā)送過來的數(shù)據(jù)并且顯示。啟動(dòng)主節(jié)點(diǎn)客戶端程序來連接服務(wù)器,最后啟動(dòng)分節(jié)點(diǎn)的采集傳送程序。上位機(jī)接收到并顯示的監(jiān)測數(shù)據(jù)圖略——編者注。
本文闡述了一種將低成本、低功耗的短距離無線Zig-Bee技術(shù)與遠(yuǎn)距離3G 移動(dòng)通信技術(shù)相結(jié)合的遠(yuǎn)程無線測光系統(tǒng),并完成了對采集終端節(jié)點(diǎn)、協(xié)調(diào)器主節(jié)點(diǎn)的軟硬件設(shè)計(jì),通過編寫Windows平臺上位機(jī)軟件對采集到的數(shù)據(jù)進(jìn)行實(shí)時(shí)顯示與分析。
編者注:本文為期刊縮略版,全文見本刊網(wǎng)站www.mesnet.com.cn。
[1]尹航,張奇松,程志林.基于ZigBee 無線網(wǎng)絡(luò)的溫濕度檢測系統(tǒng)[J].機(jī)電工程,2008,25(11):20-23
[2]張豐,史偉,傅磊.基于ZigBee的工業(yè)控制監(jiān)測系統(tǒng)[J].重型機(jī)械,2010(S1):267-268.
[3]孫學(xué)巖.基于ZigBee無線傳感器網(wǎng)絡(luò)的溫室測控系統(tǒng)[J].儀表技術(shù)與傳感器,2010(8):47.
[4]Samsung Electronics.S5PV210RISC Microprocessor User’s Manual,2010.
[5]Texas Instruments.A True System-on-Chip Solution for 2.4-GHz IEEE 802.15.4and ZigBee Applications,2011.
[6]ROHM.Digital 16bit Serial Output Type Ambient Light Sensor IC,2010.
[7]王立平,王新梅.Linux環(huán)境下基于I2C 總線的EEPROM 驅(qū)動(dòng)程序[J].國外電子元器件,2007(1).
[8]王翥,郝曉強(qiáng),魏德寶.基于WSN 和GPRS網(wǎng)絡(luò)的遠(yuǎn)程水質(zhì)監(jiān)測系統(tǒng)[J].儀表技術(shù)與傳感器,2010(1):48.