1 前言
本章延续前几篇文章继续介绍Sidewalk,不过本章为实战测试,供大家参考。从device发message,到云服务器看数据,然后再介绍一下代码中使用LR11x0时的GNSS和WIFI定位功能。
目前有两家公司出了整套硬件和配套demo代码,Nordic和Silicon Labs,链接如下:
- EFR32xG24(SiLabs) + SX1262MB2CAS,此链接为SiLabs官方网站,有详细文档介绍,大家可根据此文章链接实现EFR32xG24 + SX1262的开发测试。
- EFR32xG24(SiLabs) + LR11xx,此链接为Semtech官方github,是在SiLabs出的SX1262的代码基础上衍变而来。由于使用的是LR11xx,所以增加了GNSS和WIFI定位功能(GNSS使用NAV2),本章也是基于硬件EFR32xG24 + LR1110作为例子进行讲解的。
- nRF52840(Nordic) + SX1262MB2CAS,nRF Connect SDK - Amazon Sidewalk,这两个链接为Nordic文档,里边有详细介绍,大家可据此入门Nordic + Sidewalk,配置开发环境等。
- nRF52840(Nordic) + LR11xx,此链接为Semtech官方github,是在Nordic出的SX1262的代码基础上衍变而来。由于使用的是LR11xx,增加了GNSS和WIFI定位功能(GNSS使用NAV3),同时增加了LoRaWAN协议,实现双协议栈。大家可根据此文章链接实现nRF52840 + LR11xx的开发测试。
2 节点device
本章选用EFR32MG24+LR1110作为节点硬件,软件使用Semtech的https://github.com/Lora-net/SWDR007/tree/main。下图为系统架构图,先有个整体概念。
首先从github上clone下来代码,根据仓库根目录下的README文档中的步骤,在Simplicity Studio v5中导入、配置工程,然后编译工程,生成binary文件。当然第一步是先flash Sidewalk配置文件.mfg(这个只需要下载一次),然后flash生成的binary文件。
本例子中,我在代码中配置的通信方式是LoRa,同时做GNSS和WIFI定位,我在资源中上传了测试时生成的log文件“Sidewalk-log-1.txt”,文章的最上边可下载。需要注意的是LR11xx使用的firmware是0x0308,而且本代码只支持GNSS的NAV2,但Nordic+LR11xx的那套代码支持NAV3,firmware使用的是0x0401。所以在log中我们需要确认固件版本号,不要弄错了,如下:
00> [00000249] <info> LR11xx: VER HW 0x22 FW 0x0308
当device上电时,需要查看的另外一条重要的log是device的状态,如下:
00> [00610103] <info> app: REG: 0, TIME: 0, LINK: 4
看到上边的log可以理解为已经成功入网并且网络没问题了,下边解释一下其中含义。
- REG代表Registration status,即注册状态,0:device已经注册过了,1:device未注册,需要先注册。
- TIME代表Time sync status,即时间同步。0:时间同步成功,1:时间同步失败。device需要先与gateway进行时间同步,这是一个强制要求,只有时间同步成功了,才能进行后续操作,所以这个是查看log时最主要的点。同时,时间同步成功,代表着入网了,也代表着所做的翻墙网络通了。
- LINK代表Link status,即连接状态,0:没有连接,1:BLE连接,2:FSK连接,4:CSS,即LoRa连接。
本例子在入网成功后,device会一直做GNSS和WIFI scan定位,逻辑是GNSS scan -> 60s -> GNSS scan -> 60s -> WIFI scan -> 60s -> GNSS scan…,每次scan后都会将结果上传到AWS IoT。
GNSS scan log举例:
00> [00891737] <info> app: start gnss scan evt
00> [00891738] <info> scan_timer: assisted scan started 1412574412, 31.299999 121.150002
00> [00895565] <info> LoraRx:rx_st:-5
00> [00895565] <info> rx initiate error -13
00> [00896916] <info> result size 67
00> [00896917] <info> on_gnss_scan_done 8 SV
00> [00896918] <info> - SV 31: CNR: 49, doppler: 1537
00> [00896919] <info> - SV 96: CNR: 45, doppler: 716
00> [00896919] <info> - SV 102: CNR: 43, doppler: -251
00> [00896920] <info> - SV 104: CNR: 43, doppler: 2698
00> [00896921] <info> - SV 79: CNR: 43, doppler: -249
00> [00896921] <info> - SV 9: CNR: 43, doppler: -96
00> [00896922] <info> - SV 30: CNR: 42, doppler: 2919
00> [00896923] <info> - SV 27: CNR: 41, doppler: 1619
00> [00896923] <info> nav:
00> [00896924] <info> 01 01 CD 22 91 45 AC 82 3E A8 93 5D 08 30 00 24 52 23 02 08 FA 8F F1 A4 36 FF E8 6C B1 B6 49 FD C7 C4 94 61 44 08 8C 7A CE 4C 66 81 88 39 95 F2 03 05 FF 05 74 2A 01 56 14 15 2C CF 54 77 A8 1D FC 57 00
00>
00> [00896929] <info> mtu 19, total fragments 4
WIFI scan log举例:
00> [00952164] <info> app: start wifi scan evt
00> [00952288] <info> nb_results 6
00> [00952290] <info> 0) ch1 90 23 b4 5c ee ea -57dBm
00> [00952291] <info> 1) mobile-AP
00> [00952291] <info> 2) ch6 38 a9 1c a5 d8 e6 -89dBm
00> [00952292] <info> 3) ch6 74 39 89 74 1e 35 -22dBm
00> [00952293] <info> 4) ch6 04 5f b9 e6 7d 60 -62dBm
00> [00952294] <info> 5) mobile-AP
00> [00952294] <info> wifi_result_buffer:
00> [00952294] <info> 00 90 23 B4 5C EE EA 38 A9 1C A5 D8 E6 74 39 89 74 1E 35 04 5F B9 E6 7D 60
00>
00> [00952296] <info> mtu 19, total fragments 2
3 AWS IoT Core for Sidewalk
device将数据发出去之后,经过Echo或者其他网关,会到达AWS IoT Core for Sidewalk。此时,我们可以登录AWS console管理平台去查看,如下图,先搜索IoT core,点击进去。
找到Sidewalk的device选项列表,进去,如下图。
下图为我自己的device截图,共参考。
设置Destination,这个是需要自己创建的。
配置好之后,可通过MQTT test client查看device发的数据。
4 LoRa Cloud Locator
上边我们将AWS IoT Core for Sidewalk作为NS,做项目时AS可以自己开发,但此处我们只是测试,我选用Semtech的LoRa Cloud Locator作为AS,来解析并验证LR1110的GNSS和WIFI scan定位数据。
进入LoRa Cloud Locator,需要先注册一个账号,然后创建设备,与AWS IoT Core for Sidewalk account上的device进行绑定,这个绑定过程我目前不清楚,如果有需要,可以联系Semtech技术支持。
绑定device成功之后,就可以在Locator的地图上查看device的定位了,如下图。
5 总结
本章的介绍算是抛砖引玉吧,因为想要运行起整套系统确实不容易,里边还有很多细节需要去做,但本章可以让你在开始做之前在脑中有个大致的框架。等需要做的时候要边做边学习,我相信大家可以完成自己的测试,最终实现项目的开发。
谢谢大家,本章的介绍总算是说完了,字不多,但测试过程不容易。。。