2011年8月27日 星期六

EasyTransfer over XBee Wireles Communication

簡介

EasyTransfer Library 也可以用在 XBee 無線通訊上,這篇將說明如何辦到。你需要兩組 Arduino + XBee 設備,以及 XBee 的設定軟體 X-CTU

image
▲ Arduino, XBee Shield 與 XBee module 的合體,你需要兩組這樣的設備

設定 XBee modules

參考「Arduino and XBee Series 2」這篇,把 function set 為 "ZIGBEE COORDINATOR AT" 的韌體寫入到要當 coordinator 的 XBee module,把 function set 為 "ZIGBEE END DEVICE AT" 的韌體寫入到要當 End device 的 XBee module。參數全部使用預設值即可,不用修改。

image
▲ Coordinator 使用 "ZIGBEE COODIRNATOR AT" function set

image
▲ End device 使用 "ZIGBEE END DEVICE AT" function set

範例程式

首先,將底下的程式上傳到 End Device 的 Arduino 板子上 :

接著將底下的程式上到到 Coordinator 的 Arduino 板子上:

上傳完畢後,拿兩條單心線把兩塊 Arduino 板子連接起來,TX 接 RX,RX 接 TX,先做個簡單的測試,看看通訊是否正常,如果一切順利,Coordinator 的 Arduino 板子上的 LED 應該會每隔 3 秒鐘閃爍 5  次。

接著取下單心線,把 XBee shields 接到 Arduino 板子上,並接上電源,過幾秒鐘後,當 End device 連上 Coordinator,XBee Shields 上的 ASSOCIATE 燈號就會開始閃爍,這代表它們已經形成一個 WPAN 網路。然後如果你有看到 Coordinator 的 Arduino 板子上的 LED 會每隔 3 秒鐘閃爍 5 次,那麼就代表你已經成功透過 XBee 無線通訊使用 EasyTransfer 傳遞訊息了。

後記

在做這個實驗的時候,我發現一個奇怪的問題,如果傳送端也就是 End Device 所用的 delay 時間超過 5000 mS,接收端似乎會收不到訊息。我想這可能與 XBee 有關,應該跟 EasyTransfer 沒有關係,等日後我對 XBee 有比較深入的了解時,再來研究這個問題。

所以,在使用 XBee 無線通訊時,如果有用到 delay(),要注意時間不要超過 5000 mS:

後來在 X-CTU 裏觀察 End Device 的 modem configuation, 發現一個疑似與這個問題有關的設定,也就是 Sleep Modes 底下的 ST 這個 parameter:

image

按照 X-CTU 的說明,ST paramter 是用來設定在 serial 多久沒活動後便啟動 Sleep Mode 的參數,預設值是 16 位進的 1388,剛好是 5000 MS,也就是說如果 serial 超過 5 秒鐘就沒活動,End Device 就會進入 Sleep Mode,因此只要把 ST parameter 調大一些,或者是說只要確保 Arduino 不要 delay 超過 ST parameter 所設定的時間,讓 serial 可以保持有活動,就不會遇到收不到訊息的狀況了。

延伸閱讀

2 意見:

Unknown 提到...

請問XBEE該怎麼設定才能使一點作為電腦端,一點為中繼點,一點為ARDUINO端,我使用的是XBEE S2

coopermaa 提到...

XBee module 可以當 repeater 用嗎?
哦? 我不曉得耶。
我只知道 Digi 有出一個可當 repeater 用的產品,叫做 Wall Router: http://www.digi.com/products/wireless-modems-peripherals/wireless-range-extenders-peripherals/xbee-wall-router