LoRaWAN学习心得
在前面学习Linux在高级编程的基础上,硬件开始正式交叉,以前学过Linux可能只知道某些传感器的数据存储在哪个文件夹下,读取相应的数据,大部分是实现应用层,而不知道这些传感器的数据是如何来的。stm32单片机后,与硬件打交道,离底层又近了一步。
当然,开始学习stm当32岁时,我只是按照一些数据画葫芦,并没有真正理解实现的原则。我只知道,在跟随数据操作后,如果烧录程序进入开发板,可以实现相应的功能,一切都会好起来。这种学习只能解决教程的问题,如果你想独立实现某个功能,它将非常困难。
在学习了流水灯、蜂鸣器、按钮、声传感器、光强传感器等基本期间的使用后,逐渐进入了一些协议的学习,如一线协议DHT11温湿度传感器,DS18B20温度传感器的工作原理;I2C协议SHT30温湿度传感器的工作原理,OLED基本使用显示屏;串口输出,使用esp8266连接WIFI利用MQTT协议实现温湿度报告云平台NB-IoT基本原理等。SPI协议,利用SX1278LoRa模块实现两个模块的传输LoRaWAN报告网络结构的温湿度。其实对于像单片机这样处理硬件的人来说,底层原理是死的,无非是引脚的配置和使能,用什么协议,告诉我CPU这只大蜘蛛,现在要做什么,其他过程都没有太大区别,当然,原理图和芯片非常重要datasheet的了解。就像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 或通过手机接入向用户提供业务服务。
当然,目前我主要学习的是LoRaWAN节点的开发主要负责终端节点的数据收集、数据的发送和接收,主要掌握A类和C类节点的开发和使用。事实上,这两种节点之间的差异并不大。毕竟,C类是在A类的基础上实现的,但C类在数据接收方面更敏感,但功耗更大。
了解从一开始SPI协议,了解SPI协议需要哪些引脚,各自的功能,SPI四种工作模式,SPI主设备是如何通过短接与从设备交换数据的?MISO和MOSI引脚进行SPI回环测试等。然后是SX通过1278模块的驱动移植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网络架构只是学习的一部分,还需要努力才能继续挖掘深层原则!