板卡评测 | LoRaWan开发套件Node开发浅尝——纸上得来终觉浅,绝知此事要躬行

板卡评测 | LoRaWan开发套件Node开发浅尝——纸上得来终觉浅,绝知此事要躬行 [本文来自:www.ii77.com]


[原文来自:www.ii77.com]

在之前的文章我们测试了学蠡科技的LoraWan工业级评估开发套件的硬件部分,这次我们要尝试LoraWan节点模块的软件开发。在开始软件部分之前先解决上一篇结尾中遗留的一个问题。


在上一篇文章的硬件测试中,我们发现网关的发射功率指标低于手册标准,与厂家沟通后厂家说是滤波器有点问题,并发过来一块修改过的网关模块重新进行测试,收到厂家发过来的模块后经对比可见厂家拆掉了笔者在上篇文章结尾部分提到的可能出问题的声表滤波器。下图中左图为新模块,右图为旧模块:


板卡评测 | LoRaWan开发套件Node开发浅尝——纸上得来终觉浅,绝知此事要躬行


换上新模块重新测试网关的发射功率指标,发射功率能到23.5dBm,经过滤波器和测试线缆线损,基本接近规格书中的25dBm。


频谱图测试如下:


板卡评测 | LoRaWan开发套件Node开发浅尝——纸上得来终觉浅,绝知此事要躬行


LoraWan资料情况

开发套件配备了丰富的文档资料和开发例程供大家使用学习。同时配备了开发环境需要的各种软件。文档信息和例程代码见目录树结构:


板卡评测 | LoRaWan开发套件Node开发浅尝——纸上得来终觉浅,绝知此事要躬行
板卡评测 | LoRaWan开发套件Node开发浅尝——纸上得来终觉浅,绝知此事要躬行


Node节点源码分析

附带的资料中,Node节点的集成开发环境使用的是IAR,所以需要提前安装好IAR for ARM集成开发环境。


在分析代码之前,再回顾一下LoraWan的网络结构和节点设备类型。LoraWan采用的是星型拓扑结构,由网络中的网关来转发节点和服务器之间的消息,网关通过IP接入网络服务器。Lora的节点设备分为三种类型,分别是ClassA,ClassB,classC,其各自的特点如下:


ClassA:A类设备允许双向的通信,但是A类设备的接收时机是在A类设备主动上传数据之后会等待两个时间接收网关的数据,如果在这两个时间内没有数据发给它,那么它就会关闭射频模块以减少能源消耗,A类设备的特点就是平时可以保持休眠降低能源消耗,只有在有数据需要上传的时候才激活射频单元进行数据传输,但A类设备的明显缺点就是下行延迟不确定,必须要节点有上行数据,下行的数据才能下发到节点。


ClassB:B类设备除了有A类设备的特征,还有一个周期性打开接收的时间窗口,以周期性的检查网关是否有数据要下发给自己。所以在A类设备的基础上,B类设备需要与网关的时间同步,服务器也需要知道B类设备什么时候会打开接收器从而在恰当的时间将数据通过网关下发到节点上,通过时间周期的调整可以将下行数据的延迟和能源的消耗调整到一个合理的位置。


ClassC:C类设备拥有更长的接收时间,除了发送的时候,C类设备一直都是打开接收窗口的,C类设备的能量消耗也是最高的,但是他具有最低的通信延迟。


这三种类型的节点设备具有三种不同的行为模式,Semtech提供的lorawan节点库包含了实现这三种模式的代码,代码的结构如下:


板卡评测 | LoRaWan开发套件Node开发浅尝——纸上得来终觉浅,绝知此事要躬行


下面使用套件中LPMD002型号测试代码,文件路径如下:


板卡评测 | LoRaWan开发套件Node开发浅尝——纸上得来终觉浅,绝知此事要躬行


解压文件LPMD002-SDK-V2.00。在解压出来的目录的IAR目录中找到loranode.eww文件,用IAR打开,打开后先编译一下,一来是检查开发环境,二来让IDE生成符号表方便代码阅读时候的跳转。


源码结构和功能描述如下:


板卡评测 | LoRaWan开发套件Node开发浅尝——纸上得来终觉浅,绝知此事要躬行


APP:传感器节点最顶层的行为描述,传感器A类,B类还是C类的行为逻辑也在这个文件中,在源码目录里,APP目录下有三个文件夹,分别是ClassA,ClassB和ClassC,每个文件夹下都有一个main.c文件和Commissioning.h文件,Commissioning.h存放的是应用层相关的配置参数宏。


Broads:Broads目录下存放的是和硬件板子相关的文件,包括了MCU和sensorNode两个子目录,MCU中配置了系统中断程序的入口,SensorNode中存放了传感器节点硬件相关的驱动程序。


Mac:mac目录中是lorawan MAC层的实现代码,一般不需要修改。


Radio:Radio目录是射频芯片SX1278的驱动程序,里面封装了芯片基本操作方法和数据收发。


System:目录中主要是一些中间组件实现方法,例如加密算法,fifo队列,GPIO操作封装,定时器,串口收发等。


Output:编译输出文件。


关键参数和宏定义

前面说到在APP目录下的Commissioning.h中保存了一些应用层参数和配置宏,现在就来看看其中的内容。


#define OVER_THE_AIR_ACTIVATION

定义节点的入网方式,lorawan节点有两种入网方式,一种是OTAA,另一种是ABP,ABP的加密密钥和地址是预先分配的,节点无需入网动作可以直接发数据,而OTAA是在入网的时候动态分配的,其安全性更高,但代价就是实现复杂,入网需要的交互次数更多。


#define LORAWAN_PUBLIC_NETWORK

定义lorawan的网络是公开网络还是私有网络。


#define LORAWAN_DEVICE_EUI

定义设备的唯一标识码。


#define LORAWAN_APPLICATION_EUI

定义了应用的唯一标识码,一个服务器上可能有多个应用,用于服务器区分该节点是属于哪个应用的。


#define LORAWAN_APPLICATION_KEY

应用的加密密钥

#define LORAWAN_NETWORK_ID

定义要加入的网络的ID

#define LORAWAN_DEVICE_ADDRESS

定义设备的网络地址,如果是OTAA入网,网络地址由网关分配节点自动获取,如果是ABP方式,因为没有入网动作则需要节点配置地址信息。


#define LORAWAN_NWKSKEY

定义lorawan网络数据的加密密钥,如果是otaa方式,密码入网的时候会协商,如果是ABP方式,则需要配置。


#define LORAWAN_APPSKEY

定义lorawan应用数据的加密密钥,如果是otaa方式,密码入网的时候会协商,如果是ABP方式,则需要配置。


以上是应用相关的参数,另一个值得关注的就是lorwan底层相关的参数,这些参数在LoRaMac-definitions.h和LoRaMac.h中,由于参数太多这里只说几个比较重要的:


#define RECEIVE_DELAY1

#define RECEIVE_DELAY2

这两个delay时间就是前面说到的classA和B设备的两个接收时间长度。


程序主流程分析

下面分析代码主流程,打开源代码main.c,找到main函数,可以看到如下的结构:


while( 1 )

{

switch( DeviceState )

{

case DEVICE_STATE_INIT:

{

//执行初始化,配置lora相关参数,然后将状态机状态置为DEVICE_STATE_JOIN

break;

}

case DEVICE_STATE_JOIN:

{  //执行join操作,成功后将状态置为DEVICE_STATE_SEND

break;

}

case DEVICE_STATE_SEND:

{  //发送操作,完成后将状态置为DEVICE_STATE_CYCLE

break;

}

case DEVICE_STATE_CYCLE:

{

//设置定时器唤醒时间,将状态置为DEVICE_STATE_SLEEP,设备休眠

break;

}

case DEVICE_STATE_SLEEP:

{

//上面将设备置为休眠了,等执行到这里的时候,说明休眠被唤醒,执行唤醒流程,初始化在休眠的时候复位的外设。

break;

}

default:

{

//异常状态,复位

break;

}

}

}


根据上面摘取简化的代码段,我们可以看到,在节点程序的主循环中使用了状态机的方式,其中DeviceState变量记录了设备的状态,初始化状态为DEVICE_STATE_INIT,于是执行到while(1)循环中,就会执行初始化的代码,初始化完成后便进入发送状态检查是否有待发送数据,如无数据则进入待机模式,设备设置唤醒定时器然后休眠降低功耗,等设备唤醒后采集传感器数据,然后将状态改为发送状态,这样不停循环,就实现了设备的待机-唤醒发送数据-待机的行为。


在前一篇的测试中,我们使用的是APB方式和网关进行通信,也就是不用入网协商的方式,本次我们使用OATT方式入网:


1、修改配置文件Commissioning.h,将OVER_THE_AIR_ACTIVATION宏设置为1,使用OATT方式;


2、修改LORAWAN_NETWORK_ID宏,将网络ID设置为0X123456,这个网络ID与网关上设置的网络ID相对应;


3、在main.c中上面讲到的状态机主循环里,将定时器唤醒时间设置成5秒,也就是每隔5秒唤醒一次发送数据;


4、记录下配置文件中设置的DEVEUI,APPEUI和APPKEY,这分别是节点的唯一识别的ID号,设备所对应的应用的ID号和应用自己的加密密码,网络加密密码因为使用的是自动协商方式,在入网的时候会自己协商,所以在这里就不用设置了;


5、编译,确认无错误,先打开串口工具选择测试板对应的USB串口号,再连接下载器下载程序。


板卡评测 | LoRaWan开发套件Node开发浅尝——纸上得来终觉浅,绝知此事要躬行
板卡评测 | LoRaWan开发套件Node开发浅尝——纸上得来终觉浅,绝知此事要躬行


下载完成后可以在串口上看到在串口初始化完成的时候输出的“Test Lorawa”字符串,并且下面还有lorawan程序输出的调试信息“+JOIN:STARTING...”,这表示程序已经正常运行,节点尝试加入网络,但没有返回成功,因为我们还没有在网关中添加这个设备的DEVEUI,网关认为这是一个非法设备,于是对其join请求不响应。


接下来在网关中添加节点设备,在浏览器中输入http://10.10.1.105:8080,这里10.10.1.105是笔者网络环境中网关的IP地址,根据自己的环境这个地方需要修改,可进入路由器中查看。输入地址后键入用户名admin密码admin便进入网关管理页面,点击侧面菜单的devices,再点击左上角的create开始创建一个设备。


板卡评测 | LoRaWan开发套件Node开发浅尝——纸上得来终觉浅,绝知此事要躬行
板卡评测 | LoRaWan开发套件Node开发浅尝——纸上得来终觉浅,绝知此事要躬行


输入在Commissioning.h中定义的DEVEUI,APPEUI和APPKEY,并选择使用的频段为470-510Mhz。


重新启动模块,可以看到模块在显示“+JOIN:STARTING...”后一小会,就会显示“+JOIN:DONE”,这时就表示模块已经成功通过OTAA方式入网了,在join成功5秒后,模块发出一个数据包,并且收到网关的ack包,到这里数据就已经通了。


板卡评测 | LoRaWan开发套件Node开发浅尝——纸上得来终觉浅,绝知此事要躬行


点进网关的devices选项卡,可以看到我们刚才添加的设备的node字段填上了AD922104,同时在node选项卡中可以看到除了上次我们测试添加的地址为88888888的节点,又多出来一个AD922104,这个地址就是我们刚才添加的设备通过OTAA方式自动协商获得的设备地址。


板卡评测 | LoRaWan开发套件Node开发浅尝——纸上得来终觉浅,绝知此事要躬行
板卡评测 | LoRaWan开发套件Node开发浅尝——纸上得来终觉浅,绝知此事要躬行


在Received Frames选项卡中可以看到网关收到的数据记录,我们可以看到网关收到了节点地址为AD922104设备发出的数据包,数据为

31323334353637383930616263646566,这是16进制的0x31 0x32 0x33 0x 34 0x35 0x36 0x37 0x38 0x39 0x30 0x61 0x62 0x63 0x64 0x65 0x66,这正是我们在程序中定义的字符串“1234567890abcdef”,到这里节点程序就和网关跑通了。


板卡评测 | LoRaWan开发套件Node开发浅尝——纸上得来终觉浅,绝知此事要躬行
板卡评测 | LoRaWan开发套件Node开发浅尝——纸上得来终觉浅,绝知此事要躬行


至此本次测试完毕,开发套件提供了丰富的资料资源,能够很方便地进行学习和开发。

自媒体 微信号:ii77 扫描二维码关注公众号
爱八卦,爱爆料。

小编推荐

  1. 1 处方药标志大全图片(处方药品标识图)

    大家好,小乐今天来为大家解答处方药标志大全图片以下问题,处方药品标识图很多人还不知道,现在让我们一起来看看吧!1、处方药和非处方药的

  2. 2 男生和女生一起裸睡(男生和女生一起裸睡)

    大家好,小乐今天来为大家解答男生和女生一起裸睡以下问题,男生和女生一起裸睡很多人还不知道,现在让我们一起来看看吧!1、如果男生女生已

  3. 3 帝王妃(盛世帝王妃)

    大家好,小美今天来为大家解答帝王妃以下问题,盛世帝王妃很多人还不知道,现在让我们一起来看看吧!1、建兰帝王妃不上花是因为培养时出了问

  4. 4 外婆的澎湖湾简谱(外婆的澎湖湾歌词)

    大家好,小豪今天来为大家解答外婆的澎湖湾简谱以下问题,外婆的澎湖湾歌词很多人还不知道,现在让我们一起来看看吧!1、我的 【简谱】外婆的

  5. 5 莱商银行手机银行官网下载新版(莱商银行官方下载)

    大家好,小伟今天来为大家解答莱商银行手机银行官网下载新版以下问题,莱商银行官方下载很多人还不知道,现在让我们一起来看看吧!1、一、

  6. 6 夜航船|所有相遇,都是在成全你的人生

    没有无缘无故的碰见,所有相遇,都是在雄厚你的履历。人这平生,会碰到无数的人。有人带给你打动,有人带给你平坦,还有人教会你成长……所

  7. 7 4月1日起,全市执行!

    点击上方 存眷我们 点星标★不迷路《托育机构质量评估尺度》4月1日起施行国度卫生健康委发布《托育机构质量评估尺度》,自2024年4月1日起施行。

  8. 8 缴税退款操作流程(交税退税怎么个流程)

    大家好,小丽今天来为大家解答缴税退款操作流程以下问题,交税退税怎么个流程很多人还不知道,现在让我们一起来看看吧!1、退款流程一般包括

本文内容来自网友供稿,如有信息侵犯了您的权益,请联系反馈核实

Copyright 2024.爱妻自媒体,让大家了解更多图文资讯!