首页 > 评测 > 来自Arduino的小巧的LoRa开发板——MKR WAN 1300开发板评测

来自Arduino的小巧的LoRa开发板——MKR WAN 1300开发板评测

Arduino    LoRa    MKR WAN    Atmel   SAMD21   Murata    CMWX1ZZABZ   
  • 作者:SATURN
  • 来源:21ic
  • [导读]
  • LoRa的优势在于低功耗和远距离,理论上来说,相比于BLE和WiFi更具优势。不过在可穿戴领域,依旧是BLE一枝独秀;而WiFi则一直独霸着局域网无线通信领域。相对来说,LoRa在工业应用方面正逐渐显露自己独特的优势。市面上LoRa产品不少,大多以模块的方式提供给用户,借助三方MCU来实现自己的远程通信功能。

rId31.png

这里是专门为了本次测试而建立的一个应用程序,应用程序一般包括APP EUI及APP KEY两个要素,用来区别不同的应用程序。

建立好应用程序之后,要为该应用程序绑定一个或多个设备,也就是将MKR1300和应用程序对应起来,方便接收及处理数据。

rId32.png

图中可以看到,注册设备时一般要提供设备的EUI信息,EUI可以理解为网络设备中的MAC地址,在设备出厂时就已固化在设备内部,每个设备的Device EUI都是不同的。

如何获取设备的EUI呢,一般情况下,例如网卡及WiFi设备都会使用不干胶贴纸写出并贴在设备上。而对于MKR1300来说,要获取设备的EUI,需要运行配套程序提供的代码,通过Arduino的串口监视器来获取,如下

rId33.png

这里看到的Your device EUI is: a8610xxx就是设备的EUI。

支持库里的FirstConfiguration程序还可以用来测试与TTN的连接情况,不过需要指定几个参数:激活方式,使用OTTA还是使用ABP;应用程序EUI,区分不同的应用程序;APP KEY,该值类似一些REST API中的授权机制,以免数据被滥用。

rId34.png

这是指定连接(激活)方式后再指定APP EUI及APP KEY后连接成功的情况。

配套的库文件还提供了一个发送及接收数据的示例LoRaSendAndReceive.ino文件,演示了如何通过LoRa来发送及接收数据的例子,关键代码如下

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(" ");

}

通过modem.print()来发送数据,通过modem.read()来读取数据。

其实我们都知道,LoRa通信中一般需要指定具体的能数,如使用868MHz还是使用915MHz来进行通信,另外还有SF、CR等参数的设置,这些都可以通过moderm实例来进行设置。

另外还要提一下的是还需要在代码中指定APP EUI及APP KEY两个值,否则通信是不会成功的。

将修改后的代码编译并上传到MKR1300开发板,找开串口监视器

rId35.png

从串口监视中可以看到,我们发送了字符串"Hello, MKR1300!",同时看到信息发送成功的提示。

在TTN的控制台上,我们也可以看到类似的信息,如下

rId36.png

注意Payload字段的值,与我们在Arduino串口监视器上看到的信息是一致的,只不过只里只显示了二进制的表示形式。

另外我们也可以看到通信的具体参数设置,例如频段为867.7,调制方式为LORA,data_rate的值为SF12BW125,还有CR的值为4/5等,其它的一些信息则是网关传递过来的信息,如timestamp等信息,别忘了,这些信息都是通过网关转发过来的!

除了上行信息,也可以控制下发信息,不过目前TTN还只提供了简单的机制来实现信息的下发,参考下图

rId37.png

这里我们指定下发的信息为三个字节:65 66 67,这个下发的动作是自动触发的,一旦收到数据,自动下发指定的三个字节!

再次运行客户端程序,重新发送一次一次数据,得到如下的结果

rId38.png

这里我们看到了接收到的三个字节:65 66 67,对应的ASCII字符为efg。

如果我们要在粒度控制上获取更好的控制效果应该怎么办呢?TTN提供了数据的编、解码机制和Integration来增强其功能,详情请参考TTN的相关文档。

总的来说,MKR1300集Arduino Zero与LoRa通信功能于一身,体积小巧但是功能强大,结合Arduino的简单易用,确实是LoRa入门者首选开发板!

最后有个疑问,据Arduino官方文档介绍,该开发板支持LoRa 433/868/915通信频段,但是从ABZ官方的文档中得知,该模块只支持868/915通信频段,本次测试只测试了868频段的通信,其它两个频段都没有测试,留下了一个小困惑!

  • 本文系21ic原创,未经许可禁止转载!

网友评论