LoRa全链路打通教程02 - LoRa温湿度传感器对接腾讯云IoT Explorer实战(以ST P-NUCLEO-LRWAN3 套件为例)

1. ST P-NUCLEO-LRWAN3 套件

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”即可获取:

=

2. 创建云端LoRa设备

参考教程:LoRa 温湿度传感器接入指引

创建项目

登录 物联网开发平台控制台,选择【新建项目】,在新建项目页面,填写项目基本信息后,单击【保存】。

创建产品

项目新建成功后,即可新建产品,进入该项目的产品列表页面,单击【新建产品】,在新建产品页面,填写产品基本信息后,单击【保存】:

创建数据模板

单击产品名称,进入产品配置页,在【自定义功能】配置项下,单击【新建功能】,自定义产品功能:

配置 LoRaWAN 参数

在设备开发页面中,按需调整 LoRaWAN 参数配置,本示例中使用默认的 OTAA 配置:

配置设备数据解析

在设备开发页面中,按需调整设备数据解析。由于 LoRa 类资源有限设备不适合直接传输 JSON 格式数据,使用“设备数据解析”可以将设备原始数据转化为产品 JSON 数据

设备数据协议

在本示例中,设备上行数据共4字节:

  • 第1字节:温度。
  • 第2字节:相对湿度。
  • 第3、4字节:表示上报周期(单位秒)。
  • 设备下行数据为2字节:上报周期(单位秒)。

数据解析脚本

上行数据解析的脚本主函数为 RawToProtocol,其带有 fPort、bytes 两个入参:

  • fPort:设备上报的 LoRaWAN 协议数据的 FPort 字段。
  • bytes:设备上报的 LoRaWAN 协议数据的 FRMPayload 字段。
  • 脚本主函数的出参为产品数据模版协议格式的对象。

在上行数据解析部分,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个字节的数组:

  • 第1字节:下发给设备的 LoRaWAN 协议数据的 FPort 字段。
  • 第2字节:bytes 为下发给设备的 LoRaWAN 协议数据的 MType(0表示 Unconfirmed Data Down,1表示 Confirmed Data Down)。
  • 第3字节:开始为下发给设备的 LoRaWAN 协议数据的 FRMPayload 字段。

在下行数据解析部分,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 节点开发板背面贴纸上获取:

3. 云端添加LoRa网关

登录 物联网开发平台控制台,选择上文 “控制台操作 LoRa 节点” 中对应的项目。

在左侧工具列表中,选择【服务中心】>【LoRa 网关管理】。进入 LoRa 网关管理页面,选择【添加网关】:

在新建网关页面,填写网关基本信息:

  • 网关名称:本示例中填写 GW_Mculover666;
  • GwEUI:为网关唯一 ID。本例中根据 ST NUCLEO LoRa GW 背部的 MAC 地址,将6字节 MAC 地址的中间补足 0xffff;

4. 配置LoRa 网关对接服务器和频段

按照LoRa全链路打通教程01 - LoRa网关配置查看和修改方法详解(以ST P-NUCLEO-LRWAN3 套件为例)一文中描述的方法进行网关上电和配置查看,按照以下内容进行对接腾讯云配置。

配置服务器地址

腾讯云物联网开发平台的 LoRa 服务器地址(接入域名:loragw.things.qcloud.com,接入端口:1700),命令如下:

AT+PKTFWD=loragw.things.qcloud.com,1700,1700

配置LoRa频段

调整频点信息到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

5. LoRa 节点入网上云

编译下载 LoRaWAN 例程

TencentOS tiny 官方开源仓库 下载源码,进入<TencentOS-tiny\board\NUCLEO_STM32L073RZ\KEIL\lorawan>目录,打开 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 节点上报数据之后,才能查看下发的周期调整命令。

发布了158 篇原创文章 · 获赞 502 · 访问量 20万+

猜你喜欢

转载自blog.csdn.net/Mculover666/article/details/104053447