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

epeppanda
发布于 2021-2-21 09:36
浏览
0收藏

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

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

MKR WAN 1300是一款功能强大的主板,结合了MKR Zero和LoRa连接的功能。对于希望设计物联网项目的制造商而言,它是理想的解决方案,而且在具有低功耗方面具备自己独特的优势,使用Arduino来开发和测试,也减少了对专业人员的技术需求。

MKR1300使用两节1.5V AA/AAA电池或外部5V为电路板供电,从一个源切换到另一个源是自动完成的。良好的32位计算能力,类似于MKR ZERO板,丰富的GPIO接口,低功耗LoRa通信以及用于代码开发和编程的Arduino软件的易用性等特性,使得该主板成为紧凑外形的新兴物联网电池供电项目的首选。另外 USB端口可用于为电路板供电,ArduinoMKR WAN  1300能够在连接或不连接电池的情况下运行,具备很低的功耗。来自Arduino的小巧的LoRa开发板——MKR WAN 1300开发板评测-鸿蒙开发者社区

虽然说包装好坏不影响产品使用体验,不过有了极富科技感的外包装,格调还是要高一点的。来自Arduino的小巧的LoRa开发板——MKR WAN 1300开发板评测-鸿蒙开发者社区

包装盒背面有个laser标签,从不同的角度看,可以看到很漂亮的Arduino logo,赞!来自Arduino的小巧的LoRa开发板——MKR WAN 1300开发板评测-鸿蒙开发者社区

开发板上两个主要器件:一个是Atmel SAMD21,另一个是Murata CMWX1ZZABZ LoRa模块。前者让我们体验Arduino,后者让我们体验LoRa,二者合起来,就是MKR1300的极致方便和简单易用了。来自Arduino的小巧的LoRa开发板——MKR WAN 1300开发板评测-鸿蒙开发者社区

Arduino Zero兼容引脚使用过孔排针来引出,正反两面都可以连接外设,同时也非常方便和其它扩展板来进行连接以扩展功能。

ATSAMD21G18是一款低功耗,高性能的基于ARM®Cortex®-M0 +的闪存微控制器,是各种家庭自动化,消费,计量和工业应用的理想选择。

来自Arduino的小巧的LoRa开发板——MKR WAN 1300开发板评测-鸿蒙开发者社区

它的特点主要包括:

 

• 256KB闪存和32KB SRAM

• 工作频率高达48MHz

• 六个串行通信模块(SERCOM)可配置为UART / USART,SPI或I2C,三个16位定时器/计数器,32位实时时钟和日历,20个PWM通道,一个14通道12位ADC,一个10位DAC

• 全速USB设备和嵌入式主机

• 支持多达120个触摸通道

• 1.62V至3.63V电源

• 易于将引脚迁移到SAMD21G和SAMD21J器件

• 由Atmel Studio,ASF和SAM D21 Xplained Pro套件提供支持

 

来自Arduino的小巧的LoRa开发板——MKR WAN 1300开发板评测-鸿蒙开发者社区

 

CMWX1ZZABZ是一种新型,紧凑,低成本,低功耗的广域网(LPWAN)无线模块,支持LoRaWAN远程无线协议。这款新型独立模块尺寸仅为12.5 x 11.6 x 1.76 mm,采用金属屏蔽封装,包括Semtech SX1276超远程扩频无线收发器和STMicro STM32L0系列ARM Cortex-M0 + 32位微控制器(MCU)。集成的TCXO具有强大的低漂移热特性,可为RF收发器提供精确的时钟源。 可以通过UART,SPI或I2C外设接口实现与模块的通信。ADC和多达18个GPIO为连接传感器,开关和状态LED提供了充分的灵活性,该模块由2.2至3.6 VDC电源供电。Murata CMWX1ZZABZ模块具有预认证的无线电监管认证,适用于世界上大多数地理区域的868和915 MHz工业,科学和医疗(ISM)频谱。

 

正常输出功率为+14 dBm,但可以选择PA增强功能,以便在远距离应用或终端设备位于室内信号较差的位置时将RF输出增加至+ 20dBm。MCU包括192 kB闪存和20 kB RAM,并具有足够的内存来嵌入客户应用程序和托管其他调制堆栈。此外,可选的STSAFE安全元件可以集成到MCU中,以增强网络安全功能。

该模块的典型应用包括智能计量,可穿戴设备,跟踪,M2M和物联网(IoT)边缘节点。该模块可适应各种温度,工作温度范围为-40至+ 85°C。

 

MKR1300支持使用Arduino来进行开发,使用之前先要添加硬件平台的支持,在Arduino的开发板管理器里添加MKR1300支持来自Arduino的小巧的LoRa开发板——MKR WAN 1300开发板评测-鸿蒙开发者社区

安装过程中也会添加对该板的驱动支持。

除了添加硬件平台外,还要添加MKRWAN库,该库封装了LoRa的底层驱动支持,在Arduino里直接调用相关的API就可以实现通信功能,无需关心LoRa的具体细节,只需要指定通信参数即可。来自Arduino的小巧的LoRa开发板——MKR WAN 1300开发板评测-鸿蒙开发者社区

这样开发环境就准备得差不多了。

不过要使用LoRa来通信,我们一般还需要一个LoRa网关,如果所在地区已有LoRa网关覆盖,就可以跳过这一步,如果没有,自己准备一个吧!这里使用的是Pilot RK831网关来实现信号的转发。来自Arduino的小巧的LoRa开发板——MKR WAN 1300开发板评测-鸿蒙开发者社区

一个典型的LoRa通信网络如下

来自Arduino的小巧的LoRa开发板——MKR WAN 1300开发板评测-鸿蒙开发者社区

 

通信包括结点、网关及网络服务器(含应用程序),这里使用TTN(The Thingsnetwork)来做为服务器,首先得在TTN上建立一个应用程序,以配合网关来处理数据。

来自Arduino的小巧的LoRa开发板——MKR WAN 1300开发板评测-鸿蒙开发者社区

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

 

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

来自Arduino的小巧的LoRa开发板——MKR WAN 1300开发板评测-鸿蒙开发者社区

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

如何获取设备的EUI呢,一般情况下,例如网卡及WiFi设备都会使用不干胶贴纸写出并贴在设备上。而对于MKR1300来说,要获取设备的EUI,需要运行配套程序提供的代码,通过Arduino的串口监视器来获取,如下来自Arduino的小巧的LoRa开发板——MKR WAN 1300开发板评测-鸿蒙开发者社区

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

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

来自Arduino的小巧的LoRa开发板——MKR WAN 1300开发板评测-鸿蒙开发者社区

这是指定连接(激活)方式后再指定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开发板,找开串口监视器

来自Arduino的小巧的LoRa开发板——MKR WAN 1300开发板评测-鸿蒙开发者社区

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

在TTN的控制台上,我们也可以看到类似的信息来自Arduino的小巧的LoRa开发板——MKR WAN 1300开发板评测-鸿蒙开发者社区

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

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

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

来自Arduino的小巧的LoRa开发板——MKR WAN 1300开发板评测-鸿蒙开发者社区

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

再次运行客户端程序,重新发送一次一次数据,得到如下的结果来自Arduino的小巧的LoRa开发板——MKR WAN 1300开发板评测-鸿蒙开发者社区

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

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

 

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

 

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

 

分类
已于2021-2-21 09:36:50修改
收藏
回复
举报
回复
    相关推荐