2011年8月3日 星期三

Arduino and XBee Series 2

Arduino XBee shield 可以讓 Arduino 板子透過 Zigbee 進行無線通訊,這篇將簡單介紹 XBee Series 2 的設定與使用方法。你需要兩片 Arduino,兩片 XBee Shield,兩個 XBee Series 2 modules,以及 XBee 的設定軟體 X-CTU

image

設定 XBee modules

1) 首先取下 Arduino 板子上的 ATmega 晶片

image

2) 把 XBee shield 上的 jumpers 切到 USB:

image

3) 把 XBee shield 連接到 Arduino,然後透過 USB 把 Arduino 接到電腦,執行 X-CTU 並讀出 XBee module 的 configuration。

4) 選擇 coordinator 的 function set,然後寫到 XBee module:

image

5) 接著換上另一片 XBee module,然後選擇 End Device 的 function set 並寫到 XBee module:

image

這樣便完成了兩片 XBee module 的設定,接著還原硬體設定: 把 jumpers 切回 XBee,然後把 ATmega 晶片插回 Arduino 到板子上。接下來,當兩張 XBee modules 上電時,你會看到 XBee Shields 上的 ASSOCIATE 燈號開始閃爍,這代表它們已經形成一個 WPAN 網路。

接著來跑個簡單的程式來測試:

簡單的例子

1) 上傳  Communication | Physical Pixel 範例到 coordinator 的 Arduino 板子上。這支程式會在 serial port 收到一個 'H' 時打開 pin 13 上的 LED,而在收到 'L' 時關掉 LED。你可以利用 serial monitor 來測試看看,記得要用 9600 的 baud rate。

2) 把底下這支程式上傳到 End Device 的 Arduino 板子上:

完成上傳後,你可以利用 serial monitor 確認程式動作是否正確,你應該會看到 H 和 L 每秒鐘會出現一個。

接著把 XBee shields 接到 Arduino 板子上,並接上電源,過幾秒鐘,應該就會看到 coordinator 的 LED 一直在開和關,每秒變化一次。(這個是 Arduino 板子上的 LED,不是 XBee shield 上的 LED)。如果是的話,恭禧你,你的 Arduino 板子已經成功透過 Zigbee 在進行無線通訊了。

延伸閱讀

13 意見:

Unknown 提到...

您好
文中有提到需要取下ATmega晶片,想請教為什麼需要這樣做以及會有什麼問題或缺點嗎??

coopermaa 提到...

因為 ATMega 的 TX/RX 腳位跟 XBee 都接到 USB-Serial 晶片的 TX/RX ,取下 ATmega 晶片是為了避免 ATmega 干擾 XBee 的燒錄

理論上來說,其實不拿下 ATmega 晶片應該也是可以的,訣竅是讓 ATMega 晶片不要影響通訊,在每次燒錄 XBee 晶片韌體時,必須先燒個不做通訊的程式 (如 BareMinimum) 到 Arduino 上,然後再燒錄 XBee 晶片

dg101 提到...

請問假如我有Xbee1跟Xbee2兩塊,都是Series 2,我把Xbee1跟Arduino接一起,Xbee2經由轉接版USB跟電腦接一起,我的Arduino上面接有sensor,我想把sensor讀到的資料讓Arduino透過Xbee1傳到Xbee2然後在電腦上顯示sensor的值,請問設定跟文中的依樣嗎?

coopermaa 提到...

可以的。

我有寫一篇 "XBee Light Sensor",介紹如何用把光敏電阻 sensor 的資料透過 XBee 送到電腦上,你可以參考看看:

http://coopermaa2nd.blogspot.tw/2011/08/xbee-light-sensor.html

dg101 提到...
作者已經移除這則留言。
dg101 提到...
作者已經移除這則留言。
dg101 提到...

我照文中的第4項設定完後,在Write過程中,會跑出這個,之後就連不上Xbee了,請問是什麼原因,Xbee是否壞掉了?
http://dei101l.blogspot.com/2012/10/blog-post.html

coopermaa 提到...

你用的是 COM3?

這個視窗的確有時候會跑出來
試著按一下 XBee 上面的 Reset 鍵,我記得這個視窗就會關閉掉,然後開始 write

dg101 提到...

我的是COM7,我用的是sparkfun的轉接版,圖片是我擷取別的,但視窗是跑出一樣的

但我想問我這現象是正常的嗎?就是剛拿到Xbee的時候,讀取是很順的,不會跑出那個視窗,但write文中的function set之後,我之後重新開啟X-cTU去讀取Xbee,變得有時讀的到有時讀不到,不是很順利讀取,要重複幾次才可以

coopermaa 提到...

我之前不是用轉接板,沒有遇過這個狀況

Ardupilot-mega 有整理操作步驟,在這個頁面的 "Unbricking an XBee" 這段,也許你可以參考它的方法試試:

http://code.google.com/p/ardupilot-mega/wiki/Wireless

Using the USB adapter board:

1. Take the module out of the interface board.
2. Connect the interface board to the computer.
3. Open X-CTU make sure Baud Rate is set to 9600
4. Go to "Modem Configuration"
5. Put a check in the "Always update firmware" box
6. Select proper modem from drop down menu (for the 900Mhz ones recommended above select "XBP09-DP"; for 2.4GHZ Xeebee Pro 2 select "XBP24-B")
7. Click on the "Write" button. After a few seconds of trying to read the modem, you will get an Info box that says Action Needed. At this point, CAREFULLY insert the module into the interface board. After a few seconds, this should trigger a reloading of the firmware.
8. You may get the info box again a short while after; if so just repeat the previous step a few times and it should work.
9. This will put the module back to 9600 baud. Set your X-CTU PC settings to that and test it. It should report back that it's recognized.
10. Once you've confirmed that it's working again, make you sure you reset its baud rate (typically 57k for APM) and VID number to match your other module.





dg101 提到...

是不是function set不能亂設定跟改參數,會導致XBee掛點?

coopermaa 提到...

應該不致於掛點,我記得 X-CTU 會辦別 XBee 適合哪些 function set,所以不可能寫錯

那現在可以用 X-CTU 讀出 firmware 資訊嗎?

dg101 提到...

OK,謝謝你