Zigbee是IEEE 802.15.4協議的代名詞。根據這個協議規定的技術是一種短距離、低功耗的無線通信技術。這一名稱來源于蜜蜂的八字舞,由于蜜蜂(bee)是靠飛翔和“嗡嗡”(zig)地抖動翅膀的“舞蹈”來與同伴傳遞花粉所在方位信息,也就是說蜜蜂依靠這樣的方式構成了群體中的通信網絡。其特點是近距離、低復雜度、自組織、低功耗、低數據速率、低成本。主要適合用于自動控制和遠程控制領域,可以嵌入各種設備。簡而言之,ZigBee就是一種便宜的,低功耗的近距離無線組網通訊技術。詳情請參見百度百科《Zigbee》。
而.NET Micro Framework對存儲器和處理器的要求很低,開發人員可以在低功耗、低成本的ARM7、ARM9、Blackfin和Cortex-M3處理器上使用該框架(不需要MMU支持),所開發出來的軟件僅需要幾百Kbytes的RAM或Flash/ROM存儲空間。而Windows Embedded CE的托管代碼環境需要約10~12Mbytes的存儲空間,基于.NET的應用編程設備只需要較少的存儲空間,降低了產品成本。詳情請參見《.Net Micro Framework 快速入門》。
兩者都是低復雜度,低功耗,低成本(.Net MF開源且免費)的解決方案,二者結合對構建物聯網無線方案來說,真是珠聯璧合。
目前Zigbee有如下兩種方案供最終用戶使用,一是Zigbee芯片(擴展閱讀《Zigbee芯片廠家對比》),如Ti提供的芯片CC2420、CC2430及CC2530,其中CC2430和CC2530片上集成了C8051內核,并提供了Zigbee協議棧,通過SPI、I2C或串口和CPU通信;二是Zigbee模塊,如周立功公司的ZICM2410模塊(美國CEL公司的MeshConnectTM模塊,集成語音編碼解碼器)和赫立訊公司的IP-Link1223模塊,模塊集成C8051內核,支持多路GPIO/AD,通過串口或SPI和外圍設備通信,使用雖然簡單,但價格較高,大概是前者的3~5倍。
目前.Net Micro Framework V4.0的源碼中已經提供了CC2420的驅動程序(源碼在\framework\core\drivers\802_15_4\stack\physical\cc2420),硬件通過SPI方式訪問CC2420芯片,在酒窖存儲監控中已有相關應用,有興趣的朋友可以參考一下。
芯片級方案由于沒有合適的開發板,所以暫且不作介紹,我今天僅介紹模塊級解決方案,其平臺是赫立訊公司的IP-Link1223模塊。
IP-Link1223模塊提供三種組網模式:線性網絡、全Mesh網絡、星型拓撲,其中全Mesh網絡最為常用。三種指令模式:AT指令模式、透傳模式、二進制模式,AT指令模式只能本地配置;透傳模式雖然好用,但是多點通信時并不靈活;二進制模式不僅本地可以配置,也可以透過網絡遠程配置,并且可以獲取路由表及相關鏈路通信質量。
軟件配置界面:
目前已經編寫出支持全部的二進制模式指令Helicomm_IPLink1223類,相關指令如下,詳細通信協議請參見赫立訊公司相關的說明文檔。
private static byte CMD_ReadADC = 0x81;????????????? //讀模擬通道值
??? private static byte CMD_ReadADC = 0x81;????????????? //讀模擬通道值
??? private static byte CMD_ReadRSSI = 0x82;???????????? //讀發射頻率
??? private static byte CMD_ReadTemperature = 0x83;????? //讀溫度
??? private static byte CMD_ReadSRegister = 0x86;??????? //讀S寄存器值
?? ?private static byte CMD_WriteSRegister = 0x87;?????? //寫S寄存器值
??? private static byte CMD_ReadMAC = 0x8B;????????????? //讀MAC地址
??? private static byte CMD_ReadVer = 0x8C;????????????? //讀內核版本
??? private static byte CMD_BatterySavingMode = 0x8D;??? //節電(停機)
??? private static byte CMD_Hibernation = 0x8E;????????? //休眠
??? private static byte CMD_SoftReboot = 0x8F;?????????? //軟重啟
??? private static byte CMD_HardwareReboot = 0xC0;?????? //硬重啟
??? private static byte CMD_Reset = 0x90;??????????????? //恢復出廠設置
??? private static byte CMD_ReadRoute = 0x95;??????????? //讀取路由表
??? private static byte CMD_ReadBlacklist = 0x9C;??????? //讀取黑名單???
??? private static byte CMD_WriteBlacklist = 0x9D;?????? //寫黑名單??
??? private static byte CMD_TrackerRoute = 0xAA;???? ????//跟蹤路由??
??? private static byte CMD_TrackerLQIRoute = 0xBB;????? //帶信號強度的跟蹤路由
??? private static byte CMD_ReadIO = 0xAC;?????????????? //讀IO狀態
??? private static byte CMD_WriteIO = 0xAD;????????????? //寫IO狀態
??? private static byte CMD_ScanNeighbour = 0xBC;??????? //掃描鄰居列表
??? private static byte CMD_ReadDeviceType = 0xC3;?????? //獲得設備類型????
private static byte CMD_LocalHibernation = 0xB1;???? //本地休眠
??? private static byte CMD_LocalAwaikening = 0xB2;????? //本地喚醒
???
???