【LoRa社区网关点亮活动】基于腾讯云IoT Explorer搭建开放的LoRaWAN网络

2020-10-19 10:24:26 浏览数 (1)

1 前言

IoT Explorer是腾讯云打造的一站式物联网开发平台,腾讯云IoT Explorer从设备接入上提供多种完善的通信对接模式,本文内容主要涉及到IoT Explorer中的物联网操作系统TencentOS tiny与基于LoRa通信的LoRa社区网络(LoRaWAN)。

2 准备工作

搭建开放的LoRaWAN网络,主要包括LoRaWAN云服务器、LoRaWAN网关、LoRaWAN终端设备。其中LoRaWAN服务器采用IoT Explorer提供的LoRa社区网络,网关与节点采用ST公司的LoRaWAN网络评估套件P-NUCLEO-LRWAN3。

2.1 准备LoRaWAN服务器

LoRaWAN服务器采用腾讯云的物联网开发平台(IoT Explorer)提供的LoRa开放社区网络。 https://cloud.tencent.com/product/iotexplorer。

2.2 准备LoRaWAN网关与LoRaWAN节点

ST公司的LoRaWAN网络评估套件P-NUCLEO-LRWAN3 包括一个LoRaWAN网关和一个LoRaWAN节点。

LoRaWAN网关( Nucleo-F746ZG 主板   LoRa GW-SX1301 射频板 )   LoRaWAN节点1LoRaWAN网关( Nucleo-F746ZG 主板 LoRa GW-SX1301 射频板 ) LoRaWAN节点1
LoRaWAN节点2采用TencentOS tiny推出一款STM32WLE5芯片的EVB_WL评估套件LoRaWAN节点2采用TencentOS tiny推出一款STM32WLE5芯片的EVB_WL评估套件

3 基于IoT Explorer搭建LoRaWAN网络

登录腾讯云物联网开发平台(IoT Explorer)

  • https://cloud.tencent.com/product/iotexplorer

在IoT Explorer的主要操作大致可分为如下两部分:

  • 一是LoRa网络搭建(服务中心)
  • 二是应用产品开发(开发中心)

如下图所示

3.1 服务中心

“服务中心”->“LoRa网关管理”可用于搭建LoRaWAN网络与服务。

3.1.1 LoRa网关管理

点击“服务中心”->“LoRa网关管理”,即可进入LoRa社区网络。

“LoRa网关管理”-->“社区网络”-->“添加网关”,填写LoRa网关的相关信息,注意GwEUI必须与实际所使用LoRa网关EUI保持一致,否则LoRa网关将加入不了LoRa社区网络。

完成上述步骤后,LoRaWAN网络平台侧就准备就绪了,接下来是对接实际的LoRa网关。

3.1.2 对接LoRaWAN网关

LoRaWAN网关(以下简称为LoRa网关)是LoRaWAN终端设备与LoRaWAN服务器相互通信的桥梁。

3.1.2.1 LoRa网关参数配置

将P-NUCLEO-LRWAN3 中的LoRa网关上电,并将USB转串口连接到PC,打开串口调试工具(115200N81)。LoRa网关启动后,会通过串口打印当前网关的基础信息。

P-NUCLEO-LRWAN3 中的LoRa网关出厂缺省连接的LoRaWAN服务器是cnl.loriot.io,因此需修改为IoT Explorer的LoRa服务器地址(loragw.things.zijiebao.com)。

LoRa网关首次上电的缺省信息LoRa网关首次上电的缺省信息
3.1.2.1.1 LoRa网关的AT指令集

LoRa网关板连接到PC端后,可以通过串口调试工具(115200N81)发送相关的AT指令,查询与配置LoRa网关状态。

输入AT HELP 获取帮助信息,查看当前支持的AT指令集,如下所示

LoRa网关支持的AT命令集LoRa网关支持的AT命令集
3.1.2.1.2 修改网关连接的LoRaWAN服务器地址
  1. 在PC端的串口调试窗口输入AT PKTFWD来设置LoRa网关连接的服务器地址与端口号:

// 设置ns服务器为loragw.things.zijiebao.com AT PKTFWD=loragw.things.zijiebao.com,1700,1700

  1. 根据需要是否开启日志显示

// 开启日志显示 AT LOG=ON

  1. 根据需要是否修改GWEUI

// 修改GWEUI,采用的是Nucleo-F746ZG的MAC地址,前3字节后面补0000 AT EUI=3,00,4,00

  1. 重启网关

AT RESET

3.1.2.1.3 修改网关的工作频点

IoT Explorer的LoRa社区网络当前支持的是LoRaWAN标准CN470频段。因此需按照CN470频段规范,结合实际应用来修改LoRa网关所使用频点。

LoRaWAN CN470频段有上行96个信道,下行48个信道,上下行异频,下行信道 = 上行信道 % 48。

CN470频段规范(LoRaWAN 1.1 Regional Parameters RevB)CN470频段规范(LoRaWAN 1.1 Regional Parameters RevB)

本文设置如下:

  1. 上行工作频点为CN470上行信道表的CH0~CH7 (470.3~471.7 MHz)
  2. 对应的下行工作频点则为CN470下行信道表的CH0~CH7(500.3~501.7MHz)

AT CH=0,470.3,A AT CH=1,470.5,A AT CH=2,470.7,A AT CH=3,470.9,A AT CH=4,471.1,B AT CH=5,471.3,B AT CH=6,471.5,B AT CH=7,471.7,B AT CH=8,OFF AT CH=9,OFF

上述操作完成后,重启网关,等待网关上线。

更新参数后,LoRa网关重启运行更新参数后,LoRa网关重启运行

然后进入“物联网开发平台(IoT Explorer)”-->“服务中心”-->“LoRa网关管理”-->“用户网关”,选中目标网关,查看该LoRa网关的当前状态信息(如网关名称、GwEUI、最后上报时间等等

完成LoRa网关接入IoT Explorer平台,就基本上搭建好了一个LoRaWAN网络。

3.1.2 更新LoRa网关固件

如果P-NUCLEO-LRWAN3 中的Nucleo-F746ZG中的LoRa网关固件被擦除,可以通过如下方式更新代码:

  1. 准备LoRa网关的配套固件
    • st-nucleo-lora-gw-at-fw-v2.2.0-cn470prequel.bin
  2. 更新固件
    1. 先给 LoRa网关板供电,然后通过USB连接线插入电脑
    2. Nucleo-F746ZG板载的ST-Link会识别成一个U盘
      1. 盘符:NODE_F746ZG(H:),容量为1.02MB
    3. 打开并进入U盘根目录文件夹
  3. 直接把bin文件拖拽到该文件夹,拷贝完成完后,ST-Link会自动烧入到目标芯片Flash,完成固件更新
ST-Link U盘方式固件更新ST-Link U盘方式固件更新

3.2 开发中心

“开发中心”可用于创建基于LoRaWAN终端设备的应用产品。

3.2.1 新建项目

点击 “开发中心” ->“新建项目”,在“新建项目”页面填入实际项目的相关信息

3.2.1.1 新建产品

点击上述已创建的项目,在弹出的“新建产品”页面,本文要加入的产品为NUCLEO_LRWAN3_Sensor 传感器设备,填写相应产品信息。

新建产品新建产品

创建完产品后,就可以根据实际产品需求,按照产品开发流程向导,完成所需要内容。

3.2.1.1.1 创建数据模板

在“数据模板”页面,“自定义功能”->“新建功能”。添加温度、湿度、上报周期三个属性。

新增温度属性(只读)新增温度属性(只读)
新增湿度属性(只读)新增湿度属性(只读)
新增上报周期属性(读写)新增上报周期属性(读写)
3.2.1.1.2 设备开发

“设备开发”可用于配置LoRaWAN的部分通信参数(协议版本、入网方式、、设备类型、RX1 Delay等),同时定义二进制数据(终端侧)与JSON数据(平台侧)格式相互转换的脚本。

3.2.1.1.2 设备调试

添加一个LoRaWAN终端设备,填入设备DevEUI与设备密钥(AppKey)

3.2.2 对接LoRaWAN终端设备1

LoRaWAN终端设备1采用NUCLEO_STM32L073RZ LoRaWAN串口模组,软件运行的是TencentOS-tiny的LoRaWAN示例程序。

在 TencentOS tiny 官方开源仓库 下载源码,进入<TencentOS-tinyboardNUCLEO_STM32L073RZKEILlorawan>目录,打开 TencentOS_tiny.uvprojx 工程,该工程包含 STM32L073 外设驱动、TencentOS tiny 内核、AT 框架、LoRaWAN 模组驱动、LoRaWAN 温湿度上报示例。

注意终端设备的DevEUI、AppKey必须与IoT Explorer平台侧“设备调试”添加的终端设备保持一致。

基于TencentOS tiny的LoRaWAN终端部分实现如下

代码语言:javascript复制
// CN470频段
#define RHF76_ATCMD_SET_BAND_CN470              "AT DR=CN470rn"
#define RHF76_ATCMD_REPLY_BAND_CN470            " DR: CN470"
// 信道使用CH0~7
#define RHF76_ATCMD_SET_CHANNEL                 "at ch=num,0-7rn"

void application_entry(void *arg)
{
    int16_t temperature;
    int16_t humidity;

    HTS221_Init();
   
    rhf76_lora_init(HAL_UART_PORT_1);
    tos_lora_module_recvcb_register(recv_callback);

    /* 设置终端设备的deveui、appkey */
    tos_lora_module_join_otaa("1122334455667788","00112233445566778899AABBCCDDEEFF");
    
    while (1)
    {
        // 周期性上报数据,缺省为10s
        HTS221_Get_Temperature(&temperature);
        HTS221_Get_Humidity(&humidity);
        BSP_PRESSURE_Get_Press(&pressure);
        printf("temperature: %2.1fn", temperature / 10.0);
        printf("humidity   : %2.1fn", humidity / 10.0); 
        printf("pressure   : %.1fn", pressure); 
        
        dev_data_wrapper.u.dev_data.temperature = temperature / 10;
        dev_data_wrapper.u.dev_data.humidity    = humidity / 10;
        dev_data_wrapper.u.dev_data.period      = report_period;

        tos_lora_module_send(dev_data_wrapper.u.serialize, sizeof(dev_data_t));
        tos_task_delay(report_period * 1000);
    }
}
设备成功入网后,周期性上报数据设备成功入网后,周期性上报数据

在IoT Explorer平台侧,“设备调试”可以查看到该设备的历史数据等信息。

IoT Explorer平台侧 设备数据IoT Explorer平台侧 设备数据

3.2.3 对接LoRaWAN终端设备2

LoRaWAN终端设备2采用EVB_WL评估板,软件运行的是TencentOS TinyboardRHF0M0E5_STM32WLE5xx_lorawan示例代码。该示例包含了TencentOS Tiny内核、LoRaWAN终端协议栈、LoRaWAN数据包上报应用的实现。

代码语言:javascript复制
// 修改DevEUI、AppKey 、LoRaWAN终端终端的信道、入网方式、速率等参数配置
static lorawan_configuration_t lw_config =
{
    .otaa        = LORA_ENABLE,
    .duty_cycle  = LORA_ENABLE,
    .DevEui      = LORAWAN_DEVICE_EUI,
    .JoinEui     = LORAWAN_JOIN_EUI,
    .AppKey      = LORAWAN_APP_KEY,
    .NwkKey      = LORAWAN_NWK_KEY,
    .NwkSEncKey  = LORAWAN_NWK_S_ENC_KEY,
    .AppSKey     = LORAWAN_APP_S_KEY,
    .FNwkSIntKey = LORAWAN_F_NWK_S_INT_KEY,
    .SNwkSIntKey = LORAWAN_S_NWK_S_INT_KEY,
    .Rssi        = 0,
    .Snr         = 0,
    .ReqAck      = LORAWAN_UNCONFIRMED_MSG,
    .TxDatarate  = 0
};

void MX_LoRaWAN_Init(void)
{   
    /*channel 0-7*/
    LWChannel_mask_t ch={0x00FF,0,0,0,0,0x0000};    
    
    /*tx dr*/
    lw_config_tx_datarate_set(DR_3);
    
    /*OTAA*/
    lw_config_otaa_set(LORA_ENABLE);

    /*enable adr*/
    lw_adr_set(LORA_ENABLE);
    
    /*set retry*/
    lw_confirm_retry_set(3);
}

4 参考

  • 基于 TencentOS tiny 的 LoRaWAN 开发入门指南 官方教程
    • https://github.com/Tencent/TencentOS-tiny/blob/master/doc/16.TencentOS_tiny_LoRaWAN_Getting_Started_Guide.md
  • TencentOS tiny定制开发板EVB_WL快速入门指南
    • https://github.com/Tencent/TencentOS-tiny/blob/master/doc/26.TencentOS_tiny_EVB_WL_Quick_Start.md
  • ST Nucleo LoRa Gateway 开发板接入腾讯云物联网开发平台
    • https://blog.csdn.net/iotisan/article/details/104852938
  • STM32 Nucleo pack LoRa™ LF band sensor and gateway
    • https://www.st.com/content/st_com/en/products/evaluation-tools/product-evaluation-tools/stm32-nucleo-expansion-boards/p-nucleo-lrwan3.html

0 人点赞