首頁(yè) > 評(píng)測(cè) > 來(lái)自Arduino的小巧的LoRa開(kāi)發(fā)板——MKR WAN 1300開(kāi)發(fā)板評(píng)測(cè)
來(lái)自Arduino的小巧的LoRa開(kāi)發(fā)板——MKR WAN 1300開(kāi)發(fā)板評(píng)測(cè)
- [導(dǎo)讀]
- LoRa的優(yōu)勢(shì)在于低功耗和遠(yuǎn)距離,理論上來(lái)說(shuō),相比于BLE和WiFi更具優(yōu)勢(shì)。不過(guò)在可穿戴領(lǐng)域,依舊是BLE一枝獨(dú)秀;而WiFi則一直獨(dú)霸著局域網(wǎng)無(wú)線通信領(lǐng)域。相對(duì)來(lái)說(shuō),LoRa在工業(yè)應(yīng)用方面正逐漸顯露自己獨(dú)特的優(yōu)勢(shì)。市面上LoRa產(chǎn)品不少,大多以模塊的方式提供給用戶,借助三方MCU來(lái)實(shí)現(xiàn)自己的遠(yuǎn)程通信功能。
這里是專門為了本次測(cè)試而建立的一個(gè)應(yīng)用程序,應(yīng)用程序一般包括APP EUI及APP KEY兩個(gè)要素,用來(lái)區(qū)別不同的應(yīng)用程序。
建立好應(yīng)用程序之后,要為該應(yīng)用程序綁定一個(gè)或多個(gè)設(shè)備,也就是將MKR1300和應(yīng)用程序?qū)?yīng)起來(lái),方便接收及處理數(shù)據(jù)。
圖中可以看到,注冊(cè)設(shè)備時(shí)一般要提供設(shè)備的EUI信息,EUI可以理解為網(wǎng)絡(luò)設(shè)備中的MAC地址,在設(shè)備出廠時(shí)就已固化在設(shè)備內(nèi)部,每個(gè)設(shè)備的Device EUI都是不同的。
如何獲取設(shè)備的EUI呢,一般情況下,例如網(wǎng)卡及WiFi設(shè)備都會(huì)使用不干膠貼紙寫出并貼在設(shè)備上。而對(duì)于MKR1300來(lái)說(shuō),要獲取設(shè)備的EUI,需要運(yùn)行配套程序提供的代碼,通過(guò)Arduino的串口監(jiān)視器來(lái)獲取,如下
這里看到的Your device EUI is: a8610xxx就是設(shè)備的EUI。
支持庫(kù)里的FirstConfiguration程序還可以用來(lái)測(cè)試與TTN的連接情況,不過(guò)需要指定幾個(gè)參數(shù):激活方式,使用OTTA還是使用ABP;應(yīng)用程序EUI,區(qū)分不同的應(yīng)用程序;APP KEY,該值類似一些REST API中的授權(quán)機(jī)制,以免數(shù)據(jù)被濫用。
這是指定連接(激活)方式后再指定APP EUI及APP KEY后連接成功的情況。
配套的庫(kù)文件還提供了一個(gè)發(fā)送及接收數(shù)據(jù)的示例LoRaSendAndReceive.ino文件,演示了如何通過(guò)LoRa來(lái)發(fā)送及接收數(shù)據(jù)的例子,關(guān)鍵代碼如下
LoRaModem modem;
...
int err;
modem.beginPacket();
modem.print(msg);
err = modem.endPacket(true);
if (err > 0) {
Serial.println("Message sent correctly!");
} else {
Serial.println("Error sending message :(");
Serial.println("(you may send a limited amount of messages per minute, depending on the signal strength");
Serial.println("it may vary from 1 message every couple of seconds to 1 message every minute)");
}
delay(1000);
if (!modem.available()) {
Serial.println("No downlink message received at this time.");
return;
}
String rcv;
rcv.reserve(64);
while (modem.available()) {
rcv += (char)modem.read();
}
Serial.print("Received: " + rcv + " - ");
for (unsigned int i = 0; i < rcv.length(); i++) {
Serial.print(rcv[i] >> 4, HEX);
Serial.print(rcv[i] & 0xF, HEX);
Serial.print(" ");
}
通過(guò)modem.print()來(lái)發(fā)送數(shù)據(jù),通過(guò)modem.read()來(lái)讀取數(shù)據(jù)。
其實(shí)我們都知道,LoRa通信中一般需要指定具體的能數(shù),如使用868MHz還是使用915MHz來(lái)進(jìn)行通信,另外還有SF、CR等參數(shù)的設(shè)置,這些都可以通過(guò)moderm實(shí)例來(lái)進(jìn)行設(shè)置。
另外還要提一下的是還需要在代碼中指定APP EUI及APP KEY兩個(gè)值,否則通信是不會(huì)成功的。
將修改后的代碼編譯并上傳到MKR1300開(kāi)發(fā)板,找開(kāi)串口監(jiān)視器
從串口監(jiān)視中可以看到,我們發(fā)送了字符串"Hello, MKR1300!",同時(shí)看到信息發(fā)送成功的提示。
在TTN的控制臺(tái)上,我們也可以看到類似的信息,如下
注意Payload字段的值,與我們?cè)贏rduino串口監(jiān)視器上看到的信息是一致的,只不過(guò)只里只顯示了二進(jìn)制的表示形式。
另外我們也可以看到通信的具體參數(shù)設(shè)置,例如頻段為867.7,調(diào)制方式為L(zhǎng)ORA,data_rate的值為SF12BW125,還有CR的值為4/5等,其它的一些信息則是網(wǎng)關(guān)傳遞過(guò)來(lái)的信息,如timestamp等信息,別忘了,這些信息都是通過(guò)網(wǎng)關(guān)轉(zhuǎn)發(fā)過(guò)來(lái)的!
除了上行信息,也可以控制下發(fā)信息,不過(guò)目前TTN還只提供了簡(jiǎn)單的機(jī)制來(lái)實(shí)現(xiàn)信息的下發(fā),參考下圖
這里我們指定下發(fā)的信息為三個(gè)字節(jié):65 66 67,這個(gè)下發(fā)的動(dòng)作是自動(dòng)觸發(fā)的,一旦收到數(shù)據(jù),自動(dòng)下發(fā)指定的三個(gè)字節(jié)!
再次運(yùn)行客戶端程序,重新發(fā)送一次一次數(shù)據(jù),得到如下的結(jié)果
這里我們看到了接收到的三個(gè)字節(jié):65 66 67,對(duì)應(yīng)的ASCII字符為efg。
如果我們要在粒度控制上獲取更好的控制效果應(yīng)該怎么辦呢?TTN提供了數(shù)據(jù)的編、解碼機(jī)制和Integration來(lái)增強(qiáng)其功能,詳情請(qǐng)參考TTN的相關(guān)文檔。
總的來(lái)說(shuō),MKR1300集Arduino Zero與LoRa通信功能于一身,體積小巧但是功能強(qiáng)大,結(jié)合Arduino的簡(jiǎn)單易用,確實(shí)是LoRa入門者首選開(kāi)發(fā)板!
最后有個(gè)疑問(wèn),據(jù)Arduino官方文檔介紹,該開(kāi)發(fā)板支持LoRa 433/868/915通信頻段,但是從ABZ官方的文檔中得知,該模塊只支持868/915通信頻段,本次測(cè)試只測(cè)試了868頻段的通信,其它兩個(gè)頻段都沒(méi)有測(cè)試,留下了一個(gè)小困惑!
-
- 本文系21ic原創(chuàng),未經(jīng)許可禁止轉(zhuǎn)載!
網(wǎng)友評(píng)論
- 聯(lián)系人:巧克力娃娃
- 郵箱:board@21ic.com
- 我要投稿
-
歡迎入駐,開(kāi)放投稿
- NRF52810藍(lán)牙數(shù)字耳機(jī)找人定制
預(yù)算:¥30005天前
- 125KW模塊式PCS軟硬件外包開(kāi)發(fā)
預(yù)算:¥1100000015小時(shí)前
- 12V汽車啟動(dòng)電源項(xiàng)目BMS設(shè)計(jì)
預(yù)算:¥50000023小時(shí)前
- 數(shù)據(jù)可視化軟件 開(kāi)發(fā)
預(yù)算:¥5000023小時(shí)前
- PLC項(xiàng)目調(diào)試修改
預(yù)算:¥100001天前
- 起動(dòng)電機(jī)控制器開(kāi)發(fā)
預(yù)算:¥1100001天前