板卡评测 | 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开发浅尝——纸上得来终觉浅,绝知此事要躬行


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

热门文章

  1. 【青年夜校】河口公益课堂第一课~快来报名吧2024-04-29
  2. 男不听七友女不听钟无艳为什么(男不听七友女不听钟无艳一曲电灯胆男女皆阵亡)2024-04-29
  3. 港股午评:恒生指数涨1.29%,内房股、CXO概念股领涨,融创中国涨超23%,万科企业涨超16%2024-04-29
  4. 佳兆业集团:清盘呈请的聆讯延后至5月27日2024-04-29
  5. 温氏股份:3月份公司单头肉猪基本实现盈亏平衡2024-04-29
  6. 离职多久可以提取公积金上海(离职多久可以提取公积金上海)2024-04-29
  7. 点的拼音组词(点的拼音组词结构)2024-04-29
  8. 邀请函 | 大湾区真空科技与应用集聚发展中心2024-04-29
  9. 人生如雾亦如梦天山童姥(人生如梦亦如雾什么意思)2024-04-29
  10. 港股房地产股延续涨势,融创中国涨近25%2024-04-29
  11. 恒生指数、恒生科技指数均涨超2%2024-04-29
  12. 创业板指涨幅扩大至4%2024-04-29
  13. 财信证券:以旧换新方案落地,催化家电需求释放2024-04-29
  14. 上证指数涨幅扩大至1%2024-04-29
  15. A股午评:创业板指大涨3.6%,房地产服务、房地产开发概念股领涨,万科A强势封板2024-04-29
  16. 乳酸菌素片的作用和功效吃多久(乳酸菌素片的作用便秘)2024-04-29
  17. 午间涨跌停分析:106只涨停股,25只跌停股,南国置业3连板,太平洋、国盛金控2连板2024-04-29
  18. 保力新收深交所年报问询函,被要求说明是否存在虚构交易事项、虚构收入和应收账款的情形2024-04-29
  19. 4月29日截至11时48分,南向资金净流入超50亿港元2024-04-29
  20. 海力风电收深交所年报问询函,被要求说明报告期内新增导管架业务的原因2024-04-29
自媒体 微信号:ii77 扫描二维码关注公众号
爱八卦,爱爆料。

小编推荐

  1. 1 Leap Motion最新概念视频:展示VR/AR融合空间

    Esther| 撰文 AR与VR技术需要的沉浸式计算在不断变化,只精通AR或VR一项技术现在看来还是不够的。 近日,Leap Motion公开展示了两段视频,展望了在不久的未来实现出AR与VR的无缝结合的

  2. 2 专访微软总裁:依赖广告盈利会给数据保护带来挑战

    微软公司总裁施博德表示,当下已是AI的“引爆点”,要关注AI对人类工作的影响;2018年的世界比七八年前更为复杂,新地缘政治是科技界挑战 记者/叶展旗 “如果一家公司几乎所有收

  3. 3 中国联通成电信大数据项目唯一采购来源 他俩啥时候好上了?

    7月11日,中国电信云公司发布了2018年联通大数据风险防控类产品采购项目单一来源公告。意想不到的是,中国联通却成为此次的唯一供货方,中国联通旗下的联通大数据提供项目所需

  4. 4 存储芯片为什么这么重要?大国崛起还得靠它

    存储芯片作为半导体元器件中不可或缺的组成部分,有着非常广泛的应用,在内存、消费电子、智能终端等领域均有运用。随着大数据、云计算、物联网等发展,其在整个产业链中扮

  5. 5 多种云服务模式下Kubernetes的最佳实践

    “ 本文讨论在多种云服务的模式下,成功部署和运行 Kubernetes 群集的关键操作难点与最佳实践。 ‍ 根据 2018 年云计算状况报告显示:如今 81% 的企业都使用了多种云服务的模式,他们

  6. 6 光谱扫描激光雷达为大规模部署自动驾驶铺路

    据外媒报道,Baraja公司近日公开发布了其光谱扫描激光雷达(Spectrum-Scan LiDAR)。光谱扫描采用类似棱镜的光学系统以及不同波长的光线,为自动驾驶车辆创造了“超强的眼睛”,为其

  7. 7 为什么定制SoC芯片越来越容易?

    近日,在一年一度的Arm TechCon大会上,Arm市场营销资深副总裁Ian Smythe宣布,截止2017年12月,基于Cortex-M3和Cortex-M0的SoC出货量达280亿。 System on Chip,简称Soc,也即片上系统。业内普遍将

  8. 8 安防大数据不只“数据大” 还有广阔应用市场

    日前,2018浙江省大数据产业峰会暨浙江省大数据科技协会一届二次会员大会上,工信部信息化和软件服务业司软件产业处处长傅永宝在致辞中表示“ 大数据是信息化发展新阶段的重要

  9. 9 安卓系统太火爆又要让谷歌大出血了

    开源免费使用的安卓操作系统让谷歌继续巩固搜索地位,虽然免费使用但制造商却需要遵守谷歌的相关条款。 根据协议制造商在预装安卓系统时需连同预装谷歌系列应用,包括谷歌搜

  10. 10 中移研究院年度采购GPU 这家公司能否再度中标?

    更多资讯可登录运营商世界网(telworld.com.cn),也可关注微信公众号tel_world 近日,中国移动研究院发布了2018-2019GPU服务器集采比选公告。 公告显示,此次采购的内容为一年期的GPU服务

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

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