zoukankan      html  css  js  c++  java
  • LoRa网关项目——SX1278开发(一)

    #前言

    ​ 最近在做一个LoRa物联网网关的项目,网关的作用主要是管理连接的LoRa传感器终端,将传感数据通过协议转换向上转发到Internet,当然,也要处理下行的数据。

    ​ 使用到的LoRa射频芯片是SX1278,MCU为STM32F103RCT6,连接Internet用的是ESP8266+AT,且移植了FreeRTOS(单纯是为了学习),开发环境是STM32CubeMX+Keil 5。由于之前没负责过整个系统的开发,所以开此贴记录一下开发过程,由于本人上学以来语文一直不好,所以文笔正在努力进步中,如果此文章有您觉得我说的不明白的地方,可以发送邮件到wanglu082@yeah.net,或者在文章下方评论,我看到会尽快回复您,多谢谅解!

    您也可以无聊当个故事看,我主要是记录一下也防止以后看不懂自己写的代码,哈哈哈~

    所以我将从大概三个方面大概记录:

    1. SX1278的开发
    2. FreeRTOS的使用
    3. 整个项目总结

    话不多说,直接开搂~


    LoRa网关项目——SX1278开发(一)

    一. SX1278介绍

    ​ SX1278是一款经典且性价比高的LoRa射频芯片,非常适合初学者学习使用,由于我不是特别会画PCB,所以还是选择别家的模块来的方便还不容易出错。

    ​ 正点原子的LoRa模块是和一个MCU封装到一起的,所以可以用串口通信,很无脑,很多参数没法修改已被正点原子给写死,只能通过它家的上位机来配置模块,遂PASS。最后选择了安信可的LoRa Ra-02模块,02是邮票孔接口的还比较容易焊接。这个就不像正点原子家的那样无脑,它就是将SX1278和其外围电路集成到了一起而已,使用SPI接口通信,有用的引脚也都引出了,目前来看比较不错。唯一的问题是他的天线接口是ipex接口的,不如SMA的好看(其实是我有很多SMA接口的天线用不上了)。

    ​ 配置SX1278是通过SPI接口对寄存器操作实现的,某些寄存器在LoRa模式和FSK模式有不同的作用,我这个项目只用LoRa模式,所以FSK有关的我也懒得看(话说很多寄存器我真的不看懂是啥意思,不是通信专业的对射频不是很了解,只能百度百度再百度)。


    二. 开发之前的准备工作

    ​ 安信可的LoRa模块共引出了16个管脚(如下图),这么多的引脚加之这么多看不懂的寄存器,在这里不得不吐槽一下SX1278的官方手册真的是很不全,很多操作的逻辑都没有解释明白,要让我自己写驱动的话我估计会直接放弃,不过还好安信可提供了几个Demo可供咱们参考。

    image-20210426211515458

    ​ 选了一个点对点控制LED的Demo,果断将驱动复制出来,驱动的结构有必要说一下。我个人习惯把嵌入式项目分为5层架构,由上到下分别是:应用层、中间件层、操作系统层、板级支持包、硬件层。这个是我看知乎上一篇文章总结的,觉得跟我自己的想法高度一致,也不知道说的对不对。

    • 硬件层就是单片机内部外设的驱动,像GPIO,SPI等等,这一层一般是跟单片机走的,像这个项目的硬件层就是STM32提供的HAL库。

    • 板级支持包这个概念是从大学的书本上看到的,Linux开发用的比较多吧,单片机没怎么看到大家谈(火哥好像用这个概念)。这一层大概就是对外部硬件的初始化和一些基本操作的封装,通常调用的是硬件层的API来实现。就比如这个SX1278,它的初始化、片选、复位等操作就是属于板级支持包要实现的。驱动文件中的 sx1276-board.csx1276-board.h 就是属于板级支持包的。

    • 操作系统层是最容易理解的,于此项目而言就是FreeRTOS嘛。系统的初始化、任务、列表、队列等数据结构的创建都是在这层实现的。操作系统层不光使用板级支持包提供的接口,显然也调用硬件层的接口,所以这个层的位置其实比较尴尬,我的理解或许也有错误,欢迎讨论!

    • 中间件层的作用是实现所需的功能函数。它与应用层的区别是:应用层负责解决整个系统何时该调用哪个功能函数;而中间件层就是实现这些功能函数的。这些功能函数可能调用了不同模块对应的板级支持包的接口,组合来实现一项功能。例如,网关在接收到感知层结点的数据时,在接收回调函数中可能调用MQTT_publish()将数据转发给上层应用,同时,也会调用OLED_display()显示消息到显式模块上。

      驱动文件中的sx1276.csx1276.h 就是属于中间件层的。

    • 应用层的工作是从整个系统的调度层面来讲的,这个后面再说吧~


      官方的驱动中还剩下几个文件,在这里介绍一下它们作用:

    文件名 功能
    radio.h 声明了很重要的两个结构体
    sx1276Regs-Fsk.h FSK模式下的寄存器宏定义
    sx1276Regs-LoRa.h LoRa模式下的寄存器宏定义

    ​ 将驱动文件复制到一个确定没其它问题的MDK工程中,我用的是正点原子开发板中的SPI章节Demo(HAL库),大差不差,选择一个自己觉得舒服的就行。然后可以建一个文件夹放SX1278的驱动文件,完成在Keil中建立Group、添加INCLUDE path等常规操作。

    ​ 之后就可以开始改错了,这其中主要是改以下部分内容:

    1. 引脚定义;根据你的原理图来改。
    2. GPIO、SPI初始化函数。官方给的驱动是用标准库来写的,我用的STM32CubeMX只支持HAL库,所以暂时要先把它改成对应的HAL库函数。

    这里差不多就改完了,编译应该是0 error,这一章就介绍完了,明天开始记录SX1278的初始化函数部分的内容。

  • 相关阅读:
    WPF自定义路由事件
    一文看懂微服务背后的技术演进与应用实践
    云原生消息、事件、流超融合平台——RocketMQ 5.0 初探
    KubeVela 1.1 发布,开启混合环境应用交付新里程碑
    Facebook宕机背后,我们该如何及时发现DNS问题
    Apache Flink 在汽车之家的应用与实践
    新一代容器平台ACK Anywhere,来了
    Serverless 工程实践 | Serverless 应用优化与调试秘诀
    OpenKruise 如何实现应用的可用性防护?
    国家网络安全宣传周:勒索病毒利如刀,上网备好技能包
  • 原文地址:https://www.cnblogs.com/Irvingcode/p/14710637.html
Copyright © 2011-2022 走看看