使用XBee模塊在Arduino和NodeMCU之間建立Zigbee通信以傳輸數(shù)據(jù)
Zigbee是一種流行的無線通信協(xié)議,用于以極低的功耗傳輸少量數(shù)據(jù)。它被廣泛應(yīng)用于需要在個(gè)人空間內(nèi)的多個(gè)節(jié)點(diǎn)之間共享數(shù)據(jù)的應(yīng)用中,隨著物聯(lián)網(wǎng)(IoT)的出現(xiàn),Zigbee的應(yīng)用正在快速增長(zhǎng)。它被用于家庭自動(dòng)化、資產(chǎn)跟蹤、遠(yuǎn)程數(shù)據(jù)收集等等。如果您已經(jīng)熟悉Zigbee和Zigbee協(xié)議的架構(gòu),那么您已經(jīng)知道兩個(gè)XBee模塊之間的無線通信可以在沒有任何額外的微控制器的情況下完成,但在實(shí)際應(yīng)用中,這些模塊將始終與微控制器接口以讀取和發(fā)送數(shù)據(jù)。讓我們進(jìn)一步了解如何使用Arduino和NodeMCU板建立Zigbee通信。
Zigbee和XBee的區(qū)別
重要的是要在一開始就澄清,XBee是一個(gè)模塊,一個(gè)產(chǎn)品,它支持許多無線通信協(xié)議,如ZigBee, Wi-Fi (Wi-Fly模塊),802.15.4,868 MHz模塊等。而Zigbee是一種用于建立無線網(wǎng)絡(luò)(Zigbee通信)的標(biāo)準(zhǔn)協(xié)議。人們經(jīng)常交替使用這兩個(gè)術(shù)語,但不應(yīng)該這樣做。為了建立Zigbee通信,我們需要一個(gè)接收器(端點(diǎn))。為此,與Arduino/NodeMCU連接的XBee模塊將完成,這將與另一個(gè)XBee模塊(協(xié)調(diào)器)進(jìn)行無線通信,該模塊發(fā)送數(shù)據(jù),將連接到另一個(gè)Arduino板。
建立Zigbee通信的硬件要求
?1 x Arduino Nano
?1 * NodeMCU
?2個(gè)XBee Pro S2C模塊
?1個(gè)XBee資源管理板(用于XBee編程)
?USB電纜
?LED(連同一個(gè)220歐姆電阻)
?按鈕
使用XCTU軟件配置XBee模塊
基本上,XBee模塊可以配置為協(xié)調(diào)器、路由器或終端設(shè)備。為了使它按照我們的期望工作,首先,我們必須使用XCTU軟件對(duì)它們進(jìn)行配置。您可以使用給定的鏈接下載并安裝XCTU軟件。
使用USB轉(zhuǎn)串口轉(zhuǎn)換器或資源管理器板將XBee模塊與PC機(jī)或筆記本電腦連接。使用USB線將XBee模塊連接到瀏覽器板和插件。我們將詳細(xì)介紹如何準(zhǔn)確地使用該軟件并配置模塊,但在此之前,讓我們準(zhǔn)備好硬件。
XBee與Arduino接口(發(fā)射端)
對(duì)于連接的這一邊,我們使用了Arduino Nano。也可以使用Arduino Uno或NodeMCU板。XBee與Arduino nano接口的完整電路圖如下所示。
在上面的Arduino XBee電路圖中,我們使用了一個(gè)按鈕,當(dāng)按下時(shí),它將傳輸數(shù)據(jù)。為此,將按鈕一端連接到Arduino的D5,另一端連接到GND。
XBee模塊的VCC(引腳1)連接到Arduino Nano的3.3V, XBee模塊的GND(引腳10)連接到Arduino Nano的GND。這兩個(gè)連接為發(fā)射端XBee模塊供電。Dout(引腳2)連接Arduino Nano的D2, Din(引腳3)連接Arduino Nano的D3。我使用面包板來構(gòu)建這個(gè)電路,我的硬件設(shè)置與所有連接如下所示。
XBee與NodeMCU接口(接收端)
為此,我們使用了NodeMCU,但它有一定的限制。您也可以使用Arduino Nano或Arduino Uno。使用Arduino傳輸數(shù)據(jù),NodeMCU接收數(shù)據(jù)的想法是,它將有一個(gè)更實(shí)際的應(yīng)用,如Arduino可以收集一些傳感器參數(shù)并通過ZigBee發(fā)送給NodeMCU,然后NodeMCU可以處理這些數(shù)據(jù)并根據(jù)需要通過互聯(lián)網(wǎng)共享或采取任何行動(dòng)。XBee與NodeMCU接口的完整電路圖如下所示。
XBee的Gnd(pin10)接至NodeMCU的Gnd, XBee的Vcc (Pin1)接至NodeMCU的3.3V。上述兩個(gè)連接也為XBee模塊供電。然后將XBee的Dout (pin2)連接到NodeMCU的D6引腳上,將XBee的Din (pin3)連接到NodeMCU的D7引腳上接收數(shù)據(jù)。
作為是否接收到數(shù)據(jù)的指示,我們使用了LED。為此,將LED陽極連接到NodeMCU的D2上,LED陰極通過NodeMCU的220ohm電阻連接到GND上。同樣,我使用面包板來構(gòu)建這個(gè)電路,我的硬件設(shè)置與所有連接如下所示。
下載并安裝XCTU軟件
設(shè)置、配置和測(cè)試XBee設(shè)備。您需要XCTU軟件。它是一個(gè)易于使用的,免費(fèi)的,多平臺(tái)的RF XBee模塊應(yīng)用程序。在這里下載XCTU軟件,它也會(huì)指導(dǎo)您安裝它。之后,打開應(yīng)用程序并確保XBee模塊已正確連接。在設(shè)備管理器中檢查資源管理板的COM口。
安裝XBee模塊固件
固件應(yīng)該首先安裝在兩個(gè)XBee模塊中,因?yàn)槲覀冋谑褂肵Bee開發(fā)板。
第一步:打開XCTU軟件,點(diǎn)擊“發(fā)現(xiàn)板”。
第二步:選擇XBee模塊連接的COM端口,點(diǎn)擊“下一步”。
第三步:保持默認(rèn)設(shè)置,點(diǎn)擊“完成”。
第四步:現(xiàn)在,在彈出的窗口中,點(diǎn)擊“Add Selected Devices”。
第5步:現(xiàn)在,XBee模塊將出現(xiàn)在窗口的左側(cè)。單擊它來更新用戶界面。
第六步:更新固件,點(diǎn)擊“更新”,在功能集中選擇“802.15.4 TH”,在固件版本中選擇最新的固件,點(diǎn)擊更新。在此之后,將出現(xiàn)一個(gè)彈出窗口。點(diǎn)擊YES。
第七步:輸入任意4位數(shù)字作為PAN ID。PAN ID是PAN (personal area network)的標(biāo)識(shí)符。每個(gè)網(wǎng)絡(luò)必須有一個(gè)唯一的ID。確保兩個(gè)XBee模塊都輸入了相同的PAN ID。這表明兩個(gè)XBee模塊在同一個(gè)網(wǎng)絡(luò)中。
第八步:輸入任意4位數(shù)字作為目的地址。對(duì)于其他XBee模塊,必須輸入相同的數(shù)字作為源地址。
步驟9:輸入任意4位數(shù)字作為源地址。必須輸入相同的數(shù)字作為另一個(gè)XBee模塊的Destination Address。
步驟10:將一臺(tái)設(shè)備設(shè)置為“坐標(biāo)[1]”,另一臺(tái)設(shè)備設(shè)置為“終端設(shè)備[0]”。
現(xiàn)在,單擊頂部欄中的Write。在此成功之后,符號(hào)從“E”變?yōu)椤癈”(End Device to Coordinator),正如我們所設(shè)置的。對(duì)于另一個(gè)XBee模塊,它應(yīng)該是“E”)。
注意:正如步驟中提到的,必須對(duì)兩個(gè)XBee模塊執(zhí)行此操作。兩者之間的唯一區(qū)別是終端設(shè)備和協(xié)調(diào)器的源地址和目的地址相反,必須選擇一個(gè)作為終端設(shè)備,另一個(gè)作為“協(xié)調(diào)器”。在“Coordinator Enable”下拉列表中,確保兩個(gè)XBee模塊都被賦予相同的PAN ID。
COM 5為接收端nodeMCU, COM 14為發(fā)送端Arduino nano。
將XBee引腳焊接到Arduino和NodeMCU
XBee模塊的引腳與面包板不兼容。因此,從XBee模塊引腳焊接4根電線到頭引腳,并使用它連接到面包板,如下圖所示?;蛘?,如果你想避免焊接工作,你也可以使用母頭到公頭連接器電線。
在概述中,使用兩個(gè)XBee模塊建立ZigBee通信。Arduino Nano和NodeMCU用于在兩個(gè)XBee設(shè)備之間進(jìn)行通信。XBee模塊的編碼是這樣的,當(dāng)在發(fā)送端按下一個(gè)按鈕時(shí),LED在接收端點(diǎn)亮。這表明在源端傳輸?shù)臄?shù)據(jù)在目的端被正確接收。
ZigBee通信程序Arduino
Zigbee通信的完整Arduino代碼可以在本頁底部找到。代碼解釋如下:
本部分模擬了引腳2 (Rx)和引腳3 (Tx)的串行通信。
Pin 5是Arduino Nano上連接按鈕的地方,這是發(fā)送信息所需要的。
要跟蹤按鈕是否被單擊,可以使用語句。如果按下按鈕一次,它會(huì)打開LED,如果再按一次,它會(huì)關(guān)閉LED。為了跟蹤這一點(diǎn),使用了切換。
該程序從一個(gè)空設(shè)置開始,并設(shè)置串行監(jiān)視器的波特率。
初始化按鈕引腳以讀取輸入。
這部分代碼片段使用軟件串行開始XBee和Arduino之間的連接。9600是XBee模塊的默認(rèn)通信速度。
這部分是檢查按鈕是否按下。如果按下,則引腳讀取LOW并記錄此操作。它還檢查之前是否單擊了按鈕。
這部分是將消息打印到串行監(jiān)視器上
重置之前的單擊,以便它可以再次檢測(cè)到單擊。當(dāng)開關(guān)為假時(shí),LED處于關(guān)閉狀態(tài)。
把消息發(fā)給XBee
延遲1秒是為了等待消息被傳遞
這個(gè)位檢查按鈕是否被點(diǎn)擊
在串行監(jiān)視器上打印消息
設(shè)置到之前的點(diǎn)擊狀態(tài),關(guān)閉LED
把消息發(fā)給XBee
創(chuàng)建一秒鐘延遲來等待消息的傳遞
ZigBee通信程序NodeMCU
Zigbee通信的完整NodeMCU代碼可以在本頁底部找到。代碼解釋如下:
代碼的Receiver部分與Arduino代碼幾乎相同
本部分模擬了引腳13 (Rx)和引腳12 (Tx)的串行通信。
將LED設(shè)為引腳2
存儲(chǔ)從XBee接收到的數(shù)據(jù)
初始化串行監(jiān)視器并以默認(rèn)波特率9600連接到XBee模塊
初始化LED作為輸出
將數(shù)據(jù)存儲(chǔ)在接收到的變量中
檢查接收數(shù)據(jù)是否為0
然后打印信息并關(guān)閉LED
如果接收到的數(shù)據(jù)為1,則打印消息并打開LED。
本文編譯自iotdesignpro