P-NUCLEO-LRWAN3 是用于评估 LoRaWAN 网络的完整套件,包括一个网关和一个节点:
图中左边是LoRa网关,由ST Nucleo-F746ZG 底板和瑞兴恒方 SX1301的 LRWAN_GS 模块组成。
图中右边是LoRAa节点,由 ST Nucleo-L073 底板 和ST LRWAN_NS1 扩展板和组成, 其中
LRWAN_NS1 扩展板集成瑞兴恒方的 RHF0M003 LoRaWAN 模组, 并集成了温湿度传感器
HTS221、气压传感器 LPS22HB、 3 轴磁力传感器 LIS3MDL、 6 轴姿态传感器 LSM6DS3 共 4个 I2C 传感器件。
该网关的全部资料和固件我已上传到百度网盘,关注公众号『Mculover666』回复“lora”即可获取:
参考教程:LoRa 温湿度传感器接入指引。
登录 物联网开发平台控制台,选择【新建项目】,在新建项目页面,填写项目基本信息后,单击【保存】。
项目新建成功后,即可新建产品,进入该项目的产品列表页面,单击【新建产品】,在新建产品页面,填写产品基本信息后,单击【保存】:
单击产品名称,进入产品配置页,在【自定义功能】配置项下,单击【新建功能】,自定义产品功能:
在设备开发页面中,按需调整 LoRaWAN 参数配置,本示例中使用默认的 OTAA 配置:
在设备开发页面中,按需调整设备数据解析。由于 LoRa 类资源有限设备不适合直接传输 JSON 格式数据,使用“设备数据解析”可以将设备原始数据转化为产品 JSON 数据。
在本示例中,设备上行数据共4字节:
上行数据解析的脚本主函数为 RawToProtocol
,其带有 fPort、bytes 两个入参:
在上行数据解析部分,javascript 示例代码如下:
function RawToProtocol(fPort, bytes) {
var data = {
"method": "report",
"clientToken" : new Date(),
"params" : {}
};
data.params.temperature = bytes[0];
data.params.humidity = bytes[1];
data.params.period = bytes[2] | (bytes[3] << 8);
return data;
}
下行数据解析的脚本主函数为 ProtocolToRaw
,其入参为产品数据模版协议格式的对象,其出参为至少3个字节的数组:
在下行数据解析部分,javascript 示例代码如下:
function ProtocolToRaw(obj) {
var data = new Array();
data[0] = 5;// fport=5
data[1] = 0;// unconfirmed mode
data[2] = obj.params.period & 0x00FF;
data[3] = (obj.params.period >> 8) & 0x00FF;
return data;
}
配置之后如下:
上行模拟数据为:[17,69,30,0],填入设备上行数据的编辑框中,单击【运行】,即可在模拟调试界面右侧查看结果:
接下来测试下行数据,模拟测试数据如下,将其填入设备下行数据的编辑框中:
{
"params": {
"period": 15
}
}
测试完毕后,点击提交!
在设备调试页面中,单击【新建设备】,设备名为 dev001,DevEUI 等信息可从 LoRa 节点开发板背面贴纸上获取:
登录 物联网开发平台控制台,选择上文 “控制台操作 LoRa 节点” 中对应的项目。
在左侧工具列表中,选择【服务中心】>【LoRa 网关管理】。进入 LoRa 网关管理页面,选择【添加网关】:
在新建网关页面,填写网关基本信息:
按照LoRa全链路打通教程01 - LoRa网关配置查看和修改方法详解(以ST P-NUCLEO-LRWAN3 套件为例)一文中描述的方法进行网关上电和配置查看,按照以下内容进行对接腾讯云配置。
腾讯云物联网开发平台的 LoRa 服务器地址(接入域名:loragw.things.qcloud.com,接入端口:1700),命令如下:
AT+PKTFWD=loragw.things.qcloud.com,1700,1700
调整频点信息到486.3MHz - 487.7 MHz,指令修改如下(需要逐条发送):
AT+CH=0,486.3,A
AT+CH=1,486.5,A
AT+CH=2,486.7,A
AT+CH=3,486.9,A
AT+CH=4,487.1,B
AT+CH=5,487.3,B
AT+CH=6,487.5,B
AT+CH=7,487.7,B
AT+CH=8,OFF
AT+CH=9,OFF
全部配置之后信息如图:
AT+LOG=ON
配置完成后,使用如下命令重启模组,重启后模组会自动获取ip并连接服务器:
AT+RESET
在 TencentOS tiny 官方开源仓库 下载源码,进入
目录,打开 TencentOS_tiny.uvprojx 工程,示例工程包含 STM32L073 外设驱动、TencentOS tiny 内核、AT 框架、RHF76 LoRaWAN 模组驱动、LoRaWAN 示例案例。
\examples\LoRaWAN\lora_demo.c
:tos_lora_module_join_otaa("<填写DevEUI>", "<填写AppKey>");
\devices\rhf76_lora\RHF76.h
:#define RHF76_ATCMD_SET_CHANNEL "at+ch=num,0-7\r\n"
由于本示例中计划使用80 - 87信道,因此调整为:
#define RHF76_ATCMD_SET_CHANNEL "at+ch=num,80-87\r\n"
编译并下载工程,节点下载好固件后,会自动重启运行,从串口即可查看设备的运行日志:
当看到串口打印如下日志,即说明 LoRa 节点已经通过网关成功入网:
--->+JOIN: Network joined
--->+JOIN: NetID 000035 DevAddr 6A:40:DA:3F
保持 LoRa 节点和 LoRa 网关 为运行状态,进入【控制台】>【产品开发】>【设备调试】,可查看到设备 “dev001” ,单击【调试】,可进入设备详情页:
进入调试后单击【设备属性】,可查询设备上报到开发平台的最新数据及历史数据。
在串口助手中可以看到:
由于本示例中 LoRa 节点是 LoRaWAN Class A 类设备,这类设备不会立即下发数据,需要在有数据上行后,服务器才会向该设备下行数据。因此在 LoRa 节点上报数据之后,才能查看下发的周期调整命令。