基于ESP32的单通道LoRaWAN网关设计资料介绍-操作模式

资料下载链接》》

介绍

这是在由ESP8266/ESP32 mcu和sx1276无线电组成的平台上实现LoRa网关功能的第6代软件。与旧版本的网关不同,此版本将在单一频率上收听所有可用的扩频因子 (SF)。网关使用 Web 功能(通过 Intranet)启用网关的监控和配置。

网关在与本地 OLED 显示器连接时,也会显示它所连接的 WiFi 地址(在本例中为 138),并能够通过互联网跟踪其性能。

CAD

默认情况下,此网关将在一个频道上侦听,并在该频道上侦听所有可用的传播因子。为此,我们使用了下面描述的 CAD(信道活动检测)功能。CAD 模式可由用户配置,但用户必须在使用的界面中手动选择CAD 模式或在configGway.h 文件中设置CAD 模式。

CAD 是标准接收模式,它的性能(几乎)与我们仅收听一个频道和一个扩频因子的模式相同。所以建议在配置文件中开启CAD功能。

HOP

此外,我们已尝试将跳频集成到此版本的网关中。但是,此功能充其量只是实验性的,尚未准备好投入生产。软件没有注意到很多传入的消息。问题是该芯片确实有支持中断和寄存器来发现给定频率的扩频因子活动,但它没有任何工具来检测其他频率上的传入消息(阅读下面的详细分析)。

部分功能支持

  1. 该系统确实支持CAD模式(见下文)
  2. Web服务器支持配置和动态设置参数。
  3. SPIFFS 文件系统用于存储重要的配置数据
  4. Web 界面允许设置调试模式、网关传感器、刷新网页、重置引导等。
  5. 显着减少内存使用
  6. 集成了导致异常的几个错误修复
  7. 现在可以通过 IDE/USB 进行无线更新
  8. OLED 128x64 支持(SSD1306 库是 Arduino IDE 支持的库之一)

网关组件

网关草图由多个文件中的多个组件组成。这些都是:

  • ESP-sc-gway-4.ino;这是网关的主要草图。它确实包含 setup() 和 loop(0 函数并执行最重要的函数(在其他文件中找到)
  • 配置网关.h;该文件包含程序的大部分(如果不是全部)可配置参数和设置。它允许用户在编译时在代码中包含功能(或在不需要时省略功能),并允许用户在运行时设置控制网关行为的参数。
  • _loraModem.ino;该文件包含网关的所有相关无线电功能。这包括 sx1276 DIO 引脚的中断处理程序以及发送和接收功能
  • loraModem.h; 包含 _loraModem.ino 函数使用的中断、状态、寄存器等的所有定义
  • _传感器.ino;包含让网关也充当传感器节点的代码。此功能对于从网关接收实时操作参数特别有用
  • _lora文件.ino;实现LoRa文件操作函数
  • _wwwServer.ino;这个重要文件包含网关的 Web 服务器组件。所有网络服务器布局和控制选项都可以在这个文件中找到
  • _otaServer.ino;此文件处理所有 OTA(无线)更新功能

网关操作模式

网关有 3 种操作模式:

  1. STD;标准单通道操作,只有一个通道和一个扩频因子。可以使用 Web 界面更改频率和扩频因子。配置值被写入文件系统,
  2. CAD;该系统使用一个频率,但能够接收所有扩频因子。
  3. HOP; 保留用于跳频(实验)

1. STD模式

在单通道网关标准模式下,用户可以选择用于接收消息的频率和扩频因子。网关将表现得像一个真正的单通道网关;只能设置一个频率和一个扩频因子。

STD 模式的优点是,正如我们知道我们监听新消息到达的频率和扩频因子一样,整个配置都针对这种用途进行了调整。例如:我们可以接收到 RSSI 非常低(-120dB 或更低)的消息,这在 CAD 操作模式下是不可能的。此外,尽管我们没有迹象表明系统在 CAD 模式下会丢失更多消息,但此模式可能更可靠一些。

频率和扩频因子可以在 configGway.h 文件中设置为默认值,也可以使用网络服务器界面设置(和更改)。

2. 通道活动检测(CAD)

信道活动检测 (CAD) 是 LoRa 无线电的一项功能。这意味着无线电会检测范围内的另一个 LoRa 设备是否正在传输,当接收器检测到时,该设备将不会在该信道或扩频因子上传输以避免冲突。在实际传输数据(有效载荷)开始之前的一小段时间内,每个发射器都会发出前导信号,向其他设备指示该设备已准备好传输数据。

尽管 CAD 旨在供节点用于检测给定频率/扩频因子组合上的其他活动,但它也可以由我们的单通道网关使用。如果网关可以使用 CAD 功能来检测给定频段上的传入消息,我们可以快速将接收器设置为该频率和扩频因子并接收传入消息。

现在我们有了 CAD 模式及其所有优点,我们为什么还要使用 STD 模式?答案在于我们在网关代码中使用 CAD 函数的方式。在我们的代码中,我们将芯片置于 CAD 模式并设置中断,以便一旦无线电检测到来自其他节点的活动,我们就会收到 CADDONE 中断。这告诉我们有人正在我们当前的频率上开始传输。

无线电将针对其当前频率获得此中断,但它不知道远程节点将使用哪个扩频因子发送消息。

所以接下来我们检查rssi(信号强度),我们使用sx1276的正常rssi并减去157进行校正。结果数字是接收器的 rssi。(包rssi(prssi)是另一个描述最后收到的包的rssi的参数,但在CAD模式下不使用)。当我们收到具有高 rssi 的 CADDONE 中断时,我们可能很快就会收到该频率的消息。所以我们需要弄清楚发送方开始传输的扩频因子。因此,我们将从 SF7 开始,向上移动到下一个因素,直到我们在 DIO1 上收到 CADDETECT 中断。可以通过设置 RSSI_LIMIT 定义在 loraModem.h 文件中配置确定是否有消息到达无线电接收器的 RSSI 参数。默认值为 40,

一旦我们在 DIO 1 上收到 CADDETECT 中断,我们就知道有一条关于我们正确频率和扩频因子的消息。然后我们将无线电置于消息接收模式并等待 RXDONE 中断,它告诉我们完整的消息已被接收并已在 FIFO 缓冲区中准备就绪。

如果由于某种原因在特定时间内没有消息到达,我们将收到 RXTOUT(超时)中断,而不是告诉我们超时并且没有收到消息。

如果我们收到一条消息,我们设置状态变量,以便在下一次 loop() 迭代中从 FIFO 缓冲区中读取消息。

接下来,无论我们是否收到消息,都会再次将模式设置为扫描。

优点

使用 CAD 模式比 STD 更多有几个优点。选择 CAD 使网关更加通用,它可以接收从 SF7 到 SF12 的消息。尽管对于大多数应用程序来说,接收可能不像“真正的”网关那样敏感,但它可以完成这项工作。

3.HOP;跳频模式(实验)

这种模式是非常实验性的,还不能按照预期的方式工作。使用 HOP 模式,系统将具有与 CAD 模式相同的功能,但还具有在 3 个频率上收听消息的附加值。这意味着单通道网关将充当三个频率的成熟网关(根据规范,这是最小值)。

HOP问题

跳频功能比CAD功能更难实现。这是因为 CAD 或多或少会自动为给定频率工作,并且接收器可以等待 CADDONE 中断,告知可能有一条消息正在等待该频率的一个扩频因子。

对于跳频,这不起作用,因为没有机制告诉我们可能有消息到达另一个频率,而不是我们正在调谐的频率。因此,如果我们想要实现可靠的跳频功能,我们必须设置一个定时器中断,一旦在特定时间内没有检测到频率上的传入活动,该中断就会触发。

那么跳跃模式的理想等待时间是多少,我们如何实现一个定时器。

重新 1. 计时器周期应足够长,以确定该频率上没有活动。所以我们应该只在状态为 S_SCAN 时切换。
关于 2。可以连接外部时钟/定时器并将其引脚连接到 ESP8266 的空闲 GPIO 引脚之一,或者可以为此目的使用内部定时器之一。第一个是一个选项,但会使代码更加复杂,并向网关添加额外的硬件。第二个选项内部计时器是一个选项,但前提是它的使用不会干扰 ESP8266 的内部管理功能(例如 Wifi 处理等)。

因此,考虑到这两个选项,可以选择只使用微秒定时器来实现他的目的,但不使用任何中断处理,而是使用 loop() 函数本身。切换前超时约为 2500 uSec。

HOP优势

如果 HOP 模式工作没有问题,它使我们的网关或多或少成为支持 3 个频率和所有扩频因子的“真正的”网关。

接收信号强度指数

RSSI 代表接收信号强度指示器,是在接收器上测量的,以确定发送器的信号质量。通过读取寄存器 0x​​1B,可以随时在接收器端测量正常的 RSSI。SX1276/RFM95 收发器包含一个特殊寄存器 0x​​1A,其中包含平均数据包 RSSI 信息。

CAD 使用 RSSI 函数来确定我们是否收到消息。这与 RFM95 的设计不同,因为可能会收到低于本底噪声的所有新消息,并且使用 RSSI 不是最可靠的过程。

可以通过添加 TS_RE + TS_RSSI 来计算正确的 RSSI 样本(根据 RFM95 手册第 4.2.5.3 段)

DIO 引脚输出

在 sx1276 数据表中,我们发现 DIO 0 和 DIO 1 用于处理 CAD 中断和消息接收。因此,在网关的 3.x 版中我们只使用 dio0,现在我们使用 dio0 和 dio1 来检测 CAD 和 RX 超时事件。这也意味着用户必须修改他们的网关并在 loraModem.h 文件中正确设置引脚。

此代码假定我们将所有 DIO 线映射到 GPIO15。当 dio0 和 dio1 具有相同的值集时,代码“看到”了这一点。然后它假定我们对中断进行多路复用,并将在 setup() 中进行适当的初始化。这只能通过使用二极管将 DIO 0、1 和必要时 DIO 2 连接到 GPIO15 引脚来完成,这就是 Hallard PCB 进行多路复用的方式。

1-ch Gateway 采用 Hallard PCB

这种中断共享方法的优点是只使用了一根 GPO 线,在 ESP8266 上留下了更多的 GPIO 引脚用于连接传感器。

使用 Comresult PCB 制作的 1 通道网关

配置参数设置

网关的操作模式及其大部分设置都可以由用户控制。设置运行参数有两种方式:

  1. 在 configGway.h 文件中设置和定义参数
  2. 使用 Web 界面设置参数

这两种方法共同生活了很多。但是,有时在 configGway.h 文件中设置的值会使相同的设置也会在 Web 界面上消失。将 .h 文件中的 A_SERVER 参数设置为 0 时尤其如此。在这种情况下,未定义 Web 服务器,其代码不包含在可执行文件中。

在 configGway.h 中设置指令

可以设置的大多数参数都是编译时指令,以便根据 configGway.h 文件中指令的值编译或不编译代码。这样,当不使用函数时,代码库可以保持较小。示例:可以根据 configGway.h 文件中 WIFIMANAGER 的设置打开或关闭对 Wifi Manager 的支持。

#define WIFIMANAGER 0

通过将定义更改为“1”,使用 Wifi 管理器的完整功能将包含在代码中并进行编译。通过使用“0”,所有与此功能相关的功能都从网关代码中排除。

可以在 .h 文件中设置几个参数或编译器指令,例如:

_DUSB 1; Initial value of the USB debug variable.
_STRICT_CH 0; Leave this parameter on 0 unless you like to correct the frequency/sf set by the backend.
_CAD
STATISTICS 1; This parameter determines whether or not the gateway will report statistics on its use. This like total messages received etc. will or will not be reported. If you set this parameter to 2, it will gather statistics on SF of messages received and report through the web interface.
MAX_STAT 20; Sets the number of lines in the web interface and records that are kept in memory of the last messages successfully received.
WIFIMANAGER 0; Set to OFF by default. If you like to use WiFi manager, please set it to 1
AP_NAME "<Name your gateway accesspoint>";
AP_PASSWD "<Your Access Point password>";
GATEWAYMGT 1;
CFG_sx1276_radio; Let this one be defined in this version. The code will support sx1272 with probably minor modifications as well, but this has not been tested.
CONFIGFILE "/gwayConfig.txt"; 该参数告诉我们用于存储配置数据的 SPIFFS 文件的名称。
_LOCUDPPORT 1700
_PULL_INTERVAL 30
_STAT_INTERVAL 60
_NTP_INTERVAL 3600
_TTNPORT 1700
_TTNSERVER "router.eu.thethings.network"
_THINGPORT <Your Port>; Second backend server to send messages to. Leave undefined (comment #define out) if not used
_THINGSERVER "<Your Backend DNS name>"; Second backend server to send messages to. Leave undefined (comment #define out) if not used
GATEWAYNODE 0;
#if GATEWAYNODE==1
#define _DEVADDR { 0x26, 0x01, 0x15, 0x3D }
#define _APPSKEY { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }
#define _NWKSKEY { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }
#define _SENSOR_INTERVAL 300
#endif
_DESCRIPTION "ESP Gateway"
_EMAIL "<Your Email>"
_PLATFORM "ESP8266"
_LAT <Your LAT>
_LON <Your LON>
_ALT <Your ALT>
A_SERVER 1; Enable the webserver. Do not touch unless you know what you are doing
A_REFRESH <秒数>   //seconds between webpage refresh. 0 stops automatic refresh
A_SERVERPORT 80
A_MAXBUFSIZE 192
_BAUDRATE 115200     // Do not touch

大多数以“_”开头的参数只是参数。如果您知道自己在做什么,请仅更改这些。如果参数包含“<xxx>”,则意味着您必须将自己的值放在那里。毕竟,将我的电子邮件地址或 GPS 数据放入您的配置中没有任何意义。

#define 设置的remanding 部分应该是根据您自己的喜好包含或不包含代码的某些部分。

通过网络服务器界面设置参数

其他一些参数最好使用网络服务器界面进行设置。这方面的例子是 CAD 和 HOP 的模式选择。可以使用网络服务器更改以下设置:

  • 调试设置。Web 服务器将允许选择 3 个值进行调试。如果 Debug 设置为 2,将出现 2 个更多的调试设置。这些仅用于测试中断机器,可能会在稍后阶段消失(以尽量减少内存使用)。
  • CAD 开/关设置
  • HOP 开/关设置
  • 扩频因子设置,当 CAD 关闭时
  • 频率设置,当 HOP 关闭时
  • 重置统计数据
  • 下行链路时序

资料下载链接》》

猜你喜欢

转载自blog.csdn.net/tianqiquan/article/details/130663852
今日推荐