沈陽理工大學信息科學與工程學院 魏玉峰
近些年科技發展如此的迅速,以計算機技術為基礎的人工智能領域、大數據領域以及物聯網領域均取得了重大的科技成就。其中物聯網技術是嵌入式技術和互聯網技術的結合,為了實現物與物之間、人與物之間的“通訊”和“控制”,廣泛應用于各種智能控制領域如智能家居、車載智能終端、物流管理以及自動化控制。
物聯網技術主要由以下幾部分組成:
1)具有無線通信功能的終端節點;
2)控制終端的網關設備;
3)服務器平臺。
其中終端節點是以傳感器模塊、無線通信模塊為核心用來檢測或控制外部設備的一個小型嵌入式產品,終端節點在物聯網設計中的作用就如同人體的感知網絡和動作執行器,因此在物聯網設計中終端節點尤為重要。目前無線終端節點網絡設計中以TI公司的Zigbee技術最為成熟。Zigbee技術是2.4GHz符合IEEE802.15.4標準的無線通信技術,TI公司又為Zigbee技術開發了Zstack協議棧以及必要的開發工具。
因此利用Zstack協議棧可以快速高效的開發Zigbee無線通信網絡。
Zigbee節點使用TI公司的CC2530芯片作為核心處理器,選用的理由是:
1)以CC2530為核心的無線通信產品已廣泛應用于各種工業產品中,能保證產品的穩定性;
2)CC2530芯片完美支持Zstack協議棧,便于協議棧的移植和二次開發;
3)CC2530芯片資料文檔較為齊全,可以配合TI公司的專用工具Zigbee Sensor Monitor進行測試。
因此選擇TI公司的Zigbbe節點完成Zstack協議棧的無線網絡終端設計,節點包括溫濕度傳感器節點、可燃氣體濃度檢測節點、繼電器控制節點。
Zigbbe開發中需要用到以下工具:
1)IAR Embedded Workbench,這是一款集成C/C++編譯器、調試器的開發環境,主要用于ARM處理器的軟件開發和程序下載與調試,在本設計中CC2530芯片基于Zstack的程序設計就是在IAR中完成的。
2)串口調試助手,串口調試助手主要用于軟件開發過程中節點數據傳輸是否準確,并且可以通過串口調試助手直接與節點進行通信。
3)Zigbee Sensor Monitor,這是一款TI公司開發的測試軟件用于Zstack組網測試以及數據測試,通過Zigbee Sensor Monitor可以直觀的看到Zigbee網絡中協調器節點、路由節點以及終端節點的組網情況。
以上三款軟件就是Zigbee設計中最基本以及最常用的軟件,使用這三款軟件可以完成Zstack協議棧的無線網絡終端設計。
Z-stack協議棧也是一款小型的操作系統,由TI公司在2007年發布。協議棧內有各個基本函數庫,開發人員可以調用函數庫內的入口函數來實現Zigbee組網、數據傳輸等。通過TI的官方網站可以下載Zstack協議棧的安裝包,點擊安裝即可,安裝完成后在Texas Instruments/Zstack-CC2530/Project/zstack/Samples目錄下找到官方例程使用IAR打開。

圖1 Zstack工程目錄
上圖是Zstack工程目錄,由上至下各個文件依次是:1)APP層,應用層目錄;2)HAL層,硬件目錄層;3)MAC層;4)MT層,監控測試層;5)NWK層,網絡層目錄;6)OSAL層,操作系統層;7)Profile層,應用工作層;8)Seurity層,安全層;9)Tools層,工程配置;10)ZDO層,Zigbee設備對象層;11)Zmac層,參數配置信息和回調處理函數;12)ZMain層,Zstack的主函數入口。
以上是Zstack協議棧的工程目錄,通過了解可以知道以下兩點:
第一Zstack的入口函數在ZMain目錄下,找到其中的ZMain.c文件,在ZMain.c文件中找到int main(void)函數,這是協議棧的主函數,也就是工程的啟動函數。Zmain.c函數實現了以下功能,初始化系統的時鐘、檢測芯片電壓、初始化堆棧、初始化硬件模塊、初始化存儲器、初始化操作系統以及啟動操作系統。Zmain.c最后調用了osal_start_system()函數,這個函數本質上是一個死循環,在循環體內通過輪詢的方式依次判斷是否有事件發生,如果發生則進入事件處理函數中。事件的定義函數在const pTaskEventHandlerFn taskArr[]結構體內。

圖2 事件定義結構體
結構體內依據事件的優先級依次處理mac層、nwk層、hal層、MT層、APSF層、ZDApp層和SampleApp層的任務,因此用戶自定義任務是優先級最低的任務。Zstack通過定義任務標識符taskID來區分各個任務,taskID和tasksArr[]的對應關系如下1表所示:

表1 taskID和任務事件對應關系
因此只要taskID=6,那么系統就會運行用戶自定義程序。
溫濕度傳感器使用DHT11,其與CC2530模塊采用單總線通信模式,CC2530的GPIO連接DHT11的DATA口,通過模擬DHT11的時序即可得到40bit的數據,其數據格式為:8bit濕度整數數據+8bit濕度小數數據+8bit溫度整數數據+8bit溫度小數數據+8bit校驗和。
首先編寫DHT11傳感器的驅動程序:

圖3 DHT11初始化及驅動流程圖
依據驅動流程圖以及DHT11數據手冊中的時序編寫CC2530與DHT11的通信程序,在IAR軟件中編寫具體程序代碼,點擊Project->Rebuild All在底部窗口中可看到程序的部分編譯過程和編譯結果,在修改及完善項目工程后通過IAR軟件的Projece->Download and Debug將編譯后的.hex文件燒錄進CC2530節點板并通過串口觀察實驗結果。
柳江塑造了柳州的風景名勝,也因其對柳州城區呈現的“水抱城流”之景,江水的流淌沖擊,使得城區形成一個壺形的半島而有了“壺城”的別稱。又因其城區山清水秀,景色別致而有了“世界第一天然盆景”的美譽。

圖4 溫濕度節點獨立測試結果
在編譯并測試完成DHT11的驅動程序后,將程序移植至Zstack協議棧的APP文件中,接口函數定義在SApp用戶任務里。這樣就可以通過Zstack的輪詢方式實現節點的溫濕度檢測功能。最后配置節點的完整參數例如節點的類型:協調器節點、路由節點、終端節點,網絡拓撲結構:樹形網、星形網、網狀網,并將程序編譯燒錄進節點板。
可燃氣體傳感器選用MQ-2模塊,傳感器的工作原理是MQ-2的電導率與空氣中煙霧濃度成正比例關系,也就是當空氣中濃度增大時,MQ-2模塊輸出的電阻就越低,具體電阻與濃度的對應關系查閱模塊技術文檔可知。
CC2530芯片內部有12位AD轉換器,因此僅需利用基準電壓和分壓電阻即可通過AD轉換器計算出MQ-2模塊的電阻,也就能得到當前空氣中可燃氣體的濃度系數。
設計可燃氣體節點同樣采用循序漸進的處理方式,首先編寫節點的獨立測試程序,測試通過完成后基于Z-stack協議棧編寫最終使用程序,程序的設計過程與思路和溫濕度節點相同,此處不再贅述。
可控繼電器選用5V直流繼電器,節點共裝有兩個繼電器,繼電器程序設計過程如下:
1)實現CC2530控制繼電器按一定頻率自動開合;
2)通過串口與CC2530通信實現繼電器的可控開關;
繼電器為開關控制元件,在繼電器的線圈端加載5V直流電壓即可控制幾點閉合,閉合時繼電器的公共端與常開點連通,繼電器是一款小電流控制大電流的元件,用于多種工業控制場合。
繼電器程序設計過程中移植了前節點的工程,包括節點串口通信以及Z-stack下節點的組網和數據處理。
1)實現CC2530控制繼電器按一定頻率自動開合;
2)通過串口與CC2530通信實現繼電器的可控開關;
3)繼電器節點與協調器通過組網實現繼電器的狀態查詢以及開關控制。
繼電器為開關控制元件,在繼電器的線圈端加載5V直流電壓即可控制幾點閉合,閉合時繼電器的公共端與常開點連通,繼電器是一款小電流控制大電流的元件,用于多種工業控制場合。
繼電器程序設計過程中移植了前節點的工程,包括節點串口通信、點對點通信以及Z-stack下節點的組網和數據處理。

圖5 繼電器測試結果
圖5 是組網后通過串口連接協調器,并最終查詢及控制繼電器的狀態,通過串口輸入0表示關閉繼電器,輸入1表示打開繼電器,輸入2可查詢當前繼電器的開關狀態。
至此基于Zstack協議棧的無線網絡終端設計已經完成,其中包含溫濕度節點、可燃氣體檢測節點、繼電器控制節點。
本設計是基于TI公司CC2530無線通信芯片設計的Zigbee無線終端,移植了TI公司的Zstack協議棧,組建樹形網并將節點數據信息通過串口輸送至電腦,實現了通過串口可測可控各個節點的功能,首先本設計基于嵌入式發展的趨勢以及物聯網技術中的感知網絡,編寫了三組不同功能的節點程序,并成功實現相應的功能,本設計只是簡單的完成了Zstack協議棧的無線網絡終端設計,其可提升和擴展的空間也十分的廣闊。