LoRaWAN学习心得
1.学习历程
在上面学习了Linux中级编程的基础上,开始对硬件即将有所交集,曾经学习Linux可能只晓得个别传感的数据储存在那个文件夹下,读取相应的数据就完事,大部份是应用层方面的实现,而不晓得这种传感的数据具体是如何来的。学习了stm32单片机以后,与硬件打交道,离底层又更近了一步。
其实开始学习stm32的时侯,只是照着一些资料依葫芦画瓢,并没有真正理解实现的原理。只晓得跟随资料一顿操作过后,假如烧写程序步入开发板,就能实现相应的功能就万事大吉。这样的学习只能解决有教程的问题,而假如想要独立实现某功能,会很困难。
前面在学习了流水灯,蜂鸣器,键盘,声音传感,光强传感等基本期间的使用以后,逐步步入一些合同的学习,例如一线合同的DHT11温温度传感,DS1818BB2020气温传感的工作原理;I2C合同SHT30温温度传感的工作原理,OLED显示屏的基本使用;并口的输出,使用esp8266联接WIFI借助MQTT合同实现温温度上报云平台,了解NB-IoT基本原理等;到后来学习SPI合同,借助SX1278LoRa模块实现两个模块透传,实现LoRaWAN网路结构的温温度上报。虽然对于像单片机这些与硬件打交道来说红旗linux6.0教程,底层的原理都是死的,无非就是引脚的配置和使能,使用什么合同红旗linux下载,告诉CPU这个“大蜘蛛”,如今要哪几个脚去干哪些,其他的过程都差不太多,其实很重要的一点是原理图和芯片datasheet的了解。如同LoRaWAN的学习,虽然并不是要让你去写整个LoRaWAN的体系结构,从寄存器开始讲到应用层linux串口驱动移植,而是要学会模块驱动的移植,合同栈的移植,以及实现整个网路体系中须要终端节点干的事,例如数据的采集,数据的发送以及接收等基本功能,也不须要自己去写底层驱动,操作寄存器等,重要的是理解每一环的作用和实现的原理。
2.关于LoRaWAN
LoRaWan网路构架
右图是LoRa以及LoRaWAN在通用的物联网构架中的位置:
•LoRa:是无线接入技术,在物联网构架中,LoRa处于物联网的无线终端感知层和网路传输层。因而LoRa本身并不是物联网的全部,只是物联网的一部份。
•LoRa终端:通过传感采集物体的信息,并通过LoRa无线空口技术,把数据传输给LoRa无线基站。
•LoRa无线基站:提供对LoRa终端的无线接入和凝聚,LoRa无线基站通过以太局域网或2G/4G/5G的公共联通通讯网,联接到LoRaWAN广域网路服务器。
•LoRaWAN服务器:可以管理多个LoRa无线基站,同时充当LoRa终端联接物联网云平台的网段。
右图是LoRa联盟推荐的LoRaWAN网路构架:
•LoRaNode:LoRa终端节点
•Concentrator:实现对LoRa终端节点提供接入和凝聚功能的LoRa基站(网段)。
•NetworkServer:LoRa的核心网,用于管理LoRa网路中所有的LoRa节点。
•ApplicationServer:由不同业务领域的服务器组成,并通过Web或手机接入的形式向用户提供业务服务。
与通用物联网构架的区别是,在此构架中,没有一个显式的、支持各类物联网无线接入的、通用的物联网云平台层。该云平台可以从ApplicationServer中分离下来,处于NetworkServer和ApplicationServer之间。可以与NetworkServer一起布署。
其实目前我学习的主要是LoRaWAN节点的开发,主要负责终端节点采集数据以及数据的发送和接收,主要把握A类和C类节点的开发使用。虽然这两类节点的差异并不是很大,虽然C类是在A类的基础上实现的,只是C类在数据接收方面更灵敏,而且帧率更大。
3.学习心得
从刚开始了解SPI合同,了解SPI合同须要什么引脚,各自的功能,SPI工作的四种模式,SPI主设备是如何和从设备进行数据交换,通过短接MISO和MOSI引脚进行SPI的回环测试等等。之后是SX1278模块的驱动移植,通过在semtech官网下载对应模块的驱动文件,对照着官方的介绍以及查找的资料进行驱动的移植,其实SX1278模块和MCU之间的连通主要用到的是SPI合同,只不过不仅SPI的四根线以外还有VCC,GND,DIO0和RESET,须要在移植的驱动文件里对着自己单片机配置的相应引脚进行修改,对于不须要用到的文件或则配置只须要删掉和注释就行了。很重要的是要查找资料,更改LoRa模块的发射频度等一些配置参数,由于在不同的地区那些参数都不一样,这一点在LoRaWAN合同栈的移植过程中也很重要,最后须要在主函数里调用发射/接收函数,实现自己想要的功能即可。其实一次就成功的机率很小,会有好多看似不重要的参数决定着本质上的问题,例如说SX1278的SPI支持最大速度等。
在实现LoRa两个模块消息点对点的通讯以后,开始对LoRaWAN的合同栈进行移植。此次可比SX1278驱动移植困难更多,由于即使官方有合同栈移植的说明文件,而且好多自己单片机用不到的文件或则函数须要更改,不然一编译满屏的报错,须要对着一个个错误进行更改,这个有一定的工作量,首先须要实现ping-pong固定频度测试,就相当于升级版的LoRa模块互传,只不过两个模块都可以作为主(从)设备,且收发频度固定。
然后进行LoRa模块节点与网段通讯,首先须要了解节点的类型,以及各类节点的工作模式和原理,之后是节点入网的激活,数据在收发过程中,关于地区,频点,信道等方面的参数都须要自己去查找资料进行更改,数据从应用层到化学层的封装过程须要了解,数据的加密方法等,尽管关于合同栈方面不须要自己写好多的代码,而且须要自己查看源码,查找相应资料进行理解。好多东西给你封装好了不一定是好事,即使使用便捷了,而且对于学习来说,更须要花时间和精力去挖掘底层的原理。
在LoRaWAN入网,信道选择,收发信息等过程中,运用了好多网路和通讯有关的知识,例如说OTAA/ABP激活形式,发送时进行信道冲突避开的ALOHA合同算法(duty-cycle),ADR手动优化传输速度,CAD检查前导码机制,AES-128加密算法,SF载波因子,和TCP/IP合同类似的MAC/PHY数据包分层封装/解封的机制等等,想要理解整个LoRaWAN网路结构linux串口驱动移植,不仅了解合同栈函数的调用实现相应功能,配置相应的参数以外,关于通讯方面也须要深入研究,非常是数据在发送过程中的调制,译码,加密,如何让数据收发效率最高,可靠性最高,都是须要研究的问题。
整个LoRaWAN网路构架还只是学习了部份,且正在继续挖掘深层原理中,仍需努力!