LoRaWAN采用星型无线拓扑
End Nodes 节点
Gateway 网关
Network Server 网络服务器
Application Server 应用服务器
LoRa联盟是2015年3月Semtech牵头成立的一个开放的、非盈利的组织,发起成员还有法国Actility,中国AUGTEK和荷兰皇家电信kpn等企业。至2016年4月,联盟已经发展成员公司290余家,其中不乏IBM、思科、法国Orange等重量级产商
128AES加密功能
节点与server之间的加密通信:
HAL驱动SPI驱动物理层phy,物理层通过lora或者fsk协议再与网关通信,网关可以通过spi或usb与网关模块通信
网关也可以通过3Gwifi与我们网络服务器通讯
zigbee属于mesh
1.4.1 LoRaWAN网关SX1301
1.4.2 LoRaWAN终端Class A
LoRaWAN Server选择最佳Gateway下行通信,都是通过LoRaServer选择,
开启两个接收窗口,平时处于休眠模式,当他需要工作的时候才会去发送数据包,功耗最低,实时性不高,比如1小时才能发送1次信息,控制不太合适,采集信息用classA最合适
1.4.3 LoRaWAN终端Class B
解决classA实时性不高(当需要节点去响应实时性问题的时候,首先网关会发送一个信标,告诉节点要加快通讯,快速工作,节点收到信标之后,会在128秒内去打开多个事件窗口,每个窗口在3-160ms,在128秒内可以实时对节点进行监控)
1.4.4 LoRaWAN终端Class C
既保持实时性,也保证了数据收发,一直会打开接收窗口,缺点能耗高
1.5.1 LoRaWAN服务器框架
与ABCclass建立了Star通讯
网络服务器与网关建立通讯
控制网络服务器协议算法是通过控制服务器做得,服务器如何决定通过那个网关进行通讯
应用服务器根据行业需求,布置不同应用,使用接口比较单一
客户服务器 二次开发,人机交互等在此开发
1.5.2 不同server的通信
tcp udp
客户服务网、应用服务器、网络服务器、控制服务器都是通过TCP进行通讯,可靠性
网关、节点和网络服务器是通过UDP,保证实时性
1.5.3 LoRaWAN服务器通信协议
TCP、UDP、网关通过JSON字符串进行交互的
思考 如何设计Class C终端进行私有组网
1.只能联网内才开发loraWan
2.loraWan网关成本高
3.要具备Sever开发能力
类似交通信号灯,无线信道只有1个,不设计会产生冲突
解决信号冲突的问题
尽可能地节省电能
保证通信的健壮和稳定性
设计要基于3种协议
用时间片的思想,多任务。(在一定的事件内去分配时间槽,每个时间槽分给一个节点,使节点在这个时间槽里通信,如果不在这个时间槽是不能通信的。和电脑CPU的时间片是一个道理)
时分多路复用是将时间划分为一段段等长的时分复用帧(TDM帧),每个用户在每个TDM帧中占用固定序号的时隙。
每个用户所占用的时隙是周期性出现(其周期就是TDM帧的长度)。
时分复用的所有用户是在不同的时间占用相同的频带宽度。
1301 芯片
(CPU是多核,多任务同时进行:不同频率的通信可以同时进行)
SF扩频,SF不同,进行不同的通信
LoRa 中的码分复用通过以下方式实现:
-
唯一的扩频因子(Spreading Factor): 在 LoRa 中,每个终端设备使用唯一的扩频因子,这个扩频因子决定了数据信号的频带扩展程度。不同的扩频因子对应着不同的码片序列。每个终端设备在发送数据时,使用其唯一的扩频因子进行调制,因此即使在相同的频率上,不同的终端设备也可以同时发送数据而不会相互干扰。
-
自适应数据速率(Adaptive Data Rate,ADR): LoRa 网络可以根据终端设备的距离和环境条件动态调整扩频因子和发送功率,以最大程度地提高通信的可靠性和覆盖范围。
-
碰撞避免技术: LoRa 中还采用了碰撞避免技术,通过随机选取发送时间和采用随机退避算法来减少终端设备之间的碰撞,进一步提高了网络的性能。
总的来说,LoRa 中的码分复用技术使得多个终端设备可以在同一时间和频率上进行通信,从而实现了低功耗、远距离和大规模连接的物联网应用场景。
modbus只有一个主机,节点可以是1-247,只允许主机发送,从机应答。实时性差
时间 随机访问,竞争入网
信号(协调器)
节点1 发送收到
节点2 先判断网络是否冲突,再延时发送 接收
节点3 先判断网络是否冲突,再延时发送 接收
时间槽分配、或者时间片,在规定时间内进行收发rx、tx,从而实现整个网络的通信
同时设置冗余、revered slot和空闲任务used idle
2.7.1 LoRa自组网协调器设计
串口:我们需要牧场监控内的信息,控制器要与协调器进行数据通信
无线数据:入网没完成等待,是否有新节点加入,断电是否有旧节点加入
解决时钟飘移缺点,时钟同步
2.7.2 LoRa自组网节点设计
思考 基于时分复用MAC协议如何开发协调器与节点程序
入网请求
设备标识符 PANID和zigbee组网一样,相同才能在一个网通信
时间同步
网络数据包
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_7|GPIO_PIN_15, GPIO_PIN_SET);
3.2.1 Cubmx RTC外设配置
修改RTC时钟源为外部高速时钟
配置RTC分频系数
初始化日期和时间
配置Alarm参数
使能RTC全局中断
1s为单位.rtc时钟为250hz
3.2.2 Cubmx 定时器外设配置
配置TIM2分频系数
使能TIM2定时器中断
1s为单位
3.2.3 Cubmx 串口和ADC外设配置
把main函数的功能移到task文件夹下,数据解析、网络解析、协议等
如果是从机增加一个ADC,用于生成随机数
配置ADC为连续采集
配置DMA通道
配置ADC标签
3.2.4 RTC任务
主要任务:RTC 提供实时时钟,用于时钟同步,开启闹钟中断
sTime的初值和sAlarm的初值都为0
闹钟事件回调函数,触发事件用于处理任务
协调器(主机):
同步时钟标志(因为每加入的设备都需要同步时钟)
获取时间,设置下次闹钟时间+5小时
节点(从机):
发送更新数据标志
闹钟发送数据的时间赋值,使能闹钟中断
毫秒单位转换为时分秒
时分秒转换函数
3.2.5 定时器任务
定时器 用来节点超时的判断
定时器初始化
开启定时器中断
定时器定时事件任务
定时器中断溢出,要在里面做一些处理,判断节点是否入网超时
3.2.5 CRC校验码及通信协议宏定义
protocol.c
1生成crc8校验码
2判断crc8校验码是否正确
3.2.6 数据处理任务
dataprocess.c
主机
从机
3.2.6.1 串口数据获取并无线发出去
接收数据包计数、发送数据包计数
3.2.6.2 读取无线射频数据
根据radio.h process的不同枚举类型进行业务处理
3.2.6.3 主机协议解析
入网协议解析(新设备添加入网表)
网络数据包解析
3.2.6.4 从机协议解析
从机协议解析
3.2.6.5 从机数据上传
3.2.7 网络处理任务
netprocess.c
主机
从机
netprocess.h
netprocess.c
3.2.7.1 主机等待从机入网完成
3.2.7.2 主机发送同步时钟
3.2.7.3 生成随机数
库函数 放到时间数里面,循环读10次,转换为uint8 ,最大是2550,返回(0-2.5s)
3.2.7.4 从机加入网络
3.2.7.5 从机获取时间片
3.2.8 获取数据发送时长
lora获取时间片的同时需要考虑数据发送的时长
3.2.8 主程序
主机:
等待入网
是否是新节点,如是改变节点入网状态未完成
是否旧节点,如是改变节点入网状态未完成
时钟同步时间是否到,到了时钟同步
从机:
节点都已经在上面部分实现,只需要等待接收数据,数据解析
判断是否到达定时发送时间,发送数据,并清空标志位。
1.adc读取,返回随机时间
2.打印地址
3.发送完后收到应答包,加入完成
4.时间片是0,因为第一个
5.一分钟一个rtc闹钟
6网络同步
7收到同步包
8设置了时间
9 1分钟传一个数据,上传一次数据
10 还有另一个设备发送的,节点也会收到。