2013年4月27日 星期六

Arduino 無線連接 XBee


Arduino無線連接-XBee更新於2010-01-28 01:11:33文章出處:與非網
關鍵字: Arduino 無線連接 XBee
        XBee-PRO OEM RF 模組是與ZigBee/IEEE 802.15.4相容的解決方案,可以滿足低成本低功耗無線傳感網路的特殊需求。該模組易於使用,極低的功耗,以及提供設備間關鍵資料的可靠傳輸。由於設計上的創新,XBee-PRO在範圍上可以超越標準ZigBee模組2-3倍。 XBee-PRO模組工作在ISM 2.4 GHz頻率波段,而且與MaxStream公司的XBee (1 毫瓦) Zigbee 模組引腳相容。該模組在美國,加拿大,澳大利亞,以色列以及歐洲廣泛使用。 建立RF通信不需要任何配置,該模組的默認配置支援寬範圍的資料系統應用。也可以使用簡單AT命令進行高級配置。 現在為OEM開發商提供XBee代碼開發包,OEM可以自己開發與MaxStream ZigBee/802.15.4 RF模組協作的代碼。
        利用我們為XBee打造的擴展板就可以很方便地將XBee模組連接到Arduino上。




        XBee模組與Arduino之間其實就是通過串列介面(即TxRx引腳)進行通信。對於簡單的點對點通信來講,只需要通過串列介面向XBee模組寫資料就可以實現資料的發送;當XBee模組通過無線通道接收到資料時,通過讀串列介面可以很方便地獲得這些資料,使用方式和APC220以及DF-Bluetooth藍牙模組雷同。
        使用多個Arduino XBee模組,就可以實現多個結點組成的複雜網路,這裏我們只研究最簡單的兩個結點的ZigBee網路。在使用XBEE之前,我們需要先給XBEE模組進行初始參數設置,對XBee模組的設置可以按照XBee手冊裏介紹的AT指令,通過串列終端完成,也可以借助X-CTU這一工具來完成,使用工具相對來說要方便點。
        Arduino XBee擴展板連接到Arduino母板上,然後將Arduino XBee擴展板上的兩個跳線置於USB一端,這樣X-CTU才能通過ArduinoUSB介面對XBee模組進行配置:


        注意:下面我們會用到ArduinoUSB介面以及TXRX管腳,所以請確保Arduion上沒有運行對串列介面操作的程式,或者將AVR晶片從Arduino板上取下之後再進行下麵的步驟。
     USB電纜把ArduinoPC機連接好之後, 運行X-CTU軟體。首先我們在“PC Settings”中裏選擇Arduino映射出來的串口通信埠,並設置好串列傳輸速率等參數。XBee模組出廠裏默認的設置為96008N1






        點擊“Test/Query”按鈕,測試XBee模組是否能連接上。如果一切正常,我們將看到如上圖中的Com test對話方塊,會顯示模組型號及版本號。如果通信參數設置都是正確的,但仍然無法與XBee模組通信上,則請檢查USB連線和Arduino XBee擴展板上的跳線,必要時可以撥掉Arduino上的ATmega單片機再試。
        測試通過後,轉到“Modem Configuration”。首先點擊“Modem Parameters and Firmware”中的“Read”按鈕讀出XBee模組中的當前參數,由於我們的XBEE是最新版本,這時軟體會彈出一個對話方塊,需要連接官方網站下載新版本配置檔,如下圖所示:


        等待軟體更新完畢後,再點擊“Read”按鈕讀出XBee模組中的當前參數,接著在讀出的“Networking & Security”中將“Channel”設為“C”,將“PAN ID”設置為“1234”


        如下圖所示,這裏可以修改XBEE的串列傳輸速率,XBEE模組默認串列傳輸速率9600,沒有特殊要求可以不用修改。


        上述主要參數設置好後,點擊“Write”按鈕將參數寫到XBEE模組中,這裏只做一個最簡單的點對點網路,所以只需要把2XBee模組的參數設置一致即可。兩個 XBee模組都設置好之後,運行兩個X-CTU並在“PC Settings”中選擇不同的串口通信介面,分別對兩個XBee模組進行測試。
        X-CTU“Terminal”中,我們手工輸入需要XBee模組傳輸的資料,這些資料被另一個XBee模組收到之後會在另一個X-CTU“Terminal”中顯示出來。其中藍色的表示發送的資料,紅色的表示接收的資料:


        接下來就要我們的Arduino通過串口來發送和接收資料了,先將2Arduino XBee擴展板的跳線連接到XBEE一端。


我們使用一個最簡單的工程來進行實驗:
int ledPin = 13;
int val;
void setup()
{
pinMode(ledPin, OUTPUT);
Serial.begin(9600);
}
void loop()
{
Serial.print('A');
delay(1000);
val = Serial.read();
if (-1 != val)
{
if ('A' == val)
{
digitalWrite(ledPin, HIGH);
delay(500);
digitalWrite(ledPin, LOW);
delay(500);
}
}
}
        該工程首先通過串口函數Serial.print()XBee模組發送一個字母A,字母會被XBee模組通發送到無線網路中去,被另外一個XBee模組接收到,再通過Serial.read()函數從該XBee模組讀取出接收到的資料,判斷如果是字母A的話,則點亮L發光二極體。
        將工程編譯後分別下載到兩個Arduino模組中,注意下載的時候請將Arduino XBee擴展板上的跳線拔掉,這是因為XBee模組會佔用串口,從而導致下載無法正確完成。
        由於新版的XBEE模組有60mW的發射功率,耗電也相對大些,直接用USB供電就有點小牛拉大車的感覺,所以建議使用外部供電,保證模組能正常工作。上電後兩個Arduino模組都會發送字母A,然後XBEE都會接收到字母A,判斷成功後會點亮數字I/O管腳13上的發光二極體。

 

原文鏈結:http://www.roboticfan.com/blog/user_2005/1229/archives/2009/2009512215944.shtml

沒有留言:

張貼留言

Node-Red & ModeBus FC=1

Node-Red & ModeBus FC=1 write address=0..7   8bits read address=16..23 8bits  [{"id":"cf7c1253d4d997dd","type&q...