2012-02-13

Arduino與Mindstorms NXT之間的XBee無線通訊(802.15.4)

對於ArduinoMindstorms NXT之間的有線通訊,之前共測試了RS485(連接NXTArduinoRS485通訊)以及I2C(Mindstorms NXTArduino之間的I2C通訊)兩種方式,接下來的則是要建構兩者之間的無線通訊。
NXT目前可以選擇的無線應用,除了內建的藍芽功能之外,透過周邊廠商所提供的裝置,也可以使用IRWi-FiXBee等。
其中XBee具有操作簡單、低耗電的優點,實務上也常被應用在無線感應器方面。
所以在本次測試中將會用來建立與Arduino之間的無線通訊,使用的模組是通稱為Series 1XBee 802.15.4,只需透過簡單的設定,雙方就可以進行非同步序列通訊。
(
Arduino wirelessComm with NXT-01)

硬體配備
NXT 端:
DexterNXTBee是作為NXT使用RS485通訊的無線傳輸配接器,之前曾用來測試過兩部NXT之間的無線通訊 (NXT High speed communication over XBEE),而同樣也可以運用在對於與Arduino之間的無線傳輸。
Arduino端:
Arduino UNO
可用於配接XBee Shield有:DFRobotIO EXPANSION SHIELD FOR ARDUINOArduino官版的Arduino wireless shield,兩者功能相同,而在這次測試中所使用的為後者,它多了切換成為USB-To-Serial模式的開關,搭配Arduino主板可以取代XBee USB-To-Serial converter連接PC使用。
(
Arduino wirelessComm with NXT-02)

上圖中在板子的右上角有一個switch,當正常與Arduino工作時須在MICRO位置,但若要由PC連接使用或進行XBee設定時,則須移至USB位置,並先上載一個不執行任何工作的sketch
void setup () { }
void loop () { }
詳細可以參考Arduino官網對於Switch Settings的說明
NXTArduinoXBee通訊設定
XBee是建立連接裝置之間的無線序列通訊,功能就如同Modem
NXT
的非同步序列通訊為使用第四個Sensor portRS485功能,而Arduino則為Serial communication,兩者不同的通訊方式對於XBee設定有些許差異,但基本的網路設定規則是一致,以下將作說明:
軟體 設定及 連接介面:
(1)
設定軟體下載:設定XBee或更新XBee Firmware,最簡便的方式是下載DiGi原廠網站的X-CTU軟體,以GUI介面進行設定,以下會簡單介紹設定的程序。
(2) 連接XBeePC:在啟動X-CTU前,需先以XBee USB-To-Serial Converter配接器連接XBee模組至PC,或若使用Arduino wireless shield,則如前面所說明須切換至USB Mode
(3)
連線測試:當連接XBeePC並完成驅動程式安裝之後,會於PC產生所對應的COM Port。接著啟動X-CTU,選擇此COM Port並設定通訊協定,而在此時,可點選Test/Query按鈕,測試是否可正常連接XBee模組。


(4) XBee Firmware
更新下載:在以X-CTU設定XBee前,建議先下載更新XBee Firmware至最新版本,避免可能有些功能無法設定使用。
更新方式:切換至Modem Configuration”頁籤,點選Download new versions...”按鈕,出現對話框之後,點選Web按鈕。
(
X-CTU_ModemConfig_DownloadNewVersions)

XBee網路設定
要讓XBee能夠相互通訊的網路設定基本規則為:(1)頻道須相同(2)網路ID須相同以及(3)接收端的位址須正確。而在X-CTU所提供的預設Profile幾乎可以完全符合這些要求,只需對(3)接收端位址的設定,依需求做調整。
同時,NXTArduino所選擇的Profile也不一樣,這是因應NXT RS485的通訊需求。
以下為對於連接ArduinoNXT的設定方式,分別說明:
連接於Arduino端的XBee設定:
(A)
Modem Configuration頁籤,點選Read按鈕,會讀出並顯示XBee目前Firmware的設定值。
(B)
Modem: XBEE欄選擇XB24,於Function Set欄選擇XBEE 802.15.4
(C)
檢視下圖紅色框內的5個設定值,第12個值分別為頻道(”CH”)與網路ID(”ID”)
5MY表示本身16 bits的位址值,預設值為0,建議應將每一個XBee設成唯一值,有利於網路管理。
4DL表示所要傳送對象的MY位址值,當接收端的MY等於傳送端的DL時才能接收信號,而若DL設定為FFFF時,表示為廣播信號,任何相同頻道(”CH”)與網路ID(”ID”)的接收端,都能夠收取信號。
(D)
設定完成之後,須點選Write按鈕,將設定值存入XBee中。
(
X-CTU_ModemConfig_Broadcasting.jpg)
連接於NXT端的XBee設定:
相較於設定Arduino(A) - (D) 的四項步驟,連接於NXT端的設定方式只有在(B)項不一樣,差異在於對RS485通訊的支援:
(B)
Modem: XBEE欄同樣選擇XB24,於Function Set欄則須選擇XBEE 802.15.4 RS485 ADAPTER
(
X-CTU_ModemConfig_Networking)

接著,下拉至I/O Settings參數設定處,修改D7-DIO7 Configuration設定值為7-RS485 TX ENABLE HI
(
X-CTU_ModemConfig_IO Settings)

而事實上,對於NXTXBee的設定方式,主要是參考Dexter這一篇的NXTBee產品說明文件,內容資料相當的清楚與完整。
測試案例
測試過程,使用NXT連接NXTBee作為接收來自Arduino UNO + Arduino Wireless Shield + XBee module所傳送的字串訊息,並顯示在NXT螢幕上。
兩邊所使用的程式與在連接NXTRS485通訊一樣,只有拿掉ArduinoSketch中對MAX 485 CPA晶片DE(Output enable)腳位的設定,而將有線傳輸轉換成無線通訊。

沒有留言:

張貼留言