LoRaMessenger
LoRaMessenger ist ein netzunabhängiger Chat zwischen mit LoRa ausgestatteten ESP32-Knoten mit einer einfachen drahtlosen Webschnittstelle.
Der ESP32 hostet ein Wi-Fi-Netzwerk, das eine einfache Chat-ähnliche Schnittstelle bereitstellt, die Online-Knoten, empfangene und gesendete Nachrichten sowie einige Textfelder zum Festlegen des Knotennamens, des Zielknotens und der Nachricht anzeigt.
Da das LoRa-Kommunikationsprotokoll zum Senden und Empfangen von Nachrichten verwendet wird, ist es möglich, zwei oder mehr Module so einzustellen, dass Nachrichten bis zu einer Entfernung von einigen Kilometern gesendet und empfangen werden.
Die meisten ESP32-LoRa-Module, wie zum Beispiel das TTGO LoRa32 oder Heltec Wifi LoRa 32, sind mit einem Display ausgestattet, sodass Sie sie unabhängig voneinander verwenden können, um Nachrichten wie einen Pager zu empfangen.
Ein Knoten kann einfach in einer kleinen Box mit einer Batterie installiert werden und so ein Kommunikationssystem schaffen, das auch in Bereichen kommunizieren kann, in denen kein Telefonsignal vorhanden ist.
Webschnittstelle
Nach dem Start des ESP32 wird ein neues WLAN-Netzwerk namens LoRaMessenger [Nummer] erstellt.
Wenn ein Gerät eine Verbindung zum Netzwerk herstellt, sollte sich die Webschnittstelle automatisch öffnen. Wenn nichts passiert, kann auf die Schnittstelle zugegriffen werden, indem ein Webbrowser geöffnet und zur ESP32-IP navigiert wird, die standardmäßig 1.1.1.1 lautet.
Unter Android wird nach der Verbindung mit dem WLAN-Netzwerk eine WLAN-Anmeldeseite mit der Webschnittstelle geöffnet. Auf diese Weise bleibt die 4G-Netzwerkverbindung im Hintergrund auch bei Verwendung LoRaMessenger aufrechterhalten. Eine Benachrichtigung über die Anmeldung beim Netzwerk sollte im Benachrichtigungsfeld verbleiben und kann jederzeit geöffnet werden, um die Benutzeroberfläche erneut anzuzeigen.
Die Weboberfläche wird nun in Ihrem Browser angezeigt. Der Chat verfügt über die folgenden Funktionen:
- Oben auf der Seite kann der Knotenname eingegeben werden, damit der Empfänger weiß, wer schreibt. Nach Drücken von „Aktualisieren“ wird der Name gespeichert und an alle erreichbaren Knoten gesendet.
- Der Online-Bereich zeigt alle erkannten verfügbaren Knoten mit einigen zusätzlichen Informationen an, z. B. dem Relay-Knoten, der vom empfangenden Knoten verwendet wird, falls vorhanden, dem empfangenden RSSI, der Anzahl der Sprünge zwischen Relays und der seit dem letzten Kontakt verstrichenen Zeit.
- Im Nachrichtenbereich werden die letzten 5 (standardmäßig vom Benutzer einstellbaren) gesendeten und empfangenen Nachrichten in chronologischer Reihenfolge angezeigt. Unter jeder Nachricht wird der Name aller Knoten angezeigt, die die Nachricht korrekt empfangen haben.
- Unten auf der Seite befinden sich zwei Textfelder. Das erste dient zum Festlegen des Zielknotens und das zweite zum Schreiben der Nachricht.
Das Zielfeld enthält standardmäßig den Broadcast-Wert. Auf diese Weise wird die Nachricht an alle verfügbaren Knoten gesendet. Sie können den Namen eines Knotens auch genau so eingeben, wie im Online-Bereich angegeben, um die Nachricht nur an einen bestimmten Empfänger zu senden.
Beachten Sie, dass ab sofort eine Seitenaktualisierung erforderlich ist, um die empfangenen Nachrichten und Lesebestätigungen zu aktualisieren.
LoRa-Protokoll
LoRaMessenger verwendet ein benutzerdefiniertes Kommunikationsprotokoll. Jedes gesendete Paket besteht aus einem Header und einer Nutzlast.
Der Header stellt die Informationen bereit, die für das ordnungsgemäße Funktionieren des Netzwerks und des Paketroutings erforderlich sind. Die im Header enthaltenen Parameter lauten wie folgt:
- NETID: Netzwerk-ID, angegeben in config.h. Dies ermöglicht die Erstellung mehrerer unabhängiger Netzwerke.
- TTL: Lebensdauer des Pakets, angegeben in config.h. Dieser Wert wird verwendet, um zu wissen, wie viele Sprünge ein Paket gemacht hat, und wird vom Routing-Algorithmus benötigt.
- RECEIVER: Knotennummer des Empfängers.
- SENDER: Knotennummer des Senders.
- LETZTER KNOTEN: Nummer des Absenderknotens oder letzter Knoten, der das Paket weitergeleitet hat.
- NÄCHSTER KNOTEN: Empfängerknotennummer oder nächster Knoten, der benötigt wird, um das Paket an den Empfängerknoten weiterzuleiten.
- ID: Paket-ID. Jedes vom selben Knoten gesendete Paket hat seine eindeutige 4 Byte lange ID. Dies ist erforderlich, um bereits empfangene Pakete zu verwerfen und eine Empfangsbestätigung zu senden.
- PAYLOAD TYPE: Nutzlasttyp, der zur korrekten Interpretation der Nutzlast verwendet wird. Mögliche Nutzlasttypen sind: Nachricht, Bestätigung und Ankündigung.
Nachrichtennutzlast:
- NACHRICHTSGRÖSSE: Nachrichtengröße in Bytes, die zum Lesen der Nachricht benötigt wird.
- NACHRICHT: Nachrichteninhalt. Dies wird vorerst im Klartext gesendet!
Bestätigungsnutzlast:
- EMPFANGENE PAKET-ID: ID des empfangenen Nachrichtenpakets. Dies wird an den Absender zurückgesendet, um ihm mitzuteilen, dass das Paket empfangen wurde.
Nutzlast bekannt geben:
- NAMENSGRÖSSE: Größe des Knotennamens in Bytes, die zum Lesen des Namens benötigt wird.
- KNOTENNAME: Knotenname. Dies wird auf der Webschnittstelle jedes Knotens angezeigt und kann in das Zielfeld geschrieben werden, um eine Nachricht nur an einen bestimmten Knoten zu senden.
Paketweiterleitung und -routing
LoRaMessenger erstellt ein Netzwerk von Knoten, die in der Lage sind, Nachrichten an Knoten weiterzuleiten, die für den Absender nicht direkt erreichbar sind.
Zu diesem Zweck verwendet jeder Knoten eine automatische Routing-Tabelle, die die Zielknoten und die beste Route zum Erreichen dieser Knoten enthält. Die Tabelle wird durch Ankündigungspakete aktualisiert, die regelmäßig oder bei Namensänderungen von allen Knoten gesendet werden.
Der aktuelle Routing-Algorithmus ist sehr einfach und bevorzugt eine geringere Anzahl an Hops, bei zwei Routen mit gleicher Anzahl an Hops wird diejenige mit der Verbindung zum nächststärkeren Knoten gewählt.
Installation
Dieses Programm kann einfach installiert werden, indem das Projekt in Platformio importiert, die Einstellungen aktualisiert und auf die Boards hochgeladen wird.
Konfiguration
Im Includes-Ordner befindet sich eine Konfigurationsdatei namens config.h. Diese Datei enthält alle Einstellungen, die für die Funktion LoRaMessenger erforderlich sind.
LoRa-Konfiguration:
- LORABAND: LoRa-Chipfrequenz. Die Frequenz hängt von Ihrem Board und den vor Ort zulässigen Frequenzen ab. Bitte stellen Sie sicher, dass Sie nur die in Ihrem Land zulässigen Frequenzen verwenden. Weitere Informationen finden Sie hier.
Mögliche Werte: 433E6, 866E6, 915E6. - SPREADINGFACTOR: LoRa-Spreading-Faktor. Seien Sie vorsichtig, wenn Sie Werte über 7 verwenden, da LoRaMessenger den Übertragungs-Arbeitszyklus berücksichtigt. Hohe Werte verlangsamen die Wartezeit zwischen den Übertragungen erheblich und könnten den korrekten Betrieb beeinträchtigen. Möglicherweise sind andere Anpassungen wie die Antikollisionszeit erforderlich. Mögliche Werte: 7 - 12.
- TXDBM: Sendeleistung des LoRa-Chips.
Mögliche Werte: 1 - 20 - LORADUTY: Übertragungs-Arbeitszyklus. Stellen Sie sicher, dass Sie nur die in Ihrem Land zulässigen Werte verwenden. Mögliche Werte: 1 - 99.
- NETID: LoRaMessenger -Netzwerk-ID. Dies ermöglicht die Erstellung mehrerer unabhängiger Netzwerke.
Mögliche Werte: 0 - 255.
L1-Konfiguration:
- L1BUFFER: Übertragungspaketwarteschlange. Erhöhen Sie den Wert, wenn Sie große Knotennetzwerke oder hohe Spreading-Faktoren verwenden.
- TTL: Lebensdauer des Pakets. Legt die maximale Anzahl an Hops fest, die ein Paket ausführen kann, bevor es abläuft.
Mögliche Werte: 1 (nur Direktnachrichten, keine Weiterleitung), >1. - BROADCASTADDR: Broadcast-Adressnummer.
L3-Konfiguration:
- NODENNUMBER: Lokale Knotennummer. Jeder Knoten benötigt eine andere Knotennummer! Sie können sich das als das Äquivalent einer IP-Adresse für ein normales Netzwerk vorstellen.
Mögliche Werte: 1 - 255. Achtung, nicht die gleiche Adresse wie BROADCASTADDR verwenden! - MAXNODES: Maximale Anzahl erwarteter Knoten im Netzwerk.
- ANNOUNCEMINS: Ankündigung der Knotenpräsenz und Namensaktualisierung. Diese Nachricht wird benötigt, um alle Knoten über die Anwesenheit aller anderen Knoten zu informieren. Das Intervall kann erhöht werden, um Spam zu verhindern, wenn statische Knoten, hohe Spreading-Faktoren oder große Netzwerke verwendet werden.
- INACTIVEMINS: Inaktivitätszeit, die benötigt wird, damit ein Knoten als offline betrachtet wird. Achten Sie darauf, mindestens den 2-3-fachen Wert von ANNOUNCEMINS zu verwenden, bei schlechtem Empfang sogar einen höheren Wert.
- INACTIVESECONDSREMOVECHECK: Intervall zur Überprüfung der Entfernung von Offline-Knoten.
Nachrichtenkonfiguration:
- SHOWNMESSAGES: Anzahl der Nachrichten, die auf der Weboberfläche angezeigt werden sollen.
- KEEPNMESSAGES: Anzahl der Nachrichten, die gespeichert werden sollen.
Anzeigekonfiguration:
- DISPLAYSTBYSECS: Anzahl der Sekunden nach dem Ausschalten des Displays.
Netzwerkkonfiguration:
- WIFIENABLED: WLAN aktiviert. Dies kann verwendet werden, um den Stromverbrauch zu reduzieren, wenn ein Knoten nur für die Weiterleitung von Nachrichten eingesetzt wird.
- NODENAMEOVERRIDEEN: Überschreibung des Knotennamens aktiviert. Wird verwendet, um den Standardknotennamen (Knoten [Nummer]) durch die in NODENAMEOVERRIDE angegebene Zeichenfolge zu überschreiben.
- NODENAMEOVERRIDE: Überschreibung des Nome-Namens. Dies kann zum Festlegen des Knotennamens verwendet werden, ohne ihn auf der Weboberfläche zu ändern. Nützlich beim Einrichten eines Nur-Relay-Knotens.
- WIFISSID: Präfix des Wi-Fi-Netzwerknamens ( LoRaMessenger [Nummer])
- DNSPORT: DNS-Port.
Pinbelegung:
- SCK: SPI-Uhr.
- MISO: SPI MISO.
- MOSI: SPI MOSI.
- SS: SPI-Slave-Auswahl.
- RST: LoRa-Chip-Reset.
- DI0: LoRa empfängt Rückruf.
- I2CSCL: I2C-Uhr.
- I2CSDA: I2C-Daten.
- LCDRESET: LCD-Reset.
Pin-Definitionen müssen möglicherweise bearbeitet werden, falls ein anderes Board verwendet wird (Pin-Definitionen basieren auf einem TTGO LoRa32 V2).
Zukünftige Verbesserungen/Korrekturen
Weitere für die Zukunft geplante Features sind:
- Nachrichtenverschlüsselung, ab sofort werden alle Nachrichten unverschlüsselt versendet.
- Automatische Nachrichtenaktualisierung.
- Tests und Verbesserungen des Routing-Algorithmus.
Lizenz
MIT-Lizenz.