前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【LoRaWAN活动】HT-M00L网关+STM32WL node评估板

【LoRaWAN活动】HT-M00L网关+STM32WL node评估板

原创
作者头像
soffio小宇
修改2021-05-17 11:12:12
2K2
修改2021-05-17 11:12:12
举报
文章被收录于专栏:腾讯云IoT

腾讯云IoT继上次的点亮LoRaWAN节点后的又一大好玩的活动

看着7.9的单价,为了牛年的鹅,果断下单一个LoRaWAN网关

主要是为了弥补一下上次买了node,但成都却不像深圳遍地腾讯网关的痛

1 配置小网关联网

首先拿出这个小网关,进行配网工作

1、 保持"USR"键处于按下状态,单次按下"RST"并松开,待RGB灯变成黄绿色后,松开"USR"键。用手机搜索一个名为"M00L_XXXX"的WiFi,密码heltec.org。

2、 浏览器进入192.168.4.1配置网关,大部分内容保持默认即可,给他找一个能够使用的WiFi

3、 点击提交即可

【参数解析】

WiFi名称 -- HT-M00L网关将接入的WiFi名称,配置提交后,将通过此WiFi连接腾讯云;

WiFi密码 -- HT-M00L网关将接入的WiFi密码;

信道频率Hz -- 该网关LoRa将要监听的频率,该频率必须与服务器、节点发射频率相对应;(默认是CN470的频率)

最小扩频因子(MIN SF:7~12) -- LoRa通信的最小扩频因子;

最大扩频因子(MAX SF:MIN SF ~12) -- LoRa通信的最大扩频因子,该值必须大于等于“最小扩频因子”;

网关ID -- 网关的唯一序列号,根据硬件Mac地址自动产生,已绑定;(很重要要考的!)

服务器地址 -- 已绑定腾讯云;

端口号 -- HT-M00L网关与LoRa服务器通信的端口,一般默认1700;

时区 -- 网关所在位置的时区。

2 在腾讯云物联网平台注册网关

1、 登录物联网开发平台,注册新项目

2、 依次找到【网络管理】-【LoRa网关管理】-【用户网关】-【添加网关】

3、 在新建网关页面,填写网关基本信息,其中【网关ID】在上一步配置网关的时候的网页当中。

4、 选择【用户自定义频点】-【添加频点】

5、 因为开发选择的频点是CN470信道,按照TX、RX1、RX2信道频率填写表格。

6、 返回【用户网关】页面,找到刚刚添加的网关,编辑修改频点信息,更改为刚刚自定义的频点

3 配置node节点

拿出上次活动买的STM32WL评估板,在Github仓库中找到对应的程序

【基于TencentOS Tiny EVB_WL开发板完成LoRaWAN应用开发】

TencentOS tiny官方开源仓下载源码,地址为:

https://github.com/Tencent/TencentOS-tiny

进入 < TencentOS-tiny\board\RHF0M0E5_STM32WLE5xx\KEIL\lorawan> 目录,打开TencentOS_tiny.uvprojx工程

基于TencentOS Tiny的WL开发板的业务流程如下:

1. main函数中完成 板级初始化,主要是 board_init函数中初始化好基础外设和LoRa射频及LoRa协议栈;其中MX_LoRaWAN_Init函数会完成LoRaWAN协议的基础配置,比如选择CLASS、配置通道、配置ADR等;

2. main函数中,完成内核初始化、创建主线程入口application_entry,启动内核;

3. application_entry函数中再创建lora_mac_process_task;

4. application_entry函数中调用lw_send函数向LoRa网关和云端上报终端数据。示例中是模拟了3个元数据发送,开发者可以修改发送自己想发送的数据,配合腾讯云IoT平台设计好对应的数据模板即可。

打开commissioning.h文件,修改下面的数据

自己随意定义APP_KEY和EUID的值,一定注意【不能修改长度!!】

**踩坑**

这里要注意,由于这次的HT-M00L网关支持多速率通讯,但是首先要对node进行配置:

1、 根据网关配置页面固定频点

2、 前导码要改成16个symbol

首先对这两个部分进行配置

3.1 配置node频点

由于网关默认设定的是CN470的频点,这部分我们就不修改,直接在app_lorawan.c文件中,找到MX_LoRaWAN_Init(void)函数,修改信道ch的参数,代码如下:

代码语言:javascript
复制
void MX_LoRaWAN_Init(void)
{
 printf("Lora node powered by TencentOS-tiny\r\n"); 
 /* Configure the Lora Stack*/
 lw_init(&LoRaMainCallbacks);
 APP_LOG("APP_VERSION= %02X.%02X.%02X.%02X\r\n", (uint8_t)(__APP_VERSION >> 24), (uint8_t)(__APP_VERSION >> 16), (uint8_t)(__APP_VERSION >> 8), (uint8_t)__APP_VERSION);
 APP_LOG("MAC_VERSION= %02X.%02X.%02X.%02X\r\n", (uint8_t)(__LORA_MAC_VERSION >> 24), (uint8_t)(__LORA_MAC_VERSION >> 16), (uint8_t)(__LORA_MAC_VERSION >> 8), (uint8_t)__LORA_MAC_VERSION);
 /*Class*/
 lw_request_class(CLASS_A);
 /*channel*/   /*!注意下面的ch数组!*/  
 LWChannel_mask_t ch={0x0001,0,0,0,0,0x0000}; 
 lw_current_chmask_set(&ch);
 /*tx dr*/
 lw_config_tx_datarate_set(DR_0);
 /*OTAA*/
  lw_config_otaa_set(LORA_ENABLE);
 /*enable adr*/
 lw_adr_set(LORA_ENABLE);
 /*set retry*/
 lw_confirm_retry_set(10);
 printf("lorawan init ok.\r\n");
}

3.2 修改前导码长度

修改TX的前导码为16个symbol,这部分程序直接固定好的,找了好久才修改成功

(这里要说一下调试技巧,当你不知道这部分代码是否执行的时候,就在他的下一行printf到串口一段文字,看是否能收到这段文字,就知道是否执行了)

找到radio.c文件的下面这个函数

代码语言:javascript
复制
void RadioSetTxConfig( RadioModems_t modem, int8_t power, uint32_t fdev,
 uint32_t bandwidth, uint32_t datarate,
 uint8_t coderate, uint16_t preambleLen,
 bool fixLen, bool crcOn, bool freqHopOn,
 uint8_t hopPeriod, bool iqInverted, uint32_t timeout )

然后找到

代码语言:javascript
复制
 if( ( SubgRf.ModulationParams.Params.LoRa.SpreadingFactor == LORA_SF5 ) ||
 ( SubgRf.ModulationParams.Params.LoRa.SpreadingFactor == LORA_SF6 ) )
 {
   if( preambleLen < 12 )
   {
     SubgRf.PacketParams.Params.LoRa.PreambleLength = 12;
   }
   else
   {
     SubgRf.PacketParams.Params.LoRa.PreambleLength = preambleLen;
    }
 }
 else
 {
   SubgRf.PacketParams.Params.LoRa.PreambleLength = preambleLen;
 }

把最后一个else中的语句更换成

代码语言:javascript
复制
SubgRf.PacketParams.Params.LoRa.PreambleLength = 16; //change to 16

3.3 修改速率

如果要修改入网速率和TX、RX的速率(DR),那么需要修改的地方

对于入网DR,找到lora.c文件的下面一个结构体

代码语言:javascript
复制
static lw_param_t lw_param_init = 
{
 .adr_enable = 0,
 .tx_datarate =DR_0,
 .confirm_retry = 3,
 .enable_public_network = LORAWAN_PUBLIC_NETWORK,
 .active_region = LORAWAN_DEFAULT_ACTIVE_REGION,
 .dev_addr = LORAWAN_DEVICE_ADDRESS
};

修改结构体的第二行即可

另外对于TX和RX的速率,找到RegionCN470.h文件(如果选用其他信道频点的,就找到对应的头文件)

依次修改下列数据

代码语言:javascript
复制
/*!
 * Minimal datarate that can be used by the node
 */
#define CN470_TX_MIN_DATARATE DR_0 
/*!
 * Maximal datarate that can be used by the node
 */
#define CN470_TX_MAX_DATARATE DR_0
/*!
 * Minimal datarate that can be used by the node
 */
#define CN470_RX_MIN_DATARATE DR_0 
/*!
 * Maximal datarate that can be used by the node
 */
#define CN470_RX_MAX_DATARATE DR_0
/*!
 * Default datarate used by the node
 */
#define CN470_DEFAULT_DATARATE DR_0 
/*!
 * Second reception window channel datarate definition.
 */
#define CN470_RX_WND_2_DR DR_0

至此,对于频点、速率和前导码的部分就修改完成了。

4.配置数据物模型

至于上报数据,我们先默认用demo程序中的内容(其实是还没时间折腾其他的参数)

利用评估板采集温度、湿度和采集周期

程序下载进入单片机后,进入下一步骤。

1、 在左侧找到【产品开发】-【新建产品】

2、 通信方式选择LoRaWAN,产品名称自定义

3、 找到【数据模板】,点击导入json,导入下面的json文件

代码语言:javascript
复制
{
 "version": "1.0",
 "profile": {
 "ProductId": "F2G256SY2G",
 "CategoryId": "1"
 },
 "properties": [
 {
 "id": "temperature",
 "name": "温度",
 "desc": "",
 "mode": "r",
  "define": {
 "type": "int",
 "min": "-100",
 "max": "155",
 "start": "0",
 "step": "1",
 "unit": "摄氏度"
 },
 "required": false
 },
 {
 "id": "humidity",
 "name": "湿度",
 "desc": "",
 "mode": "rw",
 "define": {
 "type": "int",
 "min": "0",
 "max": "100",
 "start": "0",
 "step": "1",
 "unit": "%"
 },
 "required": false
 },
 {
 "id": "period",
  "name": "上报周期",
 "desc": "",
 "mode": "rw",
 "define": {
 "type": "int",
 "min": "0",
 "max": "3600",
 "start": "0",
 "step": "1",
 "unit": "秒"
 },
 "required": false
 }
 ],
 "events": [],
 "actions": []
}

4、 在设备开发页面中,按需调整 LoRaWAN 参数配置。

这一步注意,RX的延时、速率(DR)和频点,一定要和node的单片机配置一致!

5、 然后点击【云端解析】页面,对上行数据和下行数据进行一个解析,这里利用的是js语言。

在上行数据解析部分,javascript 示例代码如下:

代码语言: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;
}

在下行数据解析部分,javascript 示例代码如下:

代码语言: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;
}

6、找到【设备调试】页面-点击【新建设备】

这里的DEVEUI和AppKey参数,就是我们刚刚在Keil中写入的参数。

5 调试步骤

上述工作完成后,打开腾讯连连小程序,扫描二维码,打开腾讯连连面板。

腾讯连连小程序远程查看数据
腾讯连连小程序远程查看数据

修改部分数据,继续观察串口助手

串口助手打印node数据
串口助手打印node数据

在设备日志中查看数据交互情况

设备调试日志
设备调试日志

后记

生命在于折腾,这次的网关算是圆了去年买了node后没折腾成功的梦

用了一个晚上+周日一白天的时间

从一开始的全部Timeout到TxDone+RxTimeout

再到无几六瘦的调试

最后全部成功的喜悦

就像是追一个对象终于追到手的感觉

这……或许就是一个自动化小白的成长之路吧

AD时间

有同样感兴趣的可以关注一波

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1 配置小网关联网
    • 【参数解析】
    • 2 在腾讯云物联网平台注册网关
    • 3 配置node节点
      • **踩坑**
        • 3.1 配置node频点
          • 3.2 修改前导码长度
            • 3.3 修改速率
            • 4.配置数据物模型
            • 5 调试步骤
            • 后记
              • AD时间
              相关产品与服务
              物联网开发平台
              腾讯云物联网开发平台(IoT Explorer)是面向智慧生活与产业物联应用的一站式物联网PaaS平台,为各行业用户提供一站式设备智能化服务。平台提供海量设备连接与消息通信能力,基于腾讯连连小程序应用开发能力、音视频能力及AI增值服务,聚合腾讯生态内容能力。提升传统行业设备智能化的效率,降低用户的开发运维成本。
              领券
              问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档