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),并接收从服务器发送回的下行数据包。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

LeetCode:经典题之21、24 题解及延伸

系列目录 88.合并两个有序数组 52.螺旋数组 567.字符串的排列 643.子数组最大平均数 150.逆波兰表达式 61.旋转链表 160.相交链表 83.删除排序链表中的重复元素 389.找不同 1491.去掉最低工资和最高工资后的工资平均值 896.单调序列 206.反转链表 92.反转链表II 141.环形链表 …

深入探讨目标检测算法:原理、方法与应用

目录 1. 目标检测的基本原理 1.1 分类与定位 1.2 评价指标 2. 常见目标检测算法 2.1 传统方法 2.2 基于深度学习的方法 2.2.1 区域提议方法 2.2.2 单阶段检测方法 3. 目标检测算法的发展历程 3.1 早期阶段 3.2 深度学习时代 4. 目标检测的实际应用 4.1 自动驾驶 …

网页背景全屏就这?分享 1 段优质 CSS 代码片段!

大家好,我是大澈! 本文约 700 字,整篇阅读约需 1 分钟。 每日分享一段优质代码片段。 今天分享一段 CSS 代码片段,使用 CSS 设置网页全屏背景图片,很简单。 老规矩,先阅读代码片段并思考,再看…

Android Focused Window的更新

启动App时更新inputInfo/请求焦点窗口流程: App主线程调ViewRootImpl.java的relayoutWindow();然后调用到Wms的relayoutWindow(),窗口布局流程。焦点窗口的更新,通过WMS#updateFocusedWindowLocked()方法开始,下面从这…

MIX OTP——监督树和应用

在上一章关于 GenServer 的内容中,我们实现了 KV.Registry 来管理存储容器。在某个时候,我们开始监控存储容器,这样每当 KV.Bucket 崩溃时,我们就能采取行动。虽然变化相对较小,但它提出了一个 Elixir 开发人员经常问的…

独家原创 | Matlab实现CNN-Transformer多变量时间序列预测

SCI一区级 | Matlab实现BO-Transformer-GRU多变量时间序列预测 目录 SCI一区级 | Matlab实现BO-Transformer-GRU多变量时间序列预测效果一览基本介绍程序设计参考资料 效果一览 基本介绍 1.Matlab实现CNN-Transformer多变量时间序列预测; 2.运行环境为Matlab2023b…

【JavaScript】JavaScript简介

希望文章能给到你启发和灵感~ 如果觉得文章对你有帮助的话,点赞 关注 收藏 支持一下博主吧~ 阅读指南 JavaScript入门(1)————JavaScript简介开篇说明一、什么是JavaScript二、JavaScript的使用2.1 开发工具的选择…

JAVA 面试常见问题详解

JAVA 面试常见问题详解 目录 基础知识 Java基础面向对象编程异常处理 高级特性 多线程与并发集合框架JVM原理 实战问题 代码优化设计模式Spring框架 常见算法与数据结构 排序算法树与图动态规划 系统设计与架构 高并发系统设计分布式系统微服务架构 基础知识 Java基础 JDK…

fiddler抓包工具

概念 概念: Fiddler是一个http协议调试代理工具,它能够记录并检查所有你的电脑和互联网之间的http通讯。 http:不加密,端口为80 https:加密,端口为443 原理: 其实就在访问服务器时&#xff0…

如何在写代码中找到乐趣

平时我们写代码呢,多数情况都是流水线式写代码,基本就可以实现业务逻辑了。 如何在写代码中找到乐趣呢,我觉得,最好的方式就是:使用设计模式优化自己的业务代码。 参考资料: 实战!工作中常用到…

[方法] Unity 3D模型与骨骼动画

1. 在软件中导出3D模型 1.1 3dsmax 2014 1.1.1 TGA转PNG 3dsmax的贴图格式为tga,我们需要在在线格式转换中将其转换为Unity可识别的png格式。 1.1.2 模型导出 导出文件格式为fbx。在导出设置中,要勾选三角算法,取消勾选摄像机和灯光&#…

三秒4张图!让 Stable Diffusion 出图速度暴增的新一代生成模型LCM!

前言 大家好,这里是和你们一起探索 AI绘画月月~ 最近一种新的图像生成形式逐渐兴起,即生成的图像会随输入的文字或笔画动作迅速变化,这让图像生成有了更多灵活探索和准确控制的空间。这种「实时反馈」的感觉源于模型能在几秒钟内&#xff0…

springMVC中的拦截器

文章目录 11、拦截器11.1书写拦截器的步骤一、首先需要在SpringMVC.xml中配置拦截器二、处理完配置文件进行配置类的书写书写的类需要实现HandlerInterceptor接口 11.2多个拦截器的执行顺序⑴如果每个拦截器的preHandle()都返回true⑵如果某个拦截器的preHandle()返回了false⑵…

fiddler 返回Raw乱码

有时会发现自己发送的请求后,返回结果Raw里面是乱码,可以勾选Decode并重新发送请求就解决了 这个时候将Decode勾选一下 此时就好了

【C++ | 委托构造函数】委托构造函数 详解 及 例子源码

😁博客主页😁:🚀https://blog.csdn.net/wkd_007🚀 🤑博客内容🤑:🍭嵌入式开发、Linux、C语言、C、数据结构、音视频🍭 🤣本文内容🤣&a…

解释一下MVP和MVVM设计模式及其优缺点

MVP(Model-View-Presenter)设计模式 定义: MVP是一种软件架构设计模式,它将应用程序分为三个主要部分:模型(Model)、视图(View)和展示器(Presenter&#xff…

模版总结小全

BFS 最短步数问题 #include<iostream> #include<queue> #include<cstring> using namespace std;const int N 50; char g[N][N],d[N][N]; int dx[] {-1,0,1,0}; int dy[] {0,1,0,-1}; int n,m;int bfs(int x,int y){queue<pair<int,int> > q…

【Ubuntu】如何用指令设置静态IP

这里介绍的是利用netplan 的配置文件一般在 /etc/netplan/ 目录下&#xff0c;文件名类似 01-network-manager-all.yaml。 用 nano/ vim 编辑器打开配置文件&#xff1a; sudo nano /etc/netplan/01-network-manager-all.yaml # 替换成你的文件名修改配置文件 network:versi…

MySQL高级-SQL优化-insert优化-批量插入-手动提交事务-主键顺序插入

文章目录 1、批量插入1.1、大批量插入数据1.2、启动Linux中的mysql服务1.3、客户端连接到mysql数据库&#xff0c;加上参数 --local-infile1.4、查询当前会话中 local_infile 系统变量的值。1.5、开启从本地文件加载数据到服务器的功能1.6、创建表 tb_user 结构1.7、上传文件到…

mysql_config 命令, 可以查看mysqlclient库的位置在/usr/lib64/mysql下

好吧&#xff0c;其实我是从这里知道了 -l 后面加的库名和so文件这种名不一样&#xff0c;因为库文件实际叫下面这个名&#xff08;前面有lib)。