LoRaWAN学习心得
1.学习历程
在前面学习了Linux高级编程的基础上,开始对硬件正式有所交集,以前学习Linux可能只知道某些传感器的数据存放在哪个文件夹下,读取相应的数据就完事,大部分是应用层方面的实现,而不知道这些传感器的数据具体是怎么来的。学习了stm32单片机之后,与硬件打交道,离底层又更近了一步。
当然开始学习stm32的时候,只是照着一些资料依葫芦画瓢,并没有真正理解实现的原理。只知道跟着资料一顿操作之后,如果烧录程序进入开发板,能够实现相应的功能就万事大吉。这样的学习只能解决有教程的问题,而如果想要独立实现某功能,会很困难。
后面在学习了流水灯,蜂鸣器,按键,声音传感器,光强传感器等基本期间的使用之后,逐渐进入一些协议的学习,比如一线协议的DHT11温湿度传感器,DS18B20温度传感器的工作原理;I2C协议SHT30温湿度传感器的工作原理,OLED显示屏的基本使用;串口的输出,使用esp8266连接WIFI利用MQTT协议实现温湿度上报云平台,了解NB-IoT基本原理等;到后来学习SPI协议,利用SX1278LoRa模块实现两个模块透传,实现LoRaWAN网络结构的温湿度上报。其实对于像单片机这种与硬件打交道来说,底层的原理都是死的,无非就是引脚的配置和使能,使用哪些协议,告诉CPU这个“大蜘蛛”,现在要哪几个脚去干什么,其他的过程都差不太多,当然很重要的一点是原理图和芯片datasheet的了解。就像LoRaWAN的学习,其实并不是要让你去写整个LoRaWAN的体系结构,从寄存器开始写到应用层,而是要学会模块驱动的移植,协议栈的移植,以及实现整个网络体系中需要终端节点干的事,比如数据的采集,数据的发送以及接收等基本功能,也不需要自己去写底层驱动,操作寄存器等,重要的是理解每一环的作用和实现的原理。
2.关于LoRaWAN
LoRaWan 网络架构 下图是 LoRa以及LoRaWAN在通用的物联网架构中的位置:
•LoRa:是无线接入技术,在物联网架构中,LoRa 处于物联网的无线终端感知层和网络传输层。因此 LoRa 本身并不是物联网的全部,只是物联网的一部分。
•LoRa 终端:通过传感器采集物体的信息,并通过 LoRa 无线空口技术,把数据传输给 LoRa 无线基站。
•LoRa 无线基站:提供对 LoRa 终端的无线接入和汇聚,LoRa 无线基站通过以太局域网或 2G/4G/5G 的公共移动通信网,连接到 LoRaWAN 广域网络服务器。
•LoRaWAN 服务器:可以管理多个 LoRa 无线基站,同时充当 LoRa 终端连接物联网云平台的网关。
下图是 LoRa 联盟推荐的 LoRaWAN网络架构:
•LoRa Node:LoRa 终端节点
•Concentrator:实现对 LoRa 终端节点提供接入和汇聚功能的 LoRa 基站(网关)。
•Network Server:LoRa 的核心网,用于管理 LoRa 网络中所有的 LoRa 节点。
•Application Server:由不同业务领域的服务器组成,并通过 Web 或手机接入的方式向用户提供业务服务。
与通用物联网架构的区别是,在此架构中,没有一个显式的、支持各种物联网无线接入的、通用的物联网云平台层。该云平台可以从 ApplicationServer 中分离出来,处于 Network Server 和 Application Server 之间。可以与 Network Server 一起部署。
当然目前我学习的主要是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网络结构,除了了解协议栈函数的调用实现相应功能,配置相应的参数以外,关于通信方面也需要深入研究,特别是数据在发送过程中的调制,解调,加密,怎样让数据收发效率最高,可靠性最高,都是需要研究的问题。
整个LoRaWAN网络架构还只是学习了部分,且正在继续挖掘深层原理中,仍需努力!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/179661.html原文链接:https://javaforall.cn