2018年早些时候,我在家里的屋顶附近安装了 MatchBox LoRa 室外网关,并跟大家介绍了使用 MatchX Cloud 进行设置有多容易。基本上,只需注册到云端、输入序列号,网关就会根据你的位置自动进行配置。我在东南亚,所以网关配置的就是AS923。
在2018年7月的时候,我终于有时间来使用 RAKwireless RAK811 LoRa 跟踪器板了,同时我也设法让跟踪器位置显示在了地图上。那是我第一次使用 LoRaWAN,我需要学习了解的东西特别多,还要克服过时的软件开发工具、不同的数据格式,以及所有相关组件之间的一些互操作性问题带来的诸多问题。我会在这篇评测中记录我遇到的所有内容,希望它能帮助大家。
RAK811 LoRa GPS 追踪器拆箱
在进入 LoRa 配置之前,先给大家看看我要使用的 RAK811 节点。如下图所示:
一个带有“IoT Made Easy”的包装盒,里面包含了指向文档和软件的链接。
打开盒子后,我们会看到电路板、带有长电缆的 GPS 天线、LoRa 天线、micro USB 线、电池线,以及一个带有一些跳线帽和杜邦线的塑料袋。
追踪器板的一侧带有 RAK811 LoRa 模块、用于电池的 2 针接头和连接 I/O 的排针。右上角的跳线用于选择Boot模式,稍后我都会详细介绍。
另一面包括 u-blox MAX-7Q GPS 模块、一个micro USB 接口和Reset按钮。还有两个用于连接天线的 SMA 连接器。
RAK811 跟踪器的硬件设置
由于海关规定,该套件不包含任何电池,所以我在当地购买了 18650 电池和电池座。
我将其焊接到了提供的电线和连接器上,然后再将其插入电路板。
这个时候,还需要连接到 GPS 和 LoRa 天线。我花了一些时间才找到。最后,我终于在RAK的 Aliexpress 页面中找到了哪个 SMA 连接器是用于哪个天线的。
接着为了解更多信息,我在端口和我的电脑之间连接微型 USB 转 USB 电缆,并配置了电路板。
RAK811 LoRa 跟踪器信息、开发工具和固件
我一般使用的是 Ubuntu 16.04,以下就是我在计算机中插入设备时的内核输出:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
7521.899484] usb 1-2.4.3: new full-speed USB device number 5 using ehci-pci [ 7522.029424] usb 1-2.4.3: New USB device found, idVendor=10c4, idProduct=ea60 [ 7522.029427] usb 1-2.4.3: New USB device strings: Mfr=1, Product=2, SerialNumber=3 [ 7522.029429] usb 1-2.4.3: Product: CP2102 USB to UART Bridge Controller [ 7522.029431] usb 1-2.4.3: Manufacturer: Silicon Labs [ 7522.029433] usb 1-2.4.3: SerialNumber: 0001 [ 7523.088561] usbcore: registered new interface driver usbserial [ 7523.088613] usbcore: registered new interface driver usbserial_generic [ 7523.088659] usbserial: USB Serial support registered for generic [ 7523.091652] usbcore: registered new interface driver cp210x [ 7523.091687] usbserial: USB Serial support registered for cp210x [ 7523.091747] cp210x 1-2.4.3:1.0: cp210x converter detected [ 7523.093893] usb 1-2.4.3: cp210x converter now attached to ttyUSB0 |
这是一个典型的串行设备。我们可以使用 minicom 或其他具有 115200 bps 8N1 配置的串行终端程序连接到 /dev/ttyUSB0。然后按下复位按钮或用跳线短接复位和 GND 引脚,然后将其移除,再重新启动电路板:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
RAK811 BreakBoard soft version: 1.0.2 Selected LoraWAN 1.0.2 Region: EU868 ABP: Dev_EUI: 60 C5 A8 FF FE 00 00 10 DevAddr: 004B041B NwkSKey: 2B 7E 15 16 28 AE D2 A6 AB F7 15 88 09 CF 4F 3C AppSKey: 2B 7E 15 16 28 AE D2 A6 AB F7 15 88 09 CF 4F 3C [Debug]: latitude: 0.000000, longitude: 0.000000 , altitudeGps: -1 Move Detected INT1 src:0x42 Move Detected INT1 src:0x41 Move Detected INT1 src:0x42 Move Detected INT1 src:0x50 Move Detected INT1 src:0x50 [Debug]: tempr: 34 Bat: 5500mv [Debug]: ACC X:FF00 Y:FF00 Z:0000 Move Detected INT1 src:0x60 [Debug]: latitude: 0.000000, longitude: 0.000000 , altitudeGps: -1 Move Detected INT1 src:0x44 Move Detected INT1 src:0x60 Move Detected INT1 src:0x50 Move Detected INT1 src:0x50 |
EU868 并不完全符合我的预期,因为有人告诉我该板是用来配置 AS923的。但事实证明这不是什么大问题,用户应该根据自己的情况相应地配置跟踪器。
我预装的固件有点旧(1.0.2),而Github 上的最新版本是 v1.1.3,这个版本增加了对 AT 命令的支持。他们的文档中也解释了如何使用 CooCox CoIDE 或 Arm Keil 构建固件,这两者都仅适用于 Windows。我看到有的人在Linux下用Makefile搭建成功了,但提交了pull request后,并没有通过,现在和其他代码冲突了。我为了让事情更简单一些,我就使用了 Windows 7 启动 VirtualBox 会话。
第一步是下载CooCox CoIDE,一个Arm GNU嵌入式工具链,从github获取代码然后打开项目,按照文档修改AS923,在CoIDE中构建。看起来挺容易的,但我下载CooCox CoIDE 就遇到了障碍。之后我找到了一个旧版本,然后构建就失败了。最后,RAK 给我提供了更新版本的 CooCox CoIDE下载链接,我设法构建了固件。其实我是在这个评测快结束的时候才找到这个解决方案的,所以我刷了二进制版本:rak811_tracker_classA.bin。
你们有三个选项来通过 STLink J-Link 调试器,从 Keil 或 CoIDE 刷新固件,或者使用 STMicro Flash Loader Demonstrator 通过 USB。后者似乎更容易,因为它不需要额外的硬件。我尝试从 RAKwireless 的文档页面的链接下载了,但速度有点缓慢,因此你们可以直接从 STMicro 网站下载。
首先我们需要将跳线短接 BOOT0 和 VCC 以进入如上图所示的串行启动模式,下面是 RAK811 跟踪器引脚图。
按Reset按钮重新启动电路板,我们现在可以使用 Flash Loader Demonstrator。
首先选择端口名称,在我的情况下为 COM9,然后单击下一步,这是你们应该会被告知检测到板。如果没有,可能是因为忘记正确放置跳线或忘记重新启动电路板。
再次单击下一步,然后从列表中选择 STM32L1_Cat2-128K。
再次按下一步按钮,选择我们刚刚下载的固件文件“rak811_tracker_classA.bin”。
保持所有其他设置不变,然后单击“下一步”按钮开始向板子下载数据,并烧录固件。
这应该只需要几秒钟。一切完成后,就会收到“下载操作成功完成”的消息。
现在将 BOOT0 和 GND 短路的跳线移回原位,连接串行终端,然后按下Reset按钮。
使用 OTAA 或 ABP 加入方法配置 RAK811 Tracker
如下所示,这是终端的输出:
1 |
RAK811 BreakBoard soft version: 1.1.3 |
没有什么其他的。因为我们应该输入 AT 命令进行配置,就像 Github 中的简要说明那样,如下:
AT命令列表:
at+region=EU868/US915/AS923/AU915/IN865/KR920 //设置设备区域
at+dev_eui=xxxxxxxxxxxxxxxx // 设置设备 dev_eui
at+app_eui=xxxxxxxxxxxxxxxx // 设置设备 app_eui
at+app_key=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx // 设置设备 app_key
at+dev_addr=xxxxxxxx // 设置设备 dev_addr
at+nwks_key=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx // 设置设备 nwks_key
at+apps_key=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx // 设置设备 apps_key
at+join_mode=otaa/abp // 设置设备加入otaa或abp
在我们进一步之前,我们应该先了解这两种方法:
- 无线激活 (OTAA) 是首选且最安全的连接方式。设备与网络执行加入过程,在此期间分配动态 DevAddr 并与设备协商安全密钥
- 个性化激活 (ABP) 对 DevAddr 参数以及设备中的安全密钥进行硬编码。这意味着通过个性化 (ABP) 激活设备。这种策略可能看起来更简单,因为您跳过了加入这个步骤,但它有一些与安全相关的缺点
- DevEUI – 64 位终端设备标识符,EUI-64(唯一)
- AppEUI – 64 位应用程序标识符,EUI-64(唯一)
- AppKey– 128 位应用程序密钥
OTAA 方式入网后就会自动生成 DevAddr、NwksKey 和 AppsKey(这里注意多一个“s”)。ABP 模式则需要手动指定:
- DevAddr – 32 位设备地址(非唯一)
- NwkSKey – 128 位网络会话密钥,用于节点和网络之间的交互
- AppSKey – 128 位应用程序会话密钥,用于有效载荷的加密和解密
OTAA 似乎是最好的方法,所以还是按照个方法来试试。
1 2 3 4 5 |
at+dev_eui=60c5a8fffe000010 at+app_eui=70b3d57ed0007dfa at+app_key=b429c9c903d8442c5bf684fb5ef00219 at+region=AS923 at+join_mode=otaa |
前三行定义了上面讨论的参数,后两行设置了Region和入网模式。看起来是可以组合任何数字的,只要它们的长度是预先指定的 64 位或 128 位。我最初在 minicom 中粘贴 AT 命令时遇到了麻烦,我被告知必须一次粘贴一行,末尾带有“/r/n”(新行)。我尝试了各种终端,在设置->终端中更改设置从而发送(和接收)。接着CR+LF 行换行后,Tera Term就可以正常使用了。
无论你们使用哪个终端,诀窍就是在每个命令后添加一个新行。
at+join_mode 命令必须是最后一个,因为一旦我发送该命令,其他命令就会被忽略了。
1 2 3 4 5 6 7 8 9 10 11 |
at+join_mode=otaa OK OTAA: Dev_EUI: 60 C5 A8 FF FE 00 00 10 AppEui: 70 B3 D5 7E D0 00 7D FA AppKey: B4 29 C9 C9 03 D8 44 2C 5B F6 84 FB 5E F0 02 19 |
将 LoRa应用程序和设备添加到 MatchX Cloud
我们现在已经用必要的参数配置了 RAK811 节点,所以我们需要去MatchX Cloud创建一个应用程序并添加一个具有相同参数的新设备。
我创建了gps-tracking 应用程序来跟踪自行车位置,至少我的计划是这样的。准备好新应用程序后,就可以单击“创建节点”并添加一个新设备,如下所示,其中包含DevEUI、A ppEUI和AppKey参数。
因为我们要使用 OTAA 加入模式,所以不要选 ABP,然后单击“提交”按钮。
第一个 LoRaWAN 连接
现在我们可以按下 RAK811 跟踪器板上的Reset按钮,看看串行控制台会发生什么:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 |
RAK811 BreakBoard soft version: 1.1.3 Selected LoraWAN 1.0.2 Region: AS923 OTAA: Dev_EUI: 60 C5 A8 FF FE 00 00 10 AppEui: 70 B3 D5 7E D0 00 7D FA AppKey: B4 29 C9 C9 03 D8 44 2C 5B F6 84 FB 5E F0 02 19 OTAA Join Start... Move Detected INT1 src:0x42 Move Detected INT1 src:0x50 Move Detected INT1 src:0x50 Move Detected INT1 src:0x50 OTAA Join Success [Debug]: latitude: 0.000000, longitude: 0.000000 , altitudeGps: -1 Move Detected INT1 src:0x50 [Debug]: tempr: 33 Bat: 5496mv [Debug]: ACC X:0000 Y:0000 Z:FF00 [Debug]: latitude: 0.000000, longitude: 0.000000 , altitudeGps: -1 [Debug]: tempr: 33 Bat: 5500mv Move Detected INT1 src:0x50 Move Detected INT1 src:0x44 |
很好,设备可以加入网络了,我们也获取到了各种信息。比如:温度、电池电量和加速度计数据。我们需要等待一段时间才能获得 GPS 坐标。
好的,我们看看在 MatchX Cloud 中得到了什么。
太棒了!我们每秒都会收到一些数据包,这是 RAK811 中固件默认应该执行的操作。理论上来说,一旦电路板获得 GPS 数据,我肯定能够在 MatchX Cloud 的地图中看到 RAK811 节点位置。但现在很奇怪,我没有看到这些位置。
在进一步研究了包括使用 The Things Network 设置 RAK811 跟踪器节点的文档后,我发现数据是以Cayenne Low Power Payload (LPP) 格式发送的,网关不会解码这种类型的数据,所以我问了 MatchX是否有可能改变它,并得到以下答案:
谈到数据格式—我们在类型-长度-值 (TLV) 格式中使用的是不同的数据编码。
目前我们的云映射器只能使用这种格式。我们正在对我们的云进行重大更新,想要让更多的数据解析器出现在我们的清单上,但这仍然需要我们一些时间。
将 MatchX MatchBox LoRa 网关连接到物联网
好消息是 Cayenne LPP 可能很快就会得到支持,但我很想在几天内完成我的评测,而不是几个月。因为RAKwireless 提供了使用 The Things Network (TTN) 设置 RAK811的说明,我就决定重新配置网关并连接到 TTN 上试试。
我们只需要转到MatchX Cloud,特别是网关详细信息页面,然后单击Edit Config按钮更改网关部分,然后连接到 TTN(我这里的情况是 AS1):
1 2 3 4 5 6 7 8 9 10 11 |
"gateway_conf": { /* change with default server address/ports, or overwrite in local_conf.json */ "server_address": "router.as1.thethings.network", "serv_port_up": 1700, "serv_port_down": 1700, "servers": [ { "server_address": "router.as1.thethings.network", "serv_port_up": 1700, "serv_port_down": 1700, "serv_enabled": true } ], |
现在点击Upload Config按钮,网关配置就完成了。这时你需要注意网关详细信息窗口中的 MAC,因为它也是稍后将在 TTN 中询问的网关 EUI。
设置物联网
现在让我们去The Things Network 网站,注册一个免费账户,然后去TTN 控制台。点击网关,注册网关。
首先勾选“I’m using the legacy packer forwarder”,然后将网关的 MAC 粘贴到“Gateway EUI”字段中、提供描述、选择频率计划(此处为亚洲 920-923 MHz),然后选择适合你的路由器地区。
你也可以指定网关位置,但MatchBox 网关是不需要的,因为它支持GPS,最后我选择了天线放置(室外或室内),然后单击注册网关。
现在返回 TTN 控制台主页,单击Application,然后添加 application。
在单击Add application之前,要填写你选择应用程序的 ID、描述和Handler registration。
你应该会被重定向到应用程序的概览页面,这时你就可以单击顶部菜单中的设备,然后注册设备了。
给它一个设备 ID,以及我们在 RAK811 节点中配置的 Dev EUI,然后点击Register。现在转到 Device Overview 页面,这时你会看到 DevEUI、AppEUI 和 AppKey 的值。
为物联网配置 RAK811
现在,我们可以回到 RAK811 跟踪器上的终端控制台来重新配置我们的新值了。
1 2 3 4 5 |
at+dev_eui=60c5a8fffe000010 at+app_eui=70B3D57ED0010DE0 at+app_key=3CBFDC8BAE52EA4217E7B3F468DE14B1 at+region=AS923 at+join_mode=otaa |
我发现到了这一步必须要擦除数据,并使用 Flash Loader Demonstrator 重新刷新固件,然后才能使用 AT 命令更新值:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
RAK811 BreakBoard soft version: 1.1.3 Selected LoraWAN 1.0.2 Region: AS923 OTAA: Dev_EUI: 60 C5 A8 FF FE 00 00 10 AppEui: 70 B3 D5 7E D0 01 0D E0 AppKey: 3C BF DC 8B AE 52 EA 42 17 E7 B3 F4 68 DE 14 B1 OTAA Join Start... Move Detected INT1 src:0x42 Move Detected INT1 src:0x50 Move Detected INT1 src:0x50 Move Detected INT1 src:0x50 OTAA Join Success [Debug]: latitude: 0.000000, longitude: 0.000000 , altitudeGps: -1 |
看起来不错,我们只需要等待 GPS 搜到卫星。同时,我们可以使用我们刚刚配置设备的数据选项卡查看我们是否在 TTN 界面中收到了来自设备的加入请求。
很好这一步成功完成了!我们现在需要在myDevices.com注册设备,因为该服务将处理 Cayenne LPP 数据解码,并以漂亮的方式显示数据。
注册免费服务后,在仪表板中选择 LoRa。
然后是界面左侧的 The Things Network。
现在向下滚动以选择 Cayenne LPP。
并输入名称,还有你的 DevUI,然后单击“添加设备”。
哦,天哪!DevEUI 已经被占用了。所以我尝试了其他一些,直到我发现“60c5a8fffe002011”没有被注册。我添加了那个设备,但我不得不重复 The Things Networks 和 RAK811 串行接口中的步骤,用我的新 DevEUI 重新配置所有的东西。
在 TTN 中配置 Cayenne 集成
我们还没有完成,因为我们需要回到 TTN,点击设备仪表板中的集成。
选择Cayenne图标,输入选择的进程 ID,然后在访问密钥字段中选择默认密钥。
单击添加集成按钮,转到有效负载格式,然后选择Cayenne LPP。
单击“保存”,几分钟后,我们应该就会在 Cayenne 中看到温度、加速度计和 GPS 数据的良好表示。
更多问题和解决方法
但是几个小时后,我还是看到一个空的仪表板
我可以在 TTN 中看到一些数据包,但串行控制台显示 OTAA Join 出现了一些问题。所以看起来RAK811 应该是可以直接向网关发送加入请求的,然后网关将其转发给 The Things Netwokrs,但不知什么原因它没有得到反馈。我尝试将 MatchX Gateway global_conf.json 更改为AS1 (Asia 1 – 920 – 923 MHz)提供的网关,但仍然没有成功。
最后,RAKwireless 官方的人通过 TeamViewer 会话帮助了我,并找到了“解决方案”,就是将激活方法从 OTAA 更改为了 ABP 再加入 TTN。
并将相关的 AT 命令粘贴到 RAK811 串口控制台中。
1 2 3 4 5 6 7 |
at+dev_eui=60C5A8FFFE002011 at+app_eui=70B3D57ED0010DE0 at+dev_addr=26041FFF at+nwks_key=A910C26D4AD9434423CE7FD436174EB2 at+apps_key=1EF109DD9B3FB5AFD6C0B56665872B14 at+region=AS923 at+join_mode=abp |
重置电路板,几秒钟后我开始在 Cayenne LPP 仪表板中获取了 RSSI 和 SNR 数据,几分钟后 GPS 数据也恢复了,我可以在 mydevice.com 中看到 RAK8711 LoRa 跟踪器的位置。
这一次体验还是存在挺多问题的,但令人高兴的是最后还是成功了。RAKwireless 方面认为 OTAA 的问题可能是时间问题。MatchX 方面则认为这可能是幂表的问题,具体如下所示:
这个潜在的问题可能与幂表有关。当服务器想要向端节点发送消息时,它指定请求的功率 是 RF 级别。网关采用此功率水平并减去天线增益(在 global_config 中指定,在我们的示例中为 2.5db,但删除了 0.5,仅减去了 2db)从而去补偿使用的天线。然后它在其 LUT 功率表中查找具有此特定功率的条目以配置其内部放大器。如果它无法找到所需的功率电平,则该消息就会被丢弃。我们的 global_config 配置会符合LoRa 区域参数 1.0,我们将在不久的将来更新到版本 1.1。不过,TTN 服务器的配置可能不同。我们还没有为这个地区尝试过 TTN 服务器。
不过,我目前还没有详细调查这部分。我想先完成这篇评测,因为我有一些个人原因需要移除掉网关。
跑步、开车和四处走走
一切准备就绪后就可以正常工作了,我想在家外测试节点然后去查看一下我得到的范围。我的第一个测试是 3 公里的夜跑。我先用皮带将所有东西固定到位。
但我很快发现 RAK811 会自动关闭。歧视使用电池运行有时是会发生这种情况,这个问题很偶然。我不确定这是不是原本就存在的问题,因为我在家里进行的早期测试时摔倒了一下,这可能损坏了电路板和引脚。
捣鼓了很久,那天晚上我都没有得到任何数据。第二天早上,我尝试把车开走试试。我先开了几十米,在失去 WiFi 连接之前检查跟踪器的位置确实更新了,这确实是有效的。
好了,位置终于以合理的精度(4 到 5 米)正确更新了。然后我慢慢开车到另一个有 WiFi 、视线距离大约 500 米的位置,并通过连接的方式检查该位置是否每分钟更新一次,而 myDevices 仪表板中没有任何内容。因此,我将 RAK811 连接到我的笔记本电脑,并检查了一下它是否在串行控制台中获得了 GPS 数据,结果确实是有的。我开车往回走,回到家就无法进一步更新了。即使在 TTN 仪表板中收到了一些消息,myDevices 仪表板也不会再更新了。
不久之后,我又直线步行到500米以外的一个当地市场,一直在TTN监控数据包。
我记得我是在 10:20 左右离开家的,收据的数据显示,我是在 10:32 到了一家室内商店。其实,在理想的情况下,我应该每分钟收到一条消息才对,但实际是有 6 分钟的时间 TTN 根本没有收到任何消息(10:25 到 10:31)。回来的路上没有出现同样的丢包,只丢了两条消息。不过遗憾的是,myDevices 仪表板中仍然没有任何内容。
还有一个很有趣的事,我在写这篇评测的时候,我仍然可以在 myDevices 中看到26号的数据,一直更新到了 17:33。
现在的时间是 20:00。RAK811板子还在运行,我没有碰过它,但它已经2个半小时没有收到新数据了。当地人告诉我这里有鬼魂,所以这一定是没有收到新数据的原因吧。好吧,开个玩笑。我怀疑这就是使用OTAA时会存在的问题,或者在使用ABP的时候偶尔也出现。所以大概率就是时间问题,或者是特定频率的问题。
我对 LoRa / LoRaWAN 的第一次体验并非完全一帆风顺,以后还有很多东西要学。例如,我还没有来得及考虑功耗和电池寿命的问题,因为只是让它正常运行就花了我很多时间。但至少这是一次很好的学习经历,因为我知道如何可以更好地让它们更好的工作,以及从硬件到云的每个部分是如何集成在一起的。
如果你们有兴趣购买我测评过的这个硬件,你们可以在MatchX 网站上购买到 MatchBox LoRa 网关,价格是 350 欧元,也可以在 全球速卖通上购买 RAK811 LoRa 跟踪器,价格大约是 50 美元。
文章翻译者:Taylor Lee,瑞科慧联(RAK)高级嵌入式开发工程师,有丰富的物联网和开源软硬件经验,熟悉行业主流软硬件框架,对行业发展动向有着敏锐的感知力和捕捉能力。