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”即可获取:
参考教程,在本地WindowsPC上使用ChirpStack搭建并启动服务器:LoRa全链路打通教程03 - 在本地Windows上使用ChirpStack搭建私有LoRa服务器。
登录到LoRa服务器后台,即http:<部署服务器的ip地址(windows本机则填localhost)>:8080
:
点击 “Network-servers”界面,点击 ADD,添加一个通用网络服务器:
Network-server name
:网络服务器名称;Network-server server
:网络服务器ip和端口;在Service-profiles页面点击 Create:
Service-profile name
:服务配置文件名称;Network-server
: 选择上一步添加的网络服务器;Add gateway meta-data
:允许NS将网关元数据发送给AS,创建完成之后如图:
在Device-profiles页面点击 Create:
填写如下配置:
Device-profile name
:设备配置文件名称;Network-server
:选择之前创建的网络服务器;LoRaWAN MAC version
:选择lorawan协议版本,推荐选择1.0.2
(不能选择1.1.0,该套件不支持);LoRaWAN Regional Parameters revision
:选择A;然后在第二栏中配置节点入网方式,使能 Device supports OTAA:
点击CREATE DEVICE-PROFILE完成创建:
填写如下配置:
Gateway name
:网关名称;Gateway description
:网关描述;Gateway ID
:网关ID,可以在网关输出信息中查看,也可以使用命令AT+EUI
查看;点击CREATE GATEWAY完成创建:
网关实物具体配置方法参考博客:LoRa全链路打通教程01 - LoRa网关配置查看和修改方法详解(以ST P-NUCLEO-LRWAN3 套件为例)。
接下来只讲述在本实验中的配置过程:
lora服务器ip地址为windows PC在局域网内的ip,端口为默认的1700:
配置命令如下:
AT+PKTFWD=192.168.0.101,1700,1700
搭建lora服务器时设置的频段是CN470_510(在chirpstack-network-server.toml
文件中):
AT+CH=CN470
AT+LOG=ON
AT+RESET
在Applications页面点击CREATE:
填写如下配置:
Application name
:应用名称;Application description
:应用描述;Service-profile
:选择之前添加的服务配置文件;点击CREATE APPLICATION 创建应用:
点击刚刚创建的应用,进入该应用的管理页面:
点击CREATE创建一个节点设备,配置如下:
Device name
:设备名称;Device description
:设备描述;Device EUI
:设备EUI;Device-profile
:选择之前添加的设备配置文件;其中设备EUI可以通过向lora节点模组发送AT命令AT+ID
查看;
创建之后如图:
接着系统会自动跳入到KEYS(OTAA)页面,要求填入app key和Gen Application key
,目前app key比较重要,用来真实lora节点设备和平台对接,所以点击按钮随机生成一个即可,Gen Application key用不到,保持和app key一样即可:
记录一下生成的值:
app key:B358DE504C20E7878CB44DD3479015E8
Gen Application key:B358DE504C20E7878CB44DD3479015E8
使用USB转串口直接连接lora节点模组,使用串口助手发送AT命令交互,波特率通常为9600,如果没有独立的lora节点模组,可以跳过此步骤。
AT+ID //查询命令
AT+ID="deveui","8CF9572000004DE8" //设置命令
AT+DR //查询命令
AT+DR=CN470 //设置命令
AT+CH //查看当前所有通道信息
at+ch=num,80-87 //设置使用80-87通道,即486.3~487.7MHz
at+adr=off //关闭ADR
AT+MODE=LWOTAA //开启OTAA
AT+KEY="appkey",<之前在平台设置的app key,不用加引号>
AT+JOIN
lora通信速率有限,不发送json数据,直接发送二进制数据,所以要设置编解码插件进行数据解析,在json数据和二进制数据之间进行转换。
进入到之前添加的设备配置文件中,如图,选择CODEC
界面,Payload codec
选择自定义JavaScript代码:
其中function Decode(fPort, bytes)
是设置上报数据解析,编写如下函数:
// Decode decodes an array of bytes into an object.
// - fPort contains the LoRaWAN fPort number
// - bytes is an array of bytes, e.g. [225, 230, 255, 0]
// The function must return an object, e.g. {"temperature": 22.5}
function Decode(fPort, bytes) {
var data = {};
data.temperature = bytes[0];
data.humidity = bytes[1];
data.period = bytes[2] | (bytes[3] << 8);
return data;
}
其中function Encode(fPort, obj)
是下发命令解析,编写如下函数:
{
"params": {
"period": 15
}
}
在节点中使用AT命令发送数据:
AT+CMSGHEX="1F220A00"
点击可以查看具体信息,在最后可以看到解析出的温湿度数据:
接着测试下发数据:
注意:由于本示例中 LoRa 节点是 LoRaWAN Class A 类设备,这类设备不会立即下发数据,需要在有数据上行后,服务器才会向该设备下行数据。因此在 LoRa 节点上报数据之后,才能查看下发的周期调整命令。
所以在串口中再次上报一次数据:
可以看到比之前多了一条数据,这条数据就是刚刚创建的下发命令。
在 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 000000 DevAddr 00:78:55:79
和之前一样,设置编解码插件,查看节点上报数据:
至此,lora对接私有lora服务器实战完成。