Geeklora协议

 前言

如果没有阅读Geeklora简介,请先看Geeklora简介

版权声明

我们的Geeklora协议是为了服务自家生产的sx1278模块,为大家提供一个可行的解决方案。允许大家修改、编辑以及后期在自己的项目中使用。包括前期使用geekioe产品获得Geeklora协议做前期试水,中后期允许大家使用自己的设计做产品脱离geekioe硬件。在此过程中,我们提供自己的硬件参考设计,帮助您设计开发。一句话,怎么玩都行。但是,我们唯一打击的是。和我们卖相同产品的商家,将Geeklora协议使用到自己的产品作宣传,不友好的商家提供我们的资料给用户。窃取我们的研发成果,这是我们最担心的,我们将会拿起法律武器,当然也可以合作。希望大家多多谅解,如有问题,请联系我们QQ:1983422342。

Geeklora工程

Geeklora协议工程文件,使用IAR7.80.4版本。Geeklora协议工程文件中。EndDevice对应终端节点,Coordinator对应协调器网关。EndDevice程序和Coordinator程序共用同一个工程文件,通过全局宏定义EndDevice和Coordinator加以区别。相关配置详情查看Geeklora配置。这里主要介绍Geeklora协议,相关STM32基础操作也将跳过介绍,Geeklora未使用Contiki等嵌入式操作系统,大家可以直接开干。

用户文件

Geeklora协议简单,用户只要关心4个文件,一个全局宏定义,

main.c文件:处理终端或者协调器无线收发的消息,如用户自定义函数接收传感器数据发送出去、或者接收到某个消息做其他处理,诸如此类。

lora_conf.h文件:配置Geeklora网络信息,如修改密钥、周期发送消息时间、事件触发消息等。

sx1278.h文件:用于配置sx1278射频芯片,如发射功率、扩频因子、带宽、编码率等。

hw_conf.h文件:用于配置工程文件使用的STM32的哪个平台、是否开启软件调试等功能。

外加一个工程options配置->c/c++Compiler->Preprocessor中的Defined symbols:内的全局宏定义

主函数main

主函数main处理终端或者协调器无线收发的消息,如用户自定义函数接收传感器数据发送出去、或者接收到某个消息做其他处理。main函数整体处理流程下图所示。

下面详细介绍main函数。

HAL_Init( ); SystemClock_Config( ); DBG_Init( ); HW_Init( );

以上4行函数是stm32硬件初始化部分内容。

DBG_Init( );用于stm32官方STLink下载器仿真使用,STLink除了使用SWD的两个接口外还占用了其它4个IO口。注意我们使用了Jlink下载器的SWD接口下载和仿真,不需要额外的4个接口。如果大家不使用STLink下载器,可以在hw_conf.h文件中找到DEBUG 宏定义,直接注释掉,关闭STLink的仿真下载4个IO口的初始化,节省4个IO口资源的使用。

HW_Init( );用于相关IO功能的初始化.里面包括下面几个函数的初始化如下图所示。

Radio.IoInit( );函数相当于执行SX1276IoInit( );函数。用于初始化sx1278的中断IO口RADIO_DIO_0_PIN、RADIO_DIO_1_PIN、RADIO_DIO_2_PIN、RADIO_DIO_3_PIN 。sx1278模块使用到的IO口,可以查看stm32l0xx_hw_conf.h文件。

HW_SPI_Init( );函数初始化SPI1接口,用于控制SX1278模块。下面介绍W5500初始化会提到stm32的SPI2接口用于控制W5500芯片。

HW_RTC_Init( ); 函数初始化RTC时钟,注意Geeklora通讯协议的Timer时间服务函数,使用了RTC亚秒级定时。有很多stm32芯片不支持RTC亚秒级定时,数据手册上也没有这项的描述。大家可以查看stm32芯片对应的工程库文件stm32l0xx_hal_rtc.h文件(这里举例,是我们的工程文件)中RTC_TimeTypeDef;结构中有没有uint32_t SecondFraction;uint32_t DayLightSaving;的定义。如果有的话,说明芯片支持RTC亚秒级定时,这里特别说明一下,帮助大家二次开发,芯片选型工程移植过程后,Geeklora协议栈不能正常运行,少走弯路。

vcom_Init( ); 函数时串口打印函数,使用了USART2接口,注意不包括串口接收哦,如果您需要的话,需要自己添加,添加方法。我们的点对点串口透传通信,PingPong工程里面有可以参考下。

用户根据需求添加硬件初始化代码,我们的工程文件,默认添加了GPIO_ButtonConfig( );函数和GPIO_LedConfig( );函数示例,用于引导用户,用户在做自己的项目时可以删除。

lora_Init( &LoRaMainCallbacks ); 函数用于Geeklora网络的初始化。例如:执行AES密钥加载、SX1278芯片的初始化配置、时间服务函数的注册等等。我们需要注意的是LoRaMainCallbacks.LoraTxData = OnLoraTxData;LoRaMainCallbacks.LoraRxData = OnLoraRxData; 指定了OnLoraTxData( );函数,和OnLoraRxData( );函数。我们的应用层数据的加载发送函数,和处理接收函数,值得注意的是,它们都是中断处理函数,大量耗时的程序建议放在main函数中处理,减少对中断资源的占用。具体如何操作,程序内有详细的中文标注,和示例。

W5500_Init( ); 函数用于W5500芯片的初始化,用于Coordinator网关节点,通过command on line 全局宏定义USE_W5500_CHIP 来确认是否使用W5500芯片芯片,我们的网关开发板使用了W5500芯片。所以Coordinator工程文件默认定义了 USE_W5500_CHIP ,W5500芯片的初始化包括,SPI2接口的初始化,以及客户端和服务器的IP地址和端口的配置。具体配置详见Geeklora配置。

IWDG_Init( ); 函数初始化独立看门狗,EndDevice和Coordinator都默认开启了独立看门狗,目前默认看门狗需要28s的时间需要喂狗,否则硬件自动复位。通过command on line 全局宏定义USRE_IWDG 来确认是否开启独立看门狗,建议开启。

W5500_Process( ); 函数用于W5500芯片运行进程,用于Coordinator网关节点,通过command on line 全局宏定义USE_W5500_CHIP 来确认是否使用W5500芯片芯片,我们的网关开发板使用了W5500芯片。所以Coordinator工程文件默认定义了 USE_W5500_CHIP ,W5500芯片的初始化包括,SPI2接口的初始化,以及客户端和服务器的IP地址和端口的配置。具体配置详见Geeklora配置。

GeekLora_Process( ); 函数Geeklora协议运行,详述看下方,东西太多只能介绍整体架构。

LowPowerManage( ); 低功耗处理函数,当前协议没有考虑低功耗,我们已有Geeklora协议低功耗方案,请关注我们的Geeklora的代码更新进程。

static void OnLoraTxData( lora_AppData_t *AppData ); 应用层数据加载处理发送函数。我们的协议栈会根据用户的选择,时间触发函数执行,或者事件触发函数执行。相关注意要点,详情代码注释。

static void OnLoraRxData( lora_AppData_t *AppData ); 应用层数据接收处理函数,由Geeklora协议透过网络层将数据处理后,上传到应用层。相关注意要点,详情代码注释。

Geeklora架构

Geeklora解决方案整体架构,如下图所示。

Geeklora应用层

Geeklora应用层数据下传网络层整体流程图,如下图所示。因为版图限制原因未能将全部流程细节全部展示。例如。应用层数据下发多次,应用层数据缓冲区一直处于饱和状态,超过一定上限,硬件会判断节点掉网,节点会根据具体情况,中断应用层数据的产生,等待入网恢复通信,或者复位重启。可以肯定的是,所有数据判断的阈值通过配置lora_conf.h文件 ,用户可以直接干预,详情查看Geeklora配置

Geeklora网络层

Geeklora网络层流程图,终端节点在网络层通讯时隙,会截取应用层数据发送数据,如下图所示。篇幅有限未能完全展示细节问题,非常抱歉抱歉。

Geeklora入网

Geeklora协议用于解决终端并发数据碰撞问题,终端入网后,协调器分配网络通讯时隙,之后终端将在协调器的管理下进行通讯。这里有以下几种情况。

入网情况比较多,有很多的现状。这里就不配图了。

情况1:正常入网,首先打开协调器网关,协调器网关会Becaon网络初始化信息。之后终端一个一个上电,一个终端入网后,再给另一个终端供电,一个个入网。这是理想情况下。

情况2: 终端入网后,断电,再上电,协调器一直供电中,终端会重新入网,刺客网关协调器中的终端管理路由表,不会添加更新,协调器分配此终端先前入网的路由信息,避免资源的浪费,

情况3: 所有的终端一直供电中,且都已入网,这时协调器断电重启,为防止数据发生碰撞。协调器会广播Beacon的网络初始化信息。所有终端将根据自己先前的入网编号信息依次加入协调器网关中。

情况4:如果协调器先上电,所有终端同时上电,协调器网关发出Join的Beacon信息,下面的所有终端将会同时发出Request入网请求。这时会出现数据碰撞,我们通过测试,距离近的节点将会优先被入网注册。这种极端情况可能会出现在断电后,重新上电后发生。

情况5:和情况3类似,注册信息和情况2类似,不会产生多余节点信息,如果协调器始终供电,下面所有的节点入网后都断电了,然后重启。协调器网关发出Join的Beacon信息,下面的所有终端将会同时发出Request入网请求。这时会出现数据碰撞,我们通过测试,距离近的节点将会优先被入网注册。

请尽量避免情况4和情况5的发生,这种极端情况,虽然我们做了很多现状再现,也做了很多必要措施,发现都能最终入网。但是不保证出现我们遗漏无法模拟的极端情况,有问题请加入我们的QQ群交流,谢谢。

欢迎加入Geeklora.

文中图片文件归纳:Geeklora协议图片.zip

关键字:Geeklora

Geeklora补给站:QQ群:633560137

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值