LoRaMessenger
LoRaMessenger是配备 LoRa 的 ESP32 节点之间的离网聊天工具,具有简单的无线网络界面。
ESP32 托管一个 Wi-Fi 网络,该网络将提供一个简单的类似聊天的界面,该界面将显示在线节点、接收和发送的消息,以及一些用于设置节点名称、目标节点和消息的文本框。
由于LoRa通信协议用于发送和接收消息,因此可以设置两个或多个模块来发送和接收消息,最远距离可达几公里。
大多数 ESP32 LoRa 模块(例如 TTGO LoRa32 或 Heltec Wifi LoRa 32)都配备了显示屏,因此您可以独立使用它们来像寻呼机一样接收消息。
节点可以很容易地安装在带有电池的小盒子内,从而创建一个即使在没有电话信号的区域也可以进行通信的通信系统。
网页界面
ESP32 启动后,会创建一个名为LoRaMessenger [number] 的新 Wi-Fi 网络。
当设备连接到网络时,Web 界面应自动打开,如果没有任何反应,可以通过打开 Web 浏览器并导航到 ESP32 IP(默认为 1.1.1.1)来访问该界面。
在 Android 上,连接到 Wi-Fi 网络后会打开包含 Web 界面的 wifi 登录页面。这样,即使使用LoRaMessenger也能维持后台 4g 网络连接。通知面板中应显示登录网络的通知,并且可以随时打开以再次显示界面。
Web 界面现已显示在您的浏览器上,聊天具有以下功能:
- 在页面顶部,可以输入节点名称,以便收件人知道谁在写信。按更新后,名称将被保存并发送到所有可到达的节点。
- 在线部分显示检测到的所有可用节点,以及一些附加信息,例如接收节点正在使用的中继节点(如果存在)、接收 RSSI、中继之间的跳数以及自上次联系以来经过的时间。
- 消息部分按时间顺序显示最近 5 条(默认情况下,用户可设置)发送和接收的消息。每条消息下方都会标明所有正确接收到该消息的节点的名称。
- 页面底部有两个文本框,第一个用于设置目的节点,第二个用于写入消息。
默认情况下,目标字段包含广播值。这样消息就会发送到所有可用的节点。您还可以完全按照在线部分中报告的方式编写节点名称,以仅将消息发送给特定收件人。
请注意,截至目前,需要刷新页面才能更新收到的消息和已读回执。
LoRa协议
LoRaMessenger使用自定义通信协议,发送的每个数据包均由标头和负载组成。
标头提供了网络和数据包路由正常工作所需的信息,标头中包含的参数如下:
- NETID:网络ID,在config.h中指定。这允许创建多个独立网络。
- TTL:数据包生存时间,在 config.h 中指定。该值用于了解数据包已经完成了多少跳,并且是路由算法所需要的。
- 接收器:接收器节点号。
- SENDER:发送方节点号。
- LAST NODE:发送方节点号或中继数据包的最后一个节点。
- 下一个节点:接收器节点号或将数据包中继到接收器节点所需的下一个节点。
- ID:数据包ID,从同一节点发送的每个数据包都有其唯一的4字节长ID。这需要丢弃已经接收到的数据包并发送接收到的确认。
- PAYLOAD TYPE:有效负载类型,用于正确解释有效负载。可能的有效负载类型有:消息、确认和公告。
消息负载:
- MESSAGE SIZE:消息读取所需的消息大小(以字节为单位)。
- 消息:消息内容。目前以纯文本形式发送!
确认有效负载:
- 接收到的数据包 ID:接收到的消息数据包的 ID。这将被发送回发送者,让他知道数据包已收到。
公布有效负载:
- NAME SIZE:名称读取所需的节点名称大小(以字节为单位)。
- 节点名称:节点名称。这显示在每个节点 Web 界面上,并且可以写入目标字段以仅向特定节点发送消息。
数据包中继和路由
LoRaMessenger创建了一个节点网络,能够将消息转发到发送者无法直接到达的节点。
为此,每个节点都使用一个自动路由表,其中包含目标节点和到达这些节点的最佳路由。该表通过定期发送的公告数据包或在所有节点更改名称时进行更新。
当前的路由算法非常简单,并且更喜欢较少的跳数,在两条路由具有相同跳数的情况下,选择与下一个最强节点连接的路由。
安装
通过在 platformio 中导入项目、更新设置并将其上传到开发板,可以轻松安装该程序。
配置
在包含文件夹中,存在一个名为 config.h 的配置文件。该文件包含LoRaMessenger运行所需的所有设置。
洛拉配置:
- LORABAND:LoRa 芯片频率。频率取决于您的主板和当地允许的频率,请确保仅使用您所在国家/地区允许的频率,更多信息请参见此处。
可能的值:433E6、866E6、915E6。 - SPREADINGFACTOR:LoRa 扩频因子。使用高于 7 的值时要小心,因为LoRaMessenger尊重传输占空比。高值会大大减慢传输之间的等待时间,并可能影响正确操作,可能需要进行其他调整,例如防冲突时间。可能的值:7 - 12。
- TXDBM:LoRa芯片的传输功率。
可能的值:1 - 20 - LORADUTY:传输占空比。请务必仅使用您所在国家/地区允许的值。可能的值:1 - 99。
- NETID: LoRaMessenger网络 ID。这允许创建多个独立网络。
可能的值:0 - 255。
L1配置:
- L1BUFFER:传输数据包队列。如果使用大型节点网络或使用高扩频因子,则增加。
- TTL:数据包生存时间。设置数据包在过期之前可以进行的最大跳数。
可能的值:1(仅直接消息,无中继),>1。 - BROADCASTADDR:广播地址号。
三层配置:
- NODENUMBER:本地节点号。每个节点需要不同的节点号!您可以将其视为相当于常规网络的 IP 地址。
可能的值:1 - 255。注意不要使用与 BROADCASTADDR 相同的地址! - MAXNODES:网络中预期的最大节点数。
- ANNOUNCEMINS:节点存在公告和名称更新。需要此消息来通知所有节点所有其他节点的存在。如果使用静态节点、高扩散因子或大型网络,则可以增加间隔以防止垃圾邮件。
- INACTIVEMINS:节点被视为离线所需的不活动时间。注意至少使用 ANNOUNCEMINS 值的 2-3 倍,如果接收效果不佳,则使用更大的值。
- INACTIVESECONDSREMOVECHECK:检查离线节点删除的时间间隔。
消息配置:
- SHOWNMESSAGES:要在 Web 界面上显示的消息数。
- KEEPNMESSAGES:要保留在内存中的消息数。
显示配置:
- DISPLAYSTBYSECS:显示器关闭后的秒数。
网络配置:
- WIFI 已启用:Wi-Fi 已启用。这可以用于减少部署节点仅用于中继消息的情况下所使用的功率。
- NODENAMEOVERRIDEEN:节点名称覆盖启用。用于将默认节点名称(节点 [编号])覆盖为 NODENAMEOVERRIDE 中指定的字符串。
- NODENAMEOVERRIDE:Nome 名称覆盖。这可用于设置节点名称,而无需在 Web 界面上修改它。在设置仅中继节点时很有用。
- WIFISSID:Wi-Fi 网络名称前缀( LoRaMessenger [数字])
- DNSPORT:DNS 端口。
引脚排列:
- SCK:SPI时钟。
- 味噌:SPI味噌。
- MOSI:SPI MOSI。
- SS:SPI 从机选择。
- RST:LoRa 芯片复位。
- DI0:LoRa 接收回调。
- I2CSCL:I2C 时钟。
- I2CSDA:I2C 数据。
- LCDRESET:液晶屏复位。
如果使用其他板,可能需要编辑引脚定义(引脚定义基于 TTGO LoRa32 V2)。
未来的改进/修复
未来计划的其他功能包括:
- 消息加密,从右侧开始,所有消息均未加密发送。
- 自动消息刷新。
- 路由算法的测试和改进。
执照
麻省理工学院许可证。