提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
文章目录
- 前言
- 一、LoRaWAN协议入网方式是什么?
- 二、使用步骤
-
- 1.引入库
- 总结
前言
提示:这里可以添加本文要记录的大概内容:
例如:在LoRaWAN中,node最终和服务器能够正常数据交互,需要先入网,入网的本质,也就是获得一些通信相关的参数,有以下几个:
NwkSKey
AppSKey
DevAddr
DevEui
其中
NwkSKey用于数据的校验,也就是说在MIC校验时会用到
AppSKey用于负载的AES加密,也就是说在加密解密时会使用到
DevAddr是node的短地址,在数据通讯时,使用的是node的短地址
DevEUI 在ABP入网方式的通讯中不会使用,在OTAA方式中会使用到,是由设备在入网前就产生了。在入网时,node将DevEUI上传,然后服务器会将此DevEUI注册并返回一个DevAddr,也就是说DevAddr此时和DevEUI就建立了映射关系,在node后续的通讯中,使用DevAddr。
LoRaWAN入网方式有两种:
ABP (Activation By Personalization)
OTAA(Over-The-Air Activation)
下面就讲述一下这两种方式。
ABP 概述
ABP方式是事先将入网信息烧写在设备上,也就是说设备上电已经入网了,无需再特意去请求入网。
这种方式就不再多说了。需要做的只是把这个设备信息录入到平台上。
注意录的时候可能要输入DevEUI,但实际上ABP的设备DevEUI在通讯中并无参与,所以只是做个映射,来符合LoRaWAN协议,所以这个值可以随意的填,不重复即可,不过建议加上一个方便记忆的前缀
OTAA 概述
OTAA方式入网的node,在刚上电的时候,是不处于入网状态的,此时就需要进行入网操作。
如果我们简单的把服务器看做一个整体,那么入网操作的流程是这样的:
node 发送入网请求,即join_request message
GW 收到 node 的数据,上传给服务器
服务器收到入网请求,同意入网,并且将设备在服务器注册,建立长地址与短地址之间的联系,生成通讯密钥,将通讯密钥的参数打包下发给GW,即 Join-accept message
GW 收到服务器的数据,下发给 node
node 根据下发的数据包,得到 DevAddr、APPSKEY、NWKSKEY
一、LoRaWAN协议入网方式是什么?
示例:LoRaWAN协议入网方式 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。
二、使用步骤
1.引入库
名词解析
上行:终端的数据发送经过一个或多个网关中转到达网络服务器。
下行:由网络服务器发送给终端设备,每条消息对应的终端设备是唯一确定的,而且只通过一个网关中转。
LoRaWAN Classes
LoRaWAN Classes 一共分为3类:Class A,Class B,Class C
Class A:终端先发送,在发送后开启一段时间的接收窗口,终端只有在发送后才可以接收。也就是说上行没有限制,下行的数据只有在上行包发送上来的时候终端才可以接收到。(功耗最低)
Class B:终端和服务器协商好接收的窗口开启的时间以及何时开启,然后再约定的时间进行接收,可以一次接收多个包。(功耗次低)
Class C:终端在发送以外的其他时间都开启接收窗口。更耗能,但通讯延时最低。(功耗最高)
PHY/MAC 层数据链路
总的数据包结构:
注意preamble、PHDR、PHDR_CRC、CRC都是硬件生成,无需软件参与,需要软件参与的就是PHYPayload部分
PHY层数据
上行链路消息:
下行链路消息:
其中上行最后还有CRC校验,而下行没有CRC校验。其中PHDR PHDR_CRC CRC都是射频芯片用于校准数据的完整新和一致性用的,并非用户生成的数据。
MAC 层数据
由上图可以看到,MAC数据是是作为PHYPayload存在的
其中MAC 层的包有三个部分组成:
MHDR(MAC层帧头)
MACPayload(MAC层负载)
MIC(4字节的校验)
而MACPayload又由三个部分组成:
FHDR (MAC层负载头)
FPORT(MAC 层数据的通道号)
FRMPayload(MAC层负载,加密)
而FHDR又由由四个部分组成:
DevAddr(终端的ID 4字节)
FCtrl(帧的控制字 1个字节)
FCnt (帧的序号 2个字节)
FOpts(帧配置,字节数不定,大部分情况0个字节)
所以,由协议可知,一个上行包或者下行包中的数据内容有哪些,抛开控制命令不说,主要有终端的ID、包的序号、用户的加密负载。
例如我抓到的一个数据包:
/x40 /x7f /xf8 /x8a /x29 /x80 /x2a /x00 /x02 /x07 /x42 /x87 /x3f /xc7 /xb4 /x22 /x04 /x00 /x84 /x8d /x1b /x06 /x2f /x5b /xbc /x57 /xdb /xf2 /x31 /xde /x49 /x61 /x00 /x86 /x99 /xec /x08 /x61 /xf0 /xb7 /xda /x54 /x0a /xfa /xd1 /x31 /xac /xd0 /x44 /x1b /x4d /xfa /x48 /x77 /x19 /xee /x61 /x14 /xbf /x23 /x52 /xd1 /xe9 /x93 /x79 /x6e /x16 /xd7 /x13 /x2e /x58 /x06 /x54 /xc3 /xd2 /x04 /xba /x52 /xa7 /xc8 /x7a /x0b /x8e
这是一个MAC 层的帧,即完整的PHYPayload部分,注意,默认LoRaWAN都是按小端方式传输的。
其中
MHDR:
/x40
MACPayload-FHDR-DevAddr:
/x7f /xf8 /x8a /x29
MACPayload-FHDR-FCtrl:
/x80
MACPayload-FHDR-FCnt:
/x2a /x00
MACPayload-FPORT:
/x02
MACPayload-FRMPayload(加密):
/x07 /x42 /x87 /x3f /xc7 /xb4 /x22 /x04 /x00 /x84 /x8d /x1b /x06 /x2f /x5b /xbc /x57 /xdb /xf2 /x31 /xde /x49 /x61 /x00 /x86 /x99 /xec /x08 /x61 /xf0 /xb7 /xda /x54 /x0a /xfa /xd1 /x31 /xac /xd0 /x44 /x1b /x4d /xfa /x48 /x77 /x19 /xee /x61 /x14 /xbf /x23 /x52 /xd1 /xe9 /x93 /x79 /x6e /x16 /xd7 /x13 /x2e /x58 /x06 /x54 /xc3 /xd2 /x04 /xba /x52 /xa7
MIC:
/xc8 /x7a /x0b /x8e
总结
例如:如果我们简单的把服务器看做一个整体,那么入网操作的流程是这样的:
node 发送入网请求,即join_request message
GW 收到 node 的数据,上传给服务器
服务器收到入网请求,同意入网,并且将设备在服务器注册,建立长地址与短地址之间的联系,生成通讯密钥,将通讯密钥的参数打包下发给GW,即 Join-accept message
GW 收到服务器的数据,下发给 node
node 根据下发的数据包,得到 DevAddr、APPSKEY、NWKSKEY