LoRa Edge LR1110 EVK 接入腾讯云物联网开发平台

2021-09-08 10:23:12 浏览数 (1)

背景

LoRa Edge 是 Semtech 在 2020 年推出的面向资产管理应用的产品系列,支持 GPS 及北斗卫星扫描、无源 Wi-Fi 扫描等多重定位技术,同时集成了远距离 LoRa 收发器。其中 LR1110 是该系列的第一款芯片,主打特色是超低的定位功耗以及极具吸引力的 BOM 成本。

据介绍,LR1110 在 GNSS 定位的功耗优势主要在于将传统的卫星解算流程进行优化,芯片本地只扫描空口的卫星导航电文,将导航电文上报到云平台进行详细位置解算,从而节省了芯片本地的工作时长和运算需求。因此,LR1110 需要配套云平台进行使用。国外用户可以使用 Semtech LoRa Cloud,但中国用户在使用体验上不大理想。

目前针对中国用户,腾讯云物联网开发平台已经支持 LoRa Edge LR1110 定位功能,用户还可以利用腾讯连连小程序、IoT Enable等功能快速开发特色应用。平台正在内测中,可以联系相应的 Semtech FAE 获取内测资格。

这篇文章先总体介绍 LoRa Edge 接入腾讯云物联网开发平台的系统架构,接着分别介绍各组件的具体开发细节,包含节点、网关、物联网平台及腾讯连连小程序的操作,让读者能熟悉整个开发链条。

腾讯云 IoT Explorer 是腾讯云主推的一站式物联网开发平台,IoT 小能手从设备侧开发、平台功能操作、应用侧开发三个部分来进行学习分享,另外还分享了一些动手实践作品,帮助读者更好地理解整个开发链路。详情可点此查看。

1 系统架构

一图胜千言。画这张图的时间,够再写一篇文章了。

2 LR1110 节点操作

这里 LR1110 节点先采用 Semtech LR1110 EVK,官方配套的软件采用的 GCC 编译器,需要在 Linux 环境下编译。后面 TencentOS tiny 也会开放一套 EVK,支持 MDK 编译器,Window 下的 Keil 就能编译了。

2.1 节点硬件准备

Semtech LR1110 EVK, 采用 STM32L476RG Nucleo 底板 LR1110 shield 的形式,两个 shield 分别支持不同的天线:

• PCB_E592V01B does not have a LNA and connects to the long antenna

• PCB_E516V02B includes one LNA and can only use the short antenna.

我们采用 PCB_E592V01B,配套一根长长的无源天线,方便测试。

2.2 节点软件操作

basic modem 的软件已在github开源:https://github.com/lorabasics/lorabasicsmodem/tree/develop/

2.2.1 编译器安装

这个软件目前只能在 Linux 下使用 GCC ARM 编译器 进行编译。

访问上面编译器官网,找到你的编译机对应平台的安装包。

代码语言:txt复制
# wget https://developer.arm.com/-/media/Files/downloads/gnu-rm/10-2020q4/gcc-arm-none-eabi-10-2020-q4-major-x86_64-linux.tar.bz2
# tar -jxvf gcc-arm-none-eabi-10-2020-q4-major-x86_64-linux.tar.bz2 -C /usr/local

添加环境变量

代码语言:txt复制
# vim ~/.bashrc

增加这么一行

代码语言:txt复制
export PATH=$PATH:/usr/local/gcc-arm-none-eabi-10-2020-q4-major/bin/        

验证:

代码语言:txt复制
# arm-none-eabi-gcc -v
2.2.2 代码修改

编译器安装完毕之后,可以着手代码修改。

1.修改DevEUI/AppKey

user_app/main_examples/example_options.h

代码语言:txt复制
/**
 * @brief LoRaWAN User credentials
 * 
 */
#define USER_LORAWAN_DEVICE_EUI     { 0x20, 0x21, 0x08, 0x24, 0x20, 0x21, 0x08, 0x24 }
#define USER_LORAWAN_JOIN_EUI       { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }
#define USER_LORAWAN_APP_KEY        { 0x20, 0x21, 0x08, 0x24, 0x20, 0x21, 0x08, 0x24, 
                                      0x20, 0x21, 0x08, 0x24, 0x20, 0x21, 0x08, 0x24 }

2.修改通信频点

代码语言:txt复制
The version 2.x of LoRa Basic Modem supports two kinds of frequency plan for CN470:
• CN470 RP_1B, supports 96 uplink and 48 downlink;
• Mono channel mode, supports only one channel. It is in fact a subset of CN470 RP_1B. This mode
can be used for the single channel demo gateway released together for demonstration purpose.

默认bin使用 CN470 RP_1B,使用了整个 96 上行和48下行信道。我们为了测试方便,调整为 单信道模式,使用 486.3 上行,506.7 下行。

单信道模式在编译时指定:

代码语言:txt复制
make full HYBRID_CHINA=yes

修改文件 user_app/main_examples/main_geolocation.c 中 main_geolocation() 对应的频点及速率变量。

代码语言:txt复制
void main_geolocation( void )
{
    ...
#if defined( HYBRID_CN470_MONO_CHANNEL )
    freq_tx_cn470_mono_channel_mhz = 486300000;
    for( uint8_t i = 0; i < 16; i   )
    {
        custom_datarate[i] = 0x05;  // Force use of SF7
    }
    SMTC_MODEM_HAL_TRACE_INFO( "HYBRID China version will transmit at %d Hzn", freq_tx_cn470_mono_channel_mhz );
#endif
    ...
}

3.修改辅助定位的经纬度

user_app/main_examples/example_options.h

如果使用辅助定位功能,辅助位置的经纬度不能和真实距离超过200KM,需要把这个辅助位置改成你当地的位置。经纬度信息可以使用腾讯位置服务_坐标拾取器来获取。

代码语言:txt复制
#if defined( CHINA_RP_1_DEMO )
#define MODEM_EXAMPLE_ASSISTANCE_POSITION_LAT  (31.185)
#define MODEM_EXAMPLE_ASSISTANCE_POSITION_LONG  (121.4238)
#define MODEM_EXAMPLE_ASSISTANCE_POSITION_TEXT  "Shanghai, CHINA"
#else
#define MODEM_EXAMPLE_ASSISTANCE_POSITION_LAT  (45.181454)
#define MODEM_EXAMPLE_ASSISTANCE_POSITION_LONG  (5.720893)
#define MODEM_EXAMPLE_ASSISTANCE_POSITION_TEXT  "Grenoble, FRANCE"
#endif

4.手动更新卫星历书

历书更新是 GNSS 扫描正常工作所必需的,因此通常需要在LR1110固件升级后至少更新一次。好消息是 Demo 中 Tracker 已经实现了手动历书更新和 OTA 历书更新。如果历书超过3个月,OTA历书将自动更新。

用户也可以在代码中更新历书,采用python脚本,代码位于 main_examples/geolocation_utilities/gnss.h,有一段被注释掉的python代码。

代码语言:txt复制
import base64
import requests

YOUR_TOKEN = 'Type your token, available at https://www.loracloud.com/portal/geolocation/token_management'

url = 'https://gls.loracloud.com/api/v3/almanac/full'
my_header = {'Ocp-Apim-Subscription-Key': YOUR_TOKEN}
res = requests.get(url, headers=my_header)
raw_bytes = bytes(base64.b64decode(res.json()["result"]["almanac_image"]))
my_almanac_in_hex = "static const lr1110_gnss_almanac_full_update_bytestream_t full_almanac = { "
my_almanac_in_hex  = ", ".join("0x{:02X}".format(byt) for byt in raw_bytes)
my_almanac_in_hex  = " };"
print(my_almanac_in_hex)

将这段代码保存成 lr1110_almanac_manual_update.py 文件,替换其中的 token 即可。token 需要到注释里的网址去注册获取。

代码语言:txt复制
$ python --version
Python 3.7.3

$ python lr1110_almanac_manual_update.py

python脚本运行的结果可以保存为一个头文件,例如 user_app/main_examples/geolocation_utilities/almanac_2021_08_24.h,伪代码如下:

代码语言:txt复制
#include "lr1110_gnss.h"

// Almanac loaded from loracloud at 2021-08-24 with python script
static const lr1110_gnss_almanac_full_update_bytestream_t full_almanac = { 0x80, 0x64, 0x03, 
....
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08 };

配套修改下文件包含关系,user_app/main_examples/geolocation_utilities/gnss.h

代码语言:txt复制
//#include "almanac_2021_04_06.h"
#include "almanac_2021_08_24.h"

5.另外一些修改,可能后续不用处理

a. linkadr

目前这版代码在 ChannelMask 的处理感觉不是很合适,NS 下发使能对应的 8 信道时会出现应答拒绝,导致 NS 持续下发 LinkADR 命令。

代码语言:txt复制
0 - Cmd link_adr_parser = 51 ff 00 51 
0 - MULTIPLE LINK ADR REQ , channel mask = 0xff , ChMAstCntl = 0x5
ChCtrl = 0x5, ChMask = 0x00ff
unwrapped channel tx mask = 0xff ff ff ff ff ff ff ff ff ff ff 00  
[0;33mWARN : Not acceptable data rate in mobile mode
[0;33mWARN : INVALID CHANNEL MASK in Mobile Mode 

修改文件:lr1mac/src/smtc_real/src/smtc_real.c

代码语言:txt复制
status_lorawan_t smtc_real_is_channel_mask_for_mobile_mode( const lr1_stack_mac_t* lr1_mac )
{
    ...

	return ( OKLORAWAN ); // return early for work around
		
    for( int i = 0; i < const_number_of_tx_channel; i   )
    {
        if( SMTC_GET_BIT8( unwrapped_channel_mask_ctx, i ) == CHANNEL_ENABLED )
        {
            for( uint8_t dr = const_min_tx_dr; dr < const_max_tx_dr; dr   )
            {
                if( SMTC_GET_BIT16( &dr_bitfield_tx_channel_ctx[i], dr ) == 1 )
                {
                    if( ( dr >= min_mobile_dr ) && ( dr <= max_mobile_dr ) )
                    {
                        return ( OKLORAWAN );
                    }
                }
            }
        }
    }
    SMTC_MODEM_HAL_TRACE_WARNING( "Not acceptable data rate in mobile moden" );
    return ( status );
}

b. LBT RSSI 门限调整

另外测试时,如果设备离网关较近,可能由于超过RSSI门限导致无法发出数据包,要么临时把天线旋松一些,要么把阈值调整下。

lr1mac/src/smtc_real/src/region_cn_470_rp_1_0_defs.h

代码语言:txt复制
#define LBT_THRESHOLD_DBM_CN_470_RP_1_0            (int16_t)(-50)  // TODO value must be checked
2.2.3 将 LR1110 烧写为纯 transceiver

在 BasicModem 用例中,LR1110 为 transceiver,需要烧写 transceiver 版本固件,目前最新的版本为 “lr1110_updater_tool_v1.2.0_trx_0x0305.bin”。如果版本太老,或者 LR1110 使用了 modem-E 固件那就无法使用。

LR1110 EVK 可以通过烧写固件变成升级工具,给其连接的 LR1110 芯片烧写固件。这边有预编译好的基于 LR1110_EVK 的固件,我们要给 LR1110 切换模式,只要给 EVK 烧写相应的固件即可完成模式切换。

如果使用的 LR1110 为市场购买的模块,那估计得按照 EVK 的连接,将 LR1110 模块连接到 EVK Nucleo 底板上,通过 EVK 的 MCU 来切换 LR1110 的模式。

2.2.4 编译烧写运行

编译命令:

代码语言:txt复制
make full HYBRID_CHINA=yes

Semtech LR1110 EVK 支持 USB 拖拽烧写,直接将编译生成后的bin文件复制到 EVK 在电脑中的 USB 存储即可,EVK 烧写固件后会自动重启。

一旦烧写完成,串口采用 115200bps 就会有打印信息。

代码语言:txt复制
 DevNonce = 446
 NbOfReset = 188
 Region = CN470_RP_1_0
rp_hook_init done
smtc_real_config done
TX - idx:0, freq: 470300000, dr: 0x3f,
TX - idx:1, freq: 470500000, dr: 0x3f,
TX - idx:2, freq: 470700000, dr: 0x3f,
TX - idx:3, freq: 470900000, dr: 0x3f,

这个示例是用不到EVK的屏幕,你会看到一片白屏,可以拔掉不管。

3 LoRaWAN 网关接入

用户的 LoRaWAN 网关需支持 Packet Forwarder 协议。

LoRaWAN 网关上的配置需做如下调整:

代码语言:txt复制
配置接入域名:loragw.things.zijiebao.com
接入端口:1700

详细的网关接入操作及腾讯云物联网开发平台的操作,可以查看文档:https://cloud.tencent.com/document/product/1081/41192

3.1 腾讯LoRa社区网络

除了自建网关之外,值得一提的是还可以借助腾讯 LoRa 社区网络实现更广的网络覆盖,可以极大方便 LR1110 的测试。

尤其是在深圳,可以看到周围有腾讯开放的一些社区网关,采用 80~87 上行信道,也就是 486.3 ~ 487.7 MHz。

4 腾讯云 IoT Explorer 控制台操作

4.1 创建产品及设备

1.创建产品

  • 产品品类:智慧生活-安防报警-定位器。// 别的产品品类或者不选也都可以,这个产品品类的好处是在腾讯连连中有一个地图免开发面板,方便查看位置。
  • 设备类型:设备
  • 认证方式:密钥认证
  • 通信方式:LoRaWAN

2.物模型添加标准功能

菜单操作为:物模型 -> 添加标准功能 -> 通用类型 -> 勾选“wifi定位”、“GNSS导航电文”

“wifi定位”为扫描的AP信息,包含MAC地址和RSSI。

“GNSS导航电文”为视野卫星的导航电文。

3.新建设备

在设备调试tab中,点击“新建设备”。按照之前源码中配置的 DevEUI 和 AppKey 来创建设备。

4.2 查看设备日志

LR1110 节点如果上电工作,且LoRaWAN网关保持上线,那么控制台中就会看到设备数据更新。

设备属性 tab 页面中可以看到数据更新:

设备日志 tab 页面中可以看到设备原始数据:

4.3 位置空间操作

如果想要在控制台看到设备的实时位置,需要新建位置空间。菜单位于“增值服务-位置服务”。

打开位置空间,将会看到最近的实时位置。

位置空间还有更丰富的功能,可以查看历史轨迹、热力图,以及操作围栏等等。

4.4 第三方应用

第三方应用如果想要获得设备原始数据,可以使用数据同步功能,将数据通过HTTP或者CKafka推送到第三方服务器,菜单位于“基础服务-数据同步”。

5 使用腾讯连连小程序

5.1 扫码绑定设备

设备列表 tab 页面可以快速查看设备的二维码,打开“腾讯连连”小程序扫码绑定设备。

5.2 打开面板

交互开发 tab 页面默认是“标准面板”,展现产品 json 物模型。如果要在小程序中看到地图,需要调整为“免开发面板”。

5.3 小程序界面

打开腾讯连连小程序,即可看到设备的实时位置。

END

That's all


0 人点赞