簡介
EasyTransfer Library 也可以用在 XBee 無線通訊上,這篇將說明如何辦到。你需要兩組 Arduino + XBee 設備,以及 XBee 的設定軟體 X-CTU。
▲ 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。參數全部使用預設值即可,不用修改。
▲ Coordinator 使用 "ZIGBEE COODIRNATOR AT" function set
▲ 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:
按照 X-CTU 的說明,ST paramter 是用來設定在 serial 多久沒活動後便啟動 Sleep Mode 的參數,預設值是 16 位進的 1388,剛好是 5000 MS,也就是說如果 serial 超過 5 秒鐘就沒活動,End Device 就會進入 Sleep Mode,因此只要把 ST parameter 調大一些,或者是說只要確保 Arduino 不要 delay 超過 ST parameter 所設定的時間,讓 serial 可以保持有活動,就不會遇到收不到訊息的狀況了。
請問XBEE該怎麼設定才能使一點作為電腦端,一點為中繼點,一點為ARDUINO端,我使用的是XBEE S2
回覆刪除XBee module 可以當 repeater 用嗎?
回覆刪除哦? 我不曉得耶。
我只知道 Digi 有出一個可當 repeater 用的產品,叫做 Wall Router: http://www.digi.com/products/wireless-modems-peripherals/wireless-range-extenders-peripherals/xbee-wall-router