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节点。
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)。
3.1.2.1.1 LoRa网关的AT指令集
LoRa网关板连接到PC端后,可以通过串口调试工具(115200N81)发送相关的AT指令,查询与配置LoRa网关状态。
输入AT HELP 获取帮助信息,查看当前支持的AT指令集,如下所示
3.1.2.1.2 修改网关连接的LoRaWAN服务器地址
- 在PC端的串口调试窗口输入AT PKTFWD来设置LoRa网关连接的服务器地址与端口号:
// 设置ns服务器为loragw.things.zijiebao.com AT PKTFWD=loragw.things.zijiebao.com,1700,1700
- 根据需要是否开启日志显示
// 开启日志显示 AT LOG=ON
- 根据需要是否修改GWEUI
// 修改GWEUI,采用的是Nucleo-F746ZG的MAC地址,前3字节后面补0000 AT EUI=3,00,4,00
- 重启网关
AT RESET
3.1.2.1.3 修改网关的工作频点
IoT Explorer的LoRa社区网络当前支持的是LoRaWAN标准CN470频段。因此需按照CN470频段规范,结合实际应用来修改LoRa网关所使用频点。
LoRaWAN CN470频段有上行96个信道,下行48个信道,上下行异频,下行信道 = 上行信道 % 48。
本文设置如下:
- 上行工作频点为CN470上行信道表的CH0~CH7 (470.3~471.7 MHz)
- 对应的下行工作频点则为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
上述操作完成后,重启网关,等待网关上线。
然后进入“物联网开发平台(IoT Explorer)”-->“服务中心”-->“LoRa网关管理”-->“用户网关”,选中目标网关,查看该LoRa网关的当前状态信息(如网关名称、GwEUI、最后上报时间等等)
完成LoRa网关接入IoT Explorer平台,就基本上搭建好了一个LoRaWAN网络。
3.1.2 更新LoRa网关固件
如果P-NUCLEO-LRWAN3 中的Nucleo-F746ZG中的LoRa网关固件被擦除,可以通过如下方式更新代码:
- 准备LoRa网关的配套固件
- st-nucleo-lora-gw-at-fw-v2.2.0-cn470prequel.bin
- 更新固件
- 先给 LoRa网关板供电,然后通过USB连接线插入电脑
- Nucleo-F746ZG板载的ST-Link会识别成一个U盘
- 盘符:NODE_F746ZG(H:),容量为1.02MB
- 打开并进入U盘根目录文件夹
- 直接把bin文件拖拽到该文件夹,拷贝完成完后,ST-Link会自动烧入到目标芯片Flash,完成固件更新
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平台侧,“设备调试”可以查看到该设备的历史数据等信息。
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