🍓ESP32(Arduino)和Raspberry Pi(Node-RED)LoRa和ESP-NOW大范围数据通讯中继系统
ESP32 | Arduino | Raspberry Pi | Node-RED | LoRa | ESP-NOW | C/C++ | 通用异步收发器(UART) | MQTT
数据中继系统是一种无需依赖 WiFi 从远程传感器收集数据的简单方法。 它基于 ESP-NOW 协议,该协议可在 ESP32 和 ESP8266 微控制器板上轻松使用。 该系统可用于在难以提供完整 WiFi 覆盖或过于耗能的情况下收集和传输传感器数据。
使用分配的 MAC 地址方案允许在代码中设置少量值来配置整个系统。 每个无线网关都分配有一个单字节标识符,称为 UNIT_MAC。 这与一组 5 字节前缀一起被分配给 ESP 的 MAC 地址。
硬件布局
传感器收集数据并通过 ESP-NOW 或 LoRa 将其发送到网关。网关通过 ESP-NOW、LoRa、UART 和/或 MQTT 侦听数据包,然后使用一个或多个相同接口重新传输数据包。
Node-RED 前端可以设置这些节点来格式化数据并将其发送到数据库。
中继只是重新传输 ESP-NOW 数据包以扩展网络范围,而网关则根据需要在 ESP-NOW、MQTT over Wi-Fi、LoRa 或串行消息之间转换数据包。 每个中继器和网关都有一个唯一的 UNIT_MAC 用于寻址。 处理 ESP 设备通信的代码很简单,并且有据可查,因此您只需要设置一些配置值,然后就可以将精力集中在特定应用程序所需的代码上。
该系统的中心是一个运行 Node-RED 的 Raspberry Pi,它充当最终的 MQTT 网关并连接到 ESP MQTT 网关。 这意味着所有操作都发生在本地网络中,而不依赖于互联网连接和云服务。 但是,它仍然可以根据需要使用 MQTT 或任何其他协议通过 Internet 发送和接收数据。 Node-RED 使得构建自定义自动化和界面变得特别容易。
代码结构
网关
网关通过 ESP-NOW、UART、LoRa 和/或 MQTT 侦听数据包,然后使用配置文件“操作”部分中定义的规则通过这些接口重新传输数据包。
动作定义网关如何对通过每个数据源接收的数据包做出反应。 一个动作可以由一个或多个用分号分隔(并以分号结尾)的命令组成。
以下命令立即重新发送数据:sendESPNOW(MAC)、sendSerial() 和 sendMQTT()。
这些命令将数据发送到缓冲区,按一定时间间隔释放:bufferLoRa(interface)、bufferESPNOW(interface)、bufferSerial() 和 bufferMQTT()。
例如,网关设置为接收它接收到的任何 ESP-NOW 数据包并首先通过串行端口发送,然后通过 ESP-NOW 将其重新传输到地址为 0x01 的另一个网关:
路由
除了对来自一般(未知)ESP-NOW 和 LoRa 设备的数据包做出反应外,网关还可以侦听来自特定对等设备地址 (MAC) 的流量,并对一般流量做出不同的反应。 这可用于向上游或下游“推进”数据包,并允许用户为来自任一方向的数据定义不同的路径。 用户最多可以为 ESP-NOW 和 LoRa 接口(ESPNOW1 & ESPNOW2 和 LORA1 & LORA2)定义两个对等地址。
每个对等点也有一个与之关联的发送缓冲区。 通过取消注释相应的 DELAY 宏(例如:#define LORAG_DELAY 1000)来启用缓冲区。 启用后,网关将按照指定的时间间隔自动发送缓冲区内容。
虽然 ESP-NOW 足够快,可以实时处理大量流量,但 LoRa 的速度要慢得多。 因此,您必须将 LoRa 数据发送到缓冲区。 由于缓冲区是强制性的,因此始终需要使用 LoRa 对等体配置 LoRa 中继器。
缓冲区最多可容纳 256 个 DataReading。
工作示意图
基础设置和高级设置
基础设置和高级设置(LoRa)
设置传感器
应用示例代码
LoRa 传感器
ESP-NOW 传感器
ESP-NOW 网关
UART 网关
MQTT 网关
通用网关
源代码
🏈指点迷津 | BriefLast updated