LoRaWAN网关源代码分析(基础概念篇)

目录

一、简介

1、lora_gateway

2、packet_forwarder

 二、目录结构

1、lora_gateway

2、packet_forwarder


一、简介

        LoRaWAN网关的实现主要依赖两个源代码:lora_gateway和packet_forwarder。接下来,我们将从分析源代码入手,移植LoRaWAN源码,实现LoRaWAN网关的功能。

1、lora_gateway

        这是 Semtech 提供的 LoRa 网关的参考实现,主要包括基带网关驱动程序和一些实用工具。这个软件包主要负责网关硬件的底层控制,如收发数据包、配置射频参数等。通常与 Packet Forwarder 一起使用,以实现完整的网关功能。

基本功能:

  • 控制 LoRa 网关板卡上的射频芯片(如 SX1301 或 SX1302)。
  • 配置射频参数,如频率、带宽、数据率等。
  • 接收来自 LoRa 终端设备的上行数据包。
  • 发送下行数据包到 LoRa 终端设备。

源码下载地址:Lora-net/lora_gateway: Driver/HAL to build a gateway using a concentrator board based on Semtech SX1301 multi-channel modem and SX1257/SX1255 RF transceivers. (github.com)icon-default.png?t=N7T8https://github.com/Lora-net/lora_gateway

2、packet_forwarder

        是一个用于 LoRa 网关的参考实现,主要负责将从终端设备接收到的数据包转发到 LoRaWAN 网络服务器,并接收来自网络服务器的下行数据包进行发送。 

基本功能:

  • 接收 LoRa 网关的上行数据包,并通过网络协议发送到指定的 LoRaWAN 网络服务器(如 ChirpStack )。
  • 接收来自网络服务器的下行数据包,并通过网关的射频接口发送到终端设备。
  • 支持多通道接收,能够同时处理多个频率和数据率的数据包。

源码下载地址:Lora-net/packet_forwarder: A LoRa packet forwarder is a program running on the host of a LoRa gateway that forwards RF packets receive by the concentrator to a server through a IP/UDP link, and emits RF packets that are sent by the server. (github.com)icon-default.png?t=N7T8https://github.com/Lora-net/packet_forwarder

 二、目录结构

1、lora_gateway

      目录结构如下:

 (1)fpga:这个目录通常包含 FPGA 固件代码。如果 LoRa 网关硬件使用了 FPGA 来实现部分功能,这里可能会包含配置文件和代码。

(2)libloragw:这是 LoRa Gateway 的核心库包含硬件抽象层 (HAL) 的实现。libloragw 库提供了与 LoRa 网关基带芯片 (如 SX1301 或 SX1302) 进行通信的基础函数。

(3)LICENSE:该文件包含项目的许可证信息,说明了源码的使用和分发条件。

(4)Makefile:这是一个构建脚本,用于编译源码。你可以运行 make 命令来编译整个项目。

(5)readme.me:该文件通常包含项目的概述、使用说明和编译指南。阅读此文件可以快速了解如何使用和配置该项目。

(6)reset_lgw.sh:这是一个 Shell 脚本,用于重置 LoRa 网关的基带芯片。这通常在网关初始化或重新启动时使用。

(7)util_lbt_test:这个工具用于测试 Listen Before Talk (LBT) 功能。LBT 是一种频谱访问机制,确保设备在发送数据之前没有其他信号在使用该频谱。

(8)util_pkt_logger:这是一个数据包记录工具,用于记录从网关接收到的所有 LoRa 数据包。它对于调试和分析非常有用。

(9)util_spectral_scan:这个工具用于频谱扫描,可以帮助检测和分析特定频段内的频谱使用情况。

(10)util_spi_stress:这是一个 SPI 压力测试工具,用于测试网关与基带芯片之间的 SPI 通信的可靠性和稳定性。

(11)util_tx_continuous:这个工具用于进行连续传输测试,可以用于发射连续的 LoRa 信号以测试发射性能和覆盖范围。

(12)util_tx_test:这是一个传输测试工具,用于发送测试数据包以检查网关的发送功能。

(13)VERSION:这个文件通常包含项目的版本信息。

备注:

        以util_为前缀的工具主要是用于测试和调试的,并不会直接影响 LoRaWAN 网关的正常通信。接下来我的文章主要是整理核心库libloragw。

2、packet_forwarder

        目录结构如下:

(1) compile.sh:这是一个编译脚本,用于编译整个项目。你可以运行这个脚本来编译所有的源代码。

(2)LICENSE:该文件包含项目的许可证信息,说明了源码的使用和分发条件。

(3)lora_pkt_fwd:这是一个关键的应用程序,负责将接收到的 LoRa 数据包转发到 LoRaWAN 网络服务器,并处理从服务器接收的下行数据包。这个程序是网关实际运行中的核心部分之一。

(4) Makefile:这是一个构建脚本,用于编译项目的源代码。你可以运行 make 命令来使用 Makefile 进行编译。

(5)PROTOCOL.TXT:该文件通常包含关于 LoRaWAN 协议或项目中特定通信协议的详细描述。

(6)readme.md:该文件通常包含项目的概述、使用说明和编译指南。阅读此文件可以快速了解如何使用和配置该项目。

(7)util_ack:这是一个实用工具,用于测试和调试 ACK (Acknowledgment) 功能,主要是检查网关是否正确发送和接收 ACK 数据包。

(8)util_sink:这个工具用于接收和处理 LoRa 数据包,类似于数据包接收器或记录器。

(9)util_tx_test:这是一个传输测试工具,用于发送测试数据包以检查网关的发送功能。

(10)VERSION:这个文件通常包含项目的版本信息。

备注:

        接下来,我主要讲解lora_pkt_fwd,这是一个主要的程序,通常称为 "Packet Forwarder"。它负责将接收到的 LoRa 数据包通过互联网转发到 LoRaWAN 网络服务器(如 ChirpStack),并接收从服务器发送回的下行数据包。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/737139.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

SpringBoot-通过注解@Vuale从全局配置文件中获取数据

除了通过注解ConfigurationProperties让JavaBean的所有属性和全局配置文件中配置项建立关联关系外,我们spring提供了一个Value注解,获取全局配置文件中的某个配置项的数据 接下来,我们重点说一下两个注解的的区别: Configuration…

听说你还不会用Dagger2?Dagger2 For Android最佳实践教程

Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Log.d(TAG,chef.cook()); } } 可以看到,在使用Dagger2的时候,使用者的代码会变得非常简洁。但是&#…

std::bind与std::ref配合使用时要注意的几个问题

目录 1 假如输入函数的变量是左值非常量引用,则该变量在std::bind中只能用std::ref修饰,不能用cref,否则编译失败: 2 假如输入函数的变量是左值常量引用,则该变量在std::bind中既可以用std::ref修饰,也可…

汇编快速入门

一.基础知识 1.数据类型 DB(Define Byte,字节类型 占位8位bit 1字节) 范围:DB可以用来定义(无符号、有符号)整数(包含二、十、十六进制)和字符 语法:a DB 数据个数…

鹅算法(GOOSE Algorithm,GOOSE)求解复杂城市地形下无人机避障三维航迹规划,可以修改障碍物及起始点(Matlab代码)

一、鹅算法 鹅优化算法(GOOSE Algorithm,GOOSE)从鹅的休息和觅食行为获得灵感,当鹅听到任何奇怪的声音或动作时,它们会发出响亮的声音来唤醒群中的个体,并保证它们的安全。 参考文献 [1]Hamad R K, Rashid T A. GOO…

路由

自学python如何成为大佬(目录):https://blog.csdn.net/weixin_67859959/article/details/139049996?spm1001.2014.3001.5501 客户端(例如浏览器)把请求发送给 Web 服务器,Web 服务器再把请求发送给 Flask程序实例。程序实例需要知道对每个U…

Ubuntu:解决github出现 Permission denied (publickey)的问题

因为使用的Ubuntu 长久没有使用,使用下载的时候突然报错,使用ssh key这种方式进行clone ,pull github上面的项目,使用 git clone或者git pull origin master出现permission denied (publickey),原因是因为ssh key过期失…

chat使用

1.问题,Youve hit your usage limit. Please try again later. 2024年6月22号,提示达到使用限制次数。 一直用免费的,第一次遇见这个提示。 据说月初会重置。 感觉这个月也没有用多少次,怎么就达到限制了。 还有就是&#…

虚拟机装在移动硬盘会伤电脑本身吗 虚拟机装在移动硬盘可以随插随用吗

虚拟机允许用户在单一的物理硬件上模拟多个操作系统环境,这大大提高了硬件资源的利用效率。随着移动硬盘技术的发展,许多用户开始考虑将虚拟机系统安装在移动硬盘上,以便于管理和换机使用。虚拟机装在移动硬盘会伤电脑本身吗?虚拟…

Android面试题精选——再聊Android-Handler机制

​ static final ThreadLocal sThreadLocal new ThreadLocal(); //创建当前线程的Looper对象 private static void prepare(boolean quitAllowed) { if (sThreadLocal.get() ! null) { throw new RuntimeException(“Only one Looper may be created per thread”); } sThre…

LabVIEW 控制 Tucsen 相机

LabVIEW 控制 Tucsen 相机 ucsen 是一家知名的显微镜相机制造商,其相机产品广泛应用于科研、工业和医疗等领域。本文将介绍如何使用 LabVIEW 软件来控制 Tucsen 相机,涵盖相机的基本情况、硬件和软件要求、具体的控制步骤和编程示例。通过使用 LabVIEW&…

[笔记] CCD相机测距相关的一些基础知识

1.35mm胶片相机等效焦距 https://zhuanlan.zhihu.com/p/419616729 拿到摄像头拍摄的数码照片后,我们会看到这样的信息: 这里显示出了两个焦距:一个是实际焦距:5mm,一个是等效焦距:25mm。 实际焦距很容易…

用TensorRT-LLM进行LLama的推理和部署

Deploy an AI Coding Assistant with NVIDIA TensorRT-LLM and NVIDIA Triton | NVIDIA Technical BlogQuick Start Guide — tensorrt_llm documentation (nvidia.github.io) 使用TensorRT-LLM的源码,来下载docker并在docker里编译TensorRT-LLM; 模型…

卤货商家配送小程序商城是怎样的模式

无论生意大小、打造品牌都是必要的一步,只要货品新鲜、味道高、性价比高,其新客转化/老客复购数量都不少,卤货种类多且复购多个单独/聚会场景,以同城主要经营,也有部分品牌有外地食品配送需要。 想要进一步品牌传播、…

大学生自救数据结构与算法(py实现)——01递归

目录 目录 递归 基本概念 工作原理 基本要素 优点 缺点 实现技巧 实例解析:计算阶乘 斐波那契数列 高效的斐波那契数列 python中的最大递归深度 二分查找 基本原理 性能分析 优化与变体 线性递归 元素序列的递归求和 二路递归 二路递归的基本概…

24-6-23-读书笔记(七)-《文稿拾零》豪尔赫·路易斯·博尔赫斯(第三辑)

文章目录 《文稿拾零》阅读笔记记录总结 《文稿拾零》 《文稿拾零》超厚的一本书(570),看得时间比较长,这本书是作者零散时间写的一些关于文学性质的笔记,读起来还是比较无趣的,非常零散,虽然有…

Java面试题:内存管理、类加载机制、对象生命周期及性能优化

1. 说一下 JVM 的主要组成部分及其作用? JVM包含两个子系统和两个组件:Class loader(类装载)、Execution engine(执行引擎)、Runtime data area(运行时数据区)、Native Interface(本地接口)。 Class loader(类装载):根据给定的全限定名类名(如:java.lang.Object)装载class文…

C++风流和MATLAB | Python | CUDA 库埃特流泊肃叶流薄膜流体

🎯要点 🎯无滑移速度边界条件:🖊反弹法计算库埃特流、泊肃叶流 | 🖊湿节点法计算库埃特流、泊肃叶流 | 🎯力模型:🖊反弹法和不同的格子玻尔兹曼体力模型计算泊肃叶流 | &#x1f58…

文章解读与仿真程序复现思路——电力自动化设备EI\CSCD\北大核心《基于已知电网场景分段拟合智能体智能评估与自主进化方法 》

本专栏栏目提供文章与程序复现思路,具体已有的论文与论文源程序可翻阅本博主免费的专栏栏目《论文与完整程序》 论文与完整源程序_电网论文源程序的博客-CSDN博客https://blog.csdn.net/liang674027206/category_12531414.html 电网论文源程序-CSDN博客电网论文源…

无广告、简单、实用的高性能 PDF 处理工具

一、简介 1、无广告、简单、实用的高性能 PDF 处理工具。它安装包大小在 240MB 左右,目前仅支持 Windows 平台。 二、下载 1、文末有下载链接,不明白可以私聊我哈(麻烦咚咚咚,动动小手给个关注收藏小三连,我将继续努力为大家寻找以…