北京信息科技大學(xué) 自動(dòng)化學(xué)院,北京 100192
溫度監(jiān)測(cè)系統(tǒng)在生活中有著廣泛地應(yīng)用,比如:溫室大棚的溫度監(jiān)測(cè)、工廠車(chē)間的溫度報(bào)警裝置等等。在一些特定環(huán)境中,溫度監(jiān)測(cè)環(huán)境范圍大,測(cè)點(diǎn)距離遠(yuǎn),傳統(tǒng)的布線方式很不方便,這時(shí)就要采取無(wú)線方法對(duì)溫度數(shù)據(jù)進(jìn)行采集。ZigBee協(xié)議作為一種全新的無(wú)線傳感技術(shù)應(yīng)運(yùn)而生,它以配置快捷、節(jié)點(diǎn)耗電低、雙向傳送數(shù)據(jù)和控制命令等特點(diǎn)在其他無(wú)線通信協(xié)議中脫穎而出,成為了眾多廠家的首選協(xié)議。
ZigBee可以在一定區(qū)域內(nèi)進(jìn)行監(jiān)測(cè),并將所收集的數(shù)據(jù)發(fā)送到中心節(jié)點(diǎn),以便實(shí)現(xiàn)區(qū)域的監(jiān)測(cè)、跟蹤和遙控。大量廉價(jià)的節(jié)點(diǎn)進(jìn)行有機(jī)的組合,并按照一定的通信標(biāo)準(zhǔn)就構(gòu)成了ZigBee無(wú)線網(wǎng)絡(luò),每個(gè)網(wǎng)絡(luò)節(jié)點(diǎn)都具有自己的位置,發(fā)揮一定的作用。ZigBee網(wǎng)絡(luò)是大規(guī)模的、自組織的、多跳的,在整個(gè)網(wǎng)絡(luò)中基本上設(shè)備是固定的,它們都彼此在一定的監(jiān)測(cè)區(qū)域發(fā)揮著自己應(yīng)有的作用,由于每個(gè)設(shè)備都處在末端,有時(shí)候會(huì)在一些惡劣的環(huán)境中,所以這些節(jié)點(diǎn)的工作時(shí)間要長(zhǎng)[1]。
基于ZigBee的無(wú)線溫度監(jiān)測(cè)系統(tǒng)能夠更便捷、可靠地完成人們的測(cè)溫要求,與其它技術(shù)比較來(lái)說(shuō),具有成本低、工作時(shí)間長(zhǎng)的特點(diǎn),突出的優(yōu)點(diǎn)是非常簡(jiǎn)潔,能夠快速應(yīng)用到實(shí)際中。
本系統(tǒng)是利用ZigBee技術(shù)來(lái)實(shí)現(xiàn)無(wú)線溫度監(jiān)測(cè)的目的,那么就需要對(duì)ZigBee系統(tǒng)進(jìn)行設(shè)計(jì),包括無(wú)線通信模塊、協(xié)調(diào)器和終端的設(shè)計(jì),搭建完整的硬件電路,進(jìn)而對(duì)環(huán)境溫度進(jìn)行智能監(jiān)測(cè)。整體結(jié)構(gòu)如圖1所示。
通信芯片選擇的是TI公司的CC2530。CC2530是一種用于2.4GHz IEEE 802.15.4/ZigBee/RF4CE的單芯片解決方案,具有射頻性能好、功耗超低、靈敏度高、抗噪聲及干擾能力強(qiáng)等優(yōu)點(diǎn),而且成本低廉,只需很少的外置低成本元件即可支持快速、廉價(jià)的ZigBee節(jié)點(diǎn)的構(gòu)建。CC2530在一般空曠環(huán)境下的最遠(yuǎn)通訊距離為100m左右。
CC2530芯片集成了可編程閃存、MCU和ZigBee RF,其中MCU為8位單周期8051微控制核心,外設(shè)資源包括DMA、定時(shí)/計(jì)數(shù)器、看門(mén)狗定時(shí)器、AES-128協(xié)處理器、8~14位ADC、USART、睡眠模式定時(shí)器、上電復(fù)位電路、掉電檢測(cè)電路以及21個(gè)可編程I/O引腳[2]等。
CC2530的功耗很低,其睡眠與工作模式間激活轉(zhuǎn)換時(shí)間非常短,是超長(zhǎng)電池使用壽命應(yīng)用的理想解決方案,在接收和發(fā)射傳輸模式下的電池?fù)p耗分別為27mA和15mA[3]。
另外,TI公司還提供了開(kāi)源的協(xié)議棧,協(xié)議棧的底層代碼已經(jīng)封裝完畢,只需調(diào)用即可,提高了程序開(kāi)發(fā)的效率。
CC2530芯片的RF-P 與RF-N管腳是一對(duì)差分輸入輸出信號(hào)。射頻輸入和輸出電路中使用2.4GHz頻段的信號(hào),使用一個(gè)非平衡天線,連接非平衡變壓器,使天線性能更優(yōu)?;具B接圖見(jiàn)圖2。
協(xié)調(diào)器作為網(wǎng)絡(luò)的關(guān)鍵點(diǎn),主要功能是進(jìn)行網(wǎng)絡(luò)的組建,并將接收終端節(jié)點(diǎn)的溫度數(shù)據(jù)包然后發(fā)送給上位機(jī)。協(xié)調(diào)器節(jié)點(diǎn)結(jié)構(gòu)如圖3所示,主要包括CC2530核心模塊、串口通信模塊、電源模塊等。
本系統(tǒng)中協(xié)調(diào)器有著很重要的作用,它負(fù)責(zé)整個(gè)網(wǎng)絡(luò)的搭建。協(xié)調(diào)器可以允許終端節(jié)點(diǎn)的加入,另外協(xié)調(diào)器作為數(shù)據(jù)傳輸?shù)闹袠猩窠?jīng),將溫度數(shù)據(jù)通過(guò)串口發(fā)送給上位機(jī)。電源模塊是最基本的模塊,提供給協(xié)調(diào)器進(jìn)行工作的能量來(lái)源。仿真器模塊通過(guò)USB與仿真器接口將主機(jī)和CC2530通信模塊相連,主要負(fù)責(zé)將協(xié)調(diào)器的程序下載,可以在線調(diào)試。LED指示電路模塊負(fù)責(zé)指示協(xié)調(diào)器的工作狀態(tài)和運(yùn)行流程,LED閃爍一次表示協(xié)調(diào)器開(kāi)始工作,連續(xù)閃爍四次表示終端節(jié)點(diǎn)成功加入網(wǎng)絡(luò),來(lái)判定當(dāng)前協(xié)調(diào)器運(yùn)行狀態(tài),也可以檢驗(yàn)協(xié)調(diào)器是否正常的工作。
終端模塊主要負(fù)責(zé)將采集的溫度數(shù)據(jù)進(jìn)行處理并打包,并把溫度數(shù)據(jù)包發(fā)送給協(xié)調(diào)器。除此之外還需要判斷協(xié)調(diào)器發(fā)過(guò)來(lái)的溫度控制命令。終端節(jié)點(diǎn)組成結(jié)構(gòu)圖如圖4所示,系統(tǒng)由CC2530無(wú)線通信/處理、溫度傳感器、電源、仿真器、LED指示電路等模塊組成。
終端節(jié)點(diǎn)作為溫度數(shù)據(jù)采集的主要節(jié)點(diǎn)在整個(gè)網(wǎng)絡(luò)中發(fā)揮重要作用。終端節(jié)點(diǎn)需要采集溫度,并且需要處理溫度數(shù)據(jù)。當(dāng)然終端節(jié)點(diǎn)也需要電源來(lái)保障其正常工作。終端節(jié)點(diǎn)中有LED指示電路模塊負(fù)責(zé)指示其工作狀態(tài)和運(yùn)行流程,LED閃爍一次表示協(xié)調(diào)器開(kāi)始工作,連續(xù)閃爍兩次表示未成功加入網(wǎng)絡(luò),連續(xù)閃爍四次表示成功加入網(wǎng)絡(luò),以此來(lái)判定當(dāng)前協(xié)調(diào)器運(yùn)行狀態(tài),也可以檢驗(yàn)終端是否正常工作。
溫度傳感器采用DALLAS公司生產(chǎn)的DSl8B20,測(cè)溫范圍在-55℃~ +125℃之間,溫度計(jì)的分辨率可以從9位到12位選擇[4]。DSl8B20是1-Wire即單總線器件,具有單線接口、體積小和線路簡(jiǎn)單的特點(diǎn),處理器和DSl8B20僅需一條連接線就可完成數(shù)據(jù)收發(fā)及電源提供(也可以由外部的3.3V電源供電),在一根通信線上可以掛很多的溫度計(jì),形成多點(diǎn)分布應(yīng)用。
傳感器DS18B20主要引腳包括接地端、輸入/輸出端和電源端,它與CC2530的P1.1口相連,用于溫度數(shù)據(jù)的傳輸,電源接3.3V電源。
(1)串行通信接口設(shè)計(jì)
本系統(tǒng)中應(yīng)用到了CH340 USB轉(zhuǎn)接芯片,實(shí)現(xiàn)了USB轉(zhuǎn)串口,在開(kāi)發(fā)板上焊接了USB模塊方便與PC機(jī)進(jìn)行通信。
串行通信模塊原理圖如圖5所示。CH340芯片中的RTS和DTR引腳分別連接CC2530芯片的TXD(P03)和RXD(P02)。USB模塊的2和3引腳分別接到了CH340的管腳VD-和VD+引腳上。
(2)電源模塊設(shè)計(jì)
本系統(tǒng)中的通信芯片具有低功耗的特點(diǎn),再加上節(jié)點(diǎn)的便捷性,采用電池板進(jìn)行供電,能很好地滿足芯片的要求,且能降低開(kāi)發(fā)成本。因此本次設(shè)計(jì)使用2節(jié)5號(hào)電池。原理圖如圖6所示。
系統(tǒng)的軟件設(shè)計(jì)保證系統(tǒng)按照預(yù)期效果工作,通過(guò)對(duì)硬件模塊進(jìn)行程序編寫(xiě),來(lái)達(dá)到ZigBee網(wǎng)絡(luò)的組建,溫度的采集和發(fā)送,節(jié)點(diǎn)數(shù)據(jù)的傳輸和顯示。系統(tǒng)的硬件模塊主要有協(xié)調(diào)器、終端兩個(gè)部分,那么軟件設(shè)計(jì)就要按照這兩個(gè)部分進(jìn)行,即協(xié)調(diào)器軟件設(shè)計(jì)、終端軟件設(shè)計(jì)、上位機(jī)軟件設(shè)計(jì)。系統(tǒng)軟件結(jié)構(gòu)如圖7所示。
本系統(tǒng)的開(kāi)發(fā)環(huán)境是與CC2530配套的IAR Embedded Workbench IDE,Z-Stack為開(kāi)發(fā)者提供了大量的程序代碼和API函數(shù)接口,提高了開(kāi)發(fā)效率。Z-Stack分為以下幾層:AP、HAL、MAC、NWK、OSAL、Security、Service、ZDO[5]。我們主要對(duì) API層進(jìn)行調(diào)用,把已建立好的項(xiàng)目做修改,添加自己的應(yīng)用程序,利用移植的方式來(lái)開(kāi)發(fā)項(xiàng)目。IAR打開(kāi)工程后,就可以看到整個(gè)協(xié)議棧的分布。主要對(duì)App中的文件進(jìn)行修改來(lái)達(dá)到自己預(yù)期的要求,所以說(shuō)會(huì)降低開(kāi)發(fā)周期,非常適合工程項(xiàng)目的開(kāi)發(fā)。
Z-Stack的主函數(shù)在ZMain.c中的主要工作是系統(tǒng)初始化,即由啟動(dòng)代碼來(lái)初始化硬件系統(tǒng)和軟件結(jié)構(gòu)需要的各個(gè)模塊,然后開(kāi)始執(zhí)行操作系統(tǒng)實(shí)體。
在ZigBee網(wǎng)絡(luò)中,協(xié)調(diào)器起著至關(guān)重要的作用,完成整個(gè)網(wǎng)絡(luò)的組建工作。它作為網(wǎng)絡(luò)的中心,是第一個(gè)要啟動(dòng)的,通過(guò)它來(lái)建立數(shù)據(jù)通道。通電后,首先要進(jìn)行硬件和軟件架構(gòu)的初始化。完成后,開(kāi)始掃描信道,選擇一個(gè)合適的信道,并且選一個(gè)PAN_ID,然后通過(guò)廣播的方式發(fā)送網(wǎng)絡(luò)ID號(hào)、信道等[6]。終端節(jié)點(diǎn)的申請(qǐng)入網(wǎng)信號(hào)一旦被協(xié)調(diào)器接收到,終端節(jié)點(diǎn)得以加入網(wǎng)絡(luò)中,并為其分配16位短地址[7]。協(xié)調(diào)器接收到終端傳來(lái)的溫度數(shù)據(jù)包,并通過(guò)串口傳輸給PC機(jī)。協(xié)調(diào)器不會(huì)進(jìn)入休眠模式,它會(huì)一直保持著工作的狀態(tài)。其工作流程如圖8所示。
本系統(tǒng)的終端通電后,節(jié)點(diǎn)啟動(dòng),并不斷掃描指定的頻道,向協(xié)調(diào)器發(fā)送加入網(wǎng)絡(luò)的請(qǐng)求,如果沒(méi)有成功加入,則再次嘗試加入網(wǎng)絡(luò)。加入網(wǎng)絡(luò)成功后,得到協(xié)調(diào)器分配的網(wǎng)絡(luò)地址,沒(méi)有事件處理時(shí)就進(jìn)入休眠狀態(tài),以降低功耗,延長(zhǎng)使用時(shí)間。當(dāng)有事件需要處理時(shí),喚醒系統(tǒng),節(jié)點(diǎn)每隔一定的周期采集和讀取周?chē)h(huán)境的溫度,并把采集的數(shù)據(jù)打包發(fā)送給協(xié)調(diào)器,如果發(fā)送成功,節(jié)點(diǎn)將會(huì)進(jìn)入休眠狀態(tài);如果沒(méi)有成功,就要不斷的發(fā)送數(shù)據(jù)包,直到發(fā)送成功。終端設(shè)備通信流程如圖9所示。
在系統(tǒng)中,當(dāng)協(xié)調(diào)器收集到終端發(fā)送來(lái)的數(shù)據(jù)時(shí),對(duì)溫度數(shù)據(jù)進(jìn)行一系列處理,將溫度數(shù)據(jù)通過(guò)串口傳輸給PC機(jī)。本系統(tǒng)不僅要監(jiān)測(cè)當(dāng)前環(huán)境的溫度,同時(shí)還要對(duì)當(dāng)前溫度進(jìn)行必要的調(diào)節(jié),通過(guò)上位機(jī)應(yīng)用程序設(shè)定溫度的閾值,當(dāng)溫度低于或者高于設(shè)定的溫度范圍時(shí),會(huì)提示溫度不在正常范圍內(nèi),需要進(jìn)行調(diào)節(jié)。這時(shí)應(yīng)用者就可以了解到當(dāng)前溫度的情況,做好調(diào)節(jié)溫度的措施。上位機(jī)軟件系統(tǒng)流程圖如圖10所示。
在VC++的MFC窗體中集成了串口庫(kù),通過(guò)插入Microsoft Communication Control控件來(lái)完成上位機(jī)的編寫(xiě)[8]。需要注意的是,COM和波特率一定要設(shè)置正確,否則不能進(jìn)行正常的通信。串口成功打開(kāi)后,成功接收數(shù)據(jù),將溫度數(shù)據(jù)包讀到緩沖區(qū)buff之中,對(duì)數(shù)據(jù)進(jìn)行處理,將數(shù)據(jù)顯示在指定的位置,當(dāng)要關(guān)閉此系統(tǒng)時(shí),選擇退出,此時(shí)若成功關(guān)閉,整個(gè)窗口就會(huì)關(guān)閉。設(shè)計(jì)的軟件界面圖如圖11所示。
在整個(gè)ZigBee系統(tǒng)中建立網(wǎng)絡(luò)、加入網(wǎng)絡(luò)、離開(kāi)網(wǎng)絡(luò)和網(wǎng)絡(luò)地址分配機(jī)制,主要是在網(wǎng)絡(luò)層完成的。網(wǎng)絡(luò)層利用MAC層進(jìn)行信道掃描、連接和斷開(kāi)連接功能,形成了比較完善的網(wǎng)絡(luò)機(jī)制。
只有協(xié)調(diào)器具有建立網(wǎng)絡(luò)的能力。建立一個(gè)網(wǎng)絡(luò),要選擇合適的信道和網(wǎng)絡(luò)ID,并且要設(shè)置網(wǎng)絡(luò)地址。當(dāng)協(xié)調(diào)器負(fù)責(zé)的區(qū)域中有終端節(jié)點(diǎn)加入的時(shí)候,終端節(jié)點(diǎn)會(huì)發(fā)出指令將其作為父節(jié)點(diǎn),與其建立網(wǎng)絡(luò)連接。協(xié)調(diào)器需要允許該終端節(jié)點(diǎn)的加入,為其分配網(wǎng)絡(luò)地址,完成整個(gè)網(wǎng)絡(luò)的搭建。
當(dāng)一個(gè)節(jié)點(diǎn)要加入網(wǎng)絡(luò)時(shí),節(jié)點(diǎn)首先使用信道掃描找出所有可以加入的網(wǎng)絡(luò),然后選擇其中的一個(gè)設(shè)備作為自己的父節(jié)點(diǎn),并調(diào)用MAC層連接過(guò)程建立父子關(guān)系,加入網(wǎng)絡(luò)。父節(jié)點(diǎn)接收到該節(jié)點(diǎn)的連接請(qǐng)求后,如果網(wǎng)絡(luò)可以加入設(shè)備,那么將為這個(gè)節(jié)點(diǎn)分配網(wǎng)絡(luò)地址,并且回復(fù)該節(jié)點(diǎn)的請(qǐng)求,就可以知道自己是否成功加入網(wǎng)絡(luò)中。
在本次設(shè)計(jì)中要達(dá)到的預(yù)期效果有:協(xié)調(diào)器在通電啟動(dòng)之后組網(wǎng)過(guò)程中LED指示燈會(huì)閃爍4次,表示協(xié)調(diào)器正在組網(wǎng),閃爍之后就會(huì)一直亮的狀態(tài)說(shuō)明已經(jīng)組網(wǎng)成功,等待終端節(jié)點(diǎn)的加入;終端節(jié)點(diǎn)通電啟動(dòng)后LED指示燈會(huì)一直閃爍,掃描當(dāng)前環(huán)境中是否有可加入的網(wǎng)絡(luò)。當(dāng)存在網(wǎng)絡(luò)后終端節(jié)點(diǎn)開(kāi)始申請(qǐng)加入網(wǎng)絡(luò),加入成功后LED指示燈會(huì)一直處于點(diǎn)亮的狀態(tài)。
測(cè)試時(shí),把協(xié)調(diào)器和終端各自的程序燒進(jìn)開(kāi)發(fā)板,并且兩個(gè)板子都用電池供電,能達(dá)到預(yù)期的效果,則兩個(gè)節(jié)點(diǎn)之間的網(wǎng)絡(luò)連接已經(jīng)成功。
為測(cè)試溫度監(jiān)測(cè)系統(tǒng)整體效能,搭建了一個(gè)簡(jiǎn)易的ZigBee網(wǎng)絡(luò),主要是一個(gè)協(xié)調(diào)器、一個(gè)終端節(jié)點(diǎn)和一臺(tái)PC機(jī)。
首先把上位機(jī)程序運(yùn)行起來(lái),用USB連接線把協(xié)調(diào)器與PC機(jī)連接起來(lái),選擇串口COM3和115200波特率,確保能進(jìn)行正常的通信。然后給各個(gè)節(jié)點(diǎn)供電,協(xié)調(diào)器節(jié)點(diǎn)建立網(wǎng)絡(luò),發(fā)起網(wǎng)絡(luò)連接;終端節(jié)點(diǎn)自動(dòng)掃描當(dāng)前環(huán)境的網(wǎng)絡(luò)并加入網(wǎng)絡(luò)。各節(jié)點(diǎn)的指示燈均閃爍,表示工作處于正常狀態(tài)。終端節(jié)點(diǎn)采集到溫度數(shù)據(jù)并發(fā)送給協(xié)調(diào)器,協(xié)調(diào)器把接收到的數(shù)據(jù)包做一定的處理,將數(shù)據(jù)上傳到上位機(jī)顯示界面。這時(shí)將判斷當(dāng)前溫度是否處于設(shè)計(jì)的溫度范圍內(nèi),把上限閾值設(shè)為30.0℃,下限閾值設(shè)為20.0℃,測(cè)得的當(dāng)前溫度為28.8℃,如果當(dāng)前溫度是正常的將會(huì)提示溫度正常;把上限閾值設(shè)為25.0℃,下限閾值設(shè)為20.0℃,測(cè)得的當(dāng)前溫度值為30.5℃,很明顯當(dāng)前溫度不在設(shè)定的溫度范圍內(nèi),將會(huì)進(jìn)行溫度預(yù)警,并提示做好調(diào)節(jié)溫度的措施。測(cè)試界面如圖12所示。
本系統(tǒng)設(shè)計(jì)主要利用ZigBee技術(shù),結(jié)合溫度傳感器,組成了一套無(wú)線溫度監(jiān)測(cè)系統(tǒng),通過(guò)對(duì)Z-Stack協(xié)議棧進(jìn)行編程,更好地了解底層的編碼環(huán)境,對(duì)ZigBee技術(shù)的使用更加深入。無(wú)線溫度監(jiān)測(cè)較傳統(tǒng)的溫度監(jiān)測(cè)有了進(jìn)一步的升級(jí),適用的環(huán)境也多種多樣,尤其是在現(xiàn)場(chǎng)環(huán)境比較惡劣、場(chǎng)所比較復(fù)雜或是需要監(jiān)測(cè)多點(diǎn)數(shù)據(jù)的時(shí)候更能發(fā)揮無(wú)線技術(shù)的優(yōu)勢(shì)。但是該系統(tǒng)比較簡(jiǎn)單,針對(duì)此問(wèn)題,需要接下來(lái)更深一步進(jìn)行研究。