Digi的ZigBee模塊簡稱S2,根據芯片版本的不同歷史上分別有S2,S2B,S2C等,每次硬件平台升級,都會引入一個新的尾綴字母。歷史版本中S2和S2B已經停產並被S2C替代。當前S2C是主流平台,根據產品路線圖的規划,后續會升級到S2D。除了硬件平台上的區別,XBee還有固件上的區別,每隔一段時間,Digi會推出某一系列XBee模塊的新的固件,這些新的固件或是增加一些功能,或是解決一些微小的bug,但總的來說,不同固件版本在API層面是相互兼容的,除非軟件上用到一些和版本號有關的AT參數或指令,新版模塊一般都可以直接替換舊有的模塊,而無需在軟件層面做出修改。因此不論哪個硬件版本或是固件版本,ZigBee模塊都是向下兼容的,在ZigBee協議的支持上是一致的。
XBee S2C系列無線模塊是支持標准ZigBee PRO 2007協議的無線模塊。普通型和增強型均有郵票孔表貼型和雙列直插兩種封裝。同樣有各種天線接口的種類繁多的型號。建議用戶選擇外置天線的型號。這里只列出最常用的型號:
類型 | 型號 |
---|---|
XBee ZigBee Mesh網絡開發套件 | XKB2-Z7T-WZM |
XBee ZigBee 雙列直插普通型(RPSMA天線接口) | XB24CZ7SIT-004 |
XBee ZigBee 雙列直插普通型(鞭狀天線) | XB24CZ7WIT-004 |
XBee PRO ZigBee 貼片式普通型(u.FL天線接口) | XB24CZ7UIS-004 |
XBee PRO ZigBee 雙列直插增強型(RPSMA天線接口) | XBP24CZ7SIT-004 |
XBee PRO ZigBee 貼片式增強型(PCB天線) | XBP24CZ7PIS-004 |
XBee PRO ZigBee 貼片式增強型(u.FL天線接口) | XBP24CZ7UIS-004 |
XBee 模塊的使用方法
XBee模塊通過一個UART串行接口與外部MCU進行交互,單片機或ARM等主控器件,只要邏輯電平不高於XBee模塊的定義,通常都可以直接連接XBee的UART進行通信,而無需額外的上拉或下拉電阻。外部主控芯片同XBee的連接最簡單的情況僅需接收和發送兩根線(DIN,DOUT)即可通信,對於大數據量的傳輸,根據不同場景您有可能還需要加上流控引腳,此外XBee還有些輔助引腳可針對不同應用場景加以應用,簡化開發或方便調試。比如入網信號,引腳休眠,配置按鈕,IO引腳等,可根據需要決定是否使用。
ZigBee網絡基礎
ZigBee是由來自全球三百多家知名企業會員民的ZigBee聯盟在基於IEEE802.15.4之上定義的一個開放式全球網絡協議標准,它在802.15.4的基礎上定義了一套網絡層協議來實現自組網功能。
ZigBee協議棧由PHY,MAC,網絡層和應用支持子層(APS))組成,ZigBee設備對象(ZDO)作為應用程序框架或者說一個特殊的APS子層是每個ZigBee設備都必須擁有的功能。ZigBee協議定義了三種不同的設備節點類型:協調器,路由器,終端節點。
-
協調器
在ZigBee網絡中,協調器負責選定一個信道和PAN ID來創建一個網絡。它能允許路由器和終端節點加入網絡,可作為路由轉發數據,可以為休眠子節點緩存數據,但它不可以休眠。
-
路由器
路由器需先加入協調器的網絡才能發送,接收或轉發數據,加入網絡后它能允許路由器或其它節點加入網絡,轉發數據,可以為休眠子節點緩存數據,同樣地,它也不可以休眠。
-
終端節點
節點設備必須加入ZigBee網絡才能發送或接收數據,它不能允許其它設備加入網絡,總是通過它的父節點發送或接收數據,不能作為路由轉發數據。它可以進入低功耗的休眠模式。
Digi的ZigBee模塊簡單地說,是內置ZigBee協議棧,帶有ZDO功能,支持通過串口簡單配置來實現使用ZigBee網絡進行通信,它能實現ZigBee的全部功能,但用戶又不需要深入了解ZigBee協議本身。使用Digi的ZigBee模塊能和其它符合標准ZigBee協議的第三方設備進行通信。
XBee S2C組網和通信測試
透傳模式通信
您需要有Digi的XBee ZigBee mesh網絡開發套件來進行組網和通信操作。開發套件中帶有三個不同的模塊和底板,天線和USB線纜,方便您使用電腦進行測試。在進行下一步操作之前,您需要裝備好至少兩個模塊和對應的開發底板。
首先,確保您的電腦上已經安裝好Digi的開發工具XCTU。將兩個Digi的XBee ZigBee模塊通過開發底板和電腦連接起來,打開XCTU,用左上角的查找模塊按鈕來查詢連接到電腦上的模塊,並把它添加到XCTU左側的無線模塊列表中。在XCTU軟件中,默認是位於配置窗口中,點擊左邊模塊,便會讀取模塊相關的參數,在配置窗口中展現出來。
首次使用,建議用右側上方的“Default”按鈕加載模塊的默認參數,並按“Write”寫入模塊,使模塊恢復出廠的配置,確保不會因為之前使用時的不恰當參數影響通信效果。寫入默認值后,再按“Read”按鈕重新加載一下參數到XCTU右側的參數欄上。點擊左側另一個模塊,用同樣的方式恢復一下模塊的出廠設置。
在配置模式下,如果僅對某個參數進行讀取和寫入,可以使用對應參數右方的刷新和寫入按鈕。
兩個ZigBee模塊要相互通信,必須在同一個網絡中,所以我們需要將一個模塊配置成協調器,另一個模塊配置成路由器並加入到協調器的網絡中。以下兩個模塊簡稱A和B。 A模塊:CE=1 配置為協調器,DL=FFFF B模塊:不改任何參數 將A模塊的CE改為1,就把模塊配置成協調器了,這時模塊會生成一個網絡號為ID指定值的ZigBee網絡,默認ID=0,因此協調器會生成一個隨機64bit的網絡號的ZigBee網絡。如果刷新模塊參數,會發現OP和CH有一個值了,這里OP是指當前的網絡號,CH是指當前的信道號。DH和DL組成模塊的目標地址,我們把DL改為FFFF,是因為默認DH和DL都為0,這樣指代協調器本身,改成FFFF則是廣播地址。
B模塊是默認的路由器的出廠配置,ID=0表示可以加入任意網絡。如果周邊沒有其它ZigBee網絡,B模塊又是首次使用,那么它肯定會在10秒內加入A模塊的網絡,可以讀取一下B模塊的OP和CH,觀察它是否和A模塊相同,以此來判斷是否在同一個網絡中。默認地B模塊的DH和DL都是0,表示目標地址是協調器。入網后,模塊的入網指示燈會均勻地閃爍,這樣我們已經配置好兩個對發的模塊了。
這時我們可以點擊右上角的圖標切換到終端窗口,來觀察串口數據透傳的效果。終端窗口實際上是個帶有ASCII和16進制顯示終端的串口調試工具,有個串口打開/關閉按鈕,以及一個視圖分離按鈕,方便查看兩個模塊各自的收發數據。
分別選中模塊,並在終端模式中打開串口,將其中一個模塊的串口終端視圖分離,我們在任意一個終端中輸入數據,另一個模塊的張端就能收到相同的數據。如下圖所示:
在透傳模式下,數據送入A模塊的串行UART接口,就會被發到目標地址指定的B模塊上,從B模塊的串行UART中輸出,所以稱之為透傳。平時模塊處於空閑或傳輸數據的狀態,當我們需要更改模塊參數時,就可以通過向串口發指定時序的特定字符串來進入命令模式,以便更改模塊配置。默認地,在空閑期間連續輸入三個“+”號可進入命令模式,這時可以通過向串口發AT命令來實現特定功能。比如,我們之前設置協調器的目標地址為0xFFFF,這樣網絡內所有的模塊者能收到該數據並轉發,如果我們只需向特定的模塊發送數據,就不應該用廣播模式,而需要把目標地址設置為特定的模塊的MAC地址,下面AT命令演示了讀取B模塊的自身地址並將它設置為A模塊的目標地址的過程。
在B模塊上,用“+++“進入命令模式,發ATSH,ATSL分別讀出模塊64位MAC地址的高位和低位。切換到A模塊的終端窗口中,用ATDH和ATDL把剛才獲取得的參數設置目標地址,並用ATWR寫入flash,這樣斷電重啟后配置不會被清空。注意,默認地在命令模式中如果10秒內無任何輸入,就會退出命令模式,回到透傳模式的空閑狀態。所以AT命令中的字符請連續輸入不要間停超過10秒。否則您需要重新用”+++“進入命令模式。
靜靜等待約10秒鍾后模塊退出命令模式(也可以發ATCN命令直接退出命令模式),這時在終端窗口中輸入數據,另一個模塊的終端也能收到數據,只不過,此時作為協調器的A模塊不再是廣播模式,而是只定向往B模塊發數據了。
通過AT命令可以設置很多參數,比如NI是設置模塊的ASCII名稱,NR是退網命令,ID是指定網絡名稱,還可以通過AT命令讀取或設置模塊的IO口狀態等。請查閱XCTU或產口手冊獲取更多信息。下面我們將把A模塊的網絡ID更改,讓B模塊重新加入,以下是完整操作過程的相關AT命令。 A模塊:讀一下CE,以確定是要操作的協調器A模塊;讀一下當前ID值;寫入新的網絡ID;配置寫入flash;稍等片刻后查詢當前工作的網絡ID.
B模塊:讀一下CE,確定是路由器;讀一下當前網絡ID;讀一下當前信道;發退網命令,離開之前加過的網絡;稍等片刻查詢新加入的網絡ID;查詢當前信道。
由於透傳模式下,需要通過特定字符組合和時序進入命令模式,在一些需要頻繁使用AT命令的場景下就顯得很不方便,因此Digi的模塊除了支持透傳模式外,還可以通過API模式更靈活地使用模塊。
API模式通信
API模式,是指外部MCU通過向XBee模塊的UART發送指定格式的命令幀,來實現發送數據或執行AT命令等功能。API模式下,XBee模塊能夠實現比透傳模式更多的功能,包括:
-
無需配置DHDL,直接向網絡內任意模塊進行通信
DH,DL是透傳模式下才會用到的參數,在API模式下,命令幀中帶有目標地址字段和數據字段
-
隨時進行發送本地和遠程AT命令,而無需切換模式
API模式下,通過命令幀的識別碼來區別是數據發送請求,還是本地AT命令或遠程AT命令,無需進行模式切換。
-
發送狀態可通過反饋包判斷,接收到的數據可識別來源
可以通過開啟反饋包,判斷每個數據包發送成功與否,接收到的數據可以通過數據幀中的源地址判斷是從哪個模塊發過來的。
-
可以進行ZDO和ZigBee協議的通信
API模式下的明確尋址數據發送命令幀中,可以使用ZigBee協議的Profile,Cluster,Endpoint字段來實現ZigBee協議的通信。 並且固件中自帶有ZDO協議棧處理ZCL請求和響應。
-
更多功能,請閱讀產品手冊
XBee模塊可以通過ATAP命令來設置模塊的工作模式,AP=0時是透傳模式,AP=1是API模式。 在XCTU上方的工具菜單或工具按鈕中,可以找到API組幀和解析工具。在API模式的模塊終端窗口中,也會有發送幀的生成向導和接收幀的解析窗口。 下面是用API幀生成工具生成的一個發送數據幀例子:
ZigBee網絡內的無線模塊,可以全部配置成透傳模式或API模式,也可以部分配置成API模式,它們之前可以相互通信,下面將演練一下API模式的模塊A和透傳模式的模塊B進行相互通信實驗。
A模塊:在配置窗口中,直接設置CE=1, AP=1,並按一下配置窗口上方“Read”按鈕刷新一下模塊信息,我們會發現API模式下左側列表協調器圖標會多出一個紅色”C”字。切換到終端模式,我們會發現API的終端模式和透傳模式不太一樣,它是以API幀為主的信息框和工具框,如下圖所示:
這里,我們利用新增命令幀向導添加一個准備用來發送“test”字符的命令幀,注意目標地址字段要用B模塊的Mac地址,如下圖所示:
根據向導提示,按“OK”和“Add Frame”按鈕,把生成的幀添加到發送列表當中。
B模塊:保持透傳模式不變,確保DH和DL為默認值0,並且是加入A模塊的網絡。
同樣地,將B模塊的終端視圖分離出主窗口,以便觀察它們的相互通信。 當在A模塊中選中剛才生成的發送“test”字符的命令幀,按下發送按鈕時,B模塊的窗口中就收到了“test”字符。如下圖所示:
我們還可以看到,默認地,API帶有反饋包,在發送端可以看到發送成功與否的結果。
我們在B模塊的終端打一個字符“a”,同樣地,A模塊就收到帶有這個字符的API接收幀,我們可以通過A模塊的幀信息詳情的下拉滑塊查看幀的詳細說明。
更多的API命令幀說明,請參考產品手冊或Digi XBee API進階應用指南。
關於XBee API模式幀生成工具代碼或者說是API驅動庫,請參考XBee API驅動