LoRaMessenger
LoRaMessenger est un chat hors réseau entre les nœuds ESP32 équipés de LoRa avec une simple interface Web sans fil.
L'ESP32 héberge un réseau Wi-Fi qui fournira une interface simple de type chat qui affichera les nœuds en ligne, les messages reçus et envoyés, ainsi que quelques zones de texte pour définir le nom du nœud, le nœud de destination et le message.
Le protocole de communication LoRa étant utilisé pour envoyer et recevoir des messages, il est possible de configurer deux modules ou plus pour transmettre et recevoir des messages jusqu'à une distance de quelques kilomètres.
La plupart des modules ESP32 LoRa, comme le TTGO LoRa32 ou le Heltec Wifi LoRa 32, sont équipés d'un écran, vous pouvez donc les utiliser indépendamment pour recevoir des messages comme un téléavertisseur.
Un nœud peut être facilement installé dans un petit boîtier avec une batterie, créant ainsi un système de communication capable de communiquer même dans les zones où il n'y a pas de signal téléphonique.
Interface Internet
Après le démarrage de l'ESP32, un nouveau réseau Wi-Fi appelé LoRaMessenger [numéro] est créé.
Lorsqu'un appareil se connecte au réseau, l'interface Web doit s'ouvrir automatiquement. Si rien ne se passe, l'interface est accessible en ouvrant un navigateur Web et en accédant à l'IP ESP32, qui est par défaut 1.1.1.1.
Sur Android, une page de connexion wifi contenant l'interface web s'ouvre après la connexion au réseau Wi-Fi. De cette façon, la connexion réseau 4G en arrière-plan est conservée même lors de l'utilisation LoRaMessenger . Une notification indiquant la connexion au réseau doit rester dans le panneau de notification et peut être ouverte à tout moment pour afficher à nouveau l'interface.
L'interface web est désormais présentée sur votre navigateur, le chat présente les fonctionnalités suivantes :
- En haut de la page, le nom du nœud peut être saisi afin que le destinataire sache qui écrit. Après avoir appuyé sur mettre à jour, le nom est enregistré et envoyé à tous les nœuds accessibles.
- La section en ligne affiche tous les nœuds disponibles détectés, avec quelques informations supplémentaires telles que le nœud relais utilisé par le nœud récepteur s'il est présent, le RSSI récepteur, le nombre de sauts entre les relais et le temps écoulé depuis le dernier contact.
- La section des messages affiche les 5 derniers messages (par défaut, définissables par l'utilisateur) envoyés et reçus par ordre chronologique. Le nom de tous les nœuds ayant reçu correctement le message est indiqué sous chaque message.
- Au bas de la page, il y a deux zones de texte, la première sert à définir le nœud de destination et la seconde à rédiger le message.
Le champ de destination contient la valeur Broadcast par défaut. De cette façon, le message est envoyé à tous les nœuds disponibles. Vous pouvez également écrire le nom d'un nœud exactement comme indiqué dans la section en ligne pour envoyer le message uniquement à un destinataire spécifique.
Notez qu’à partir de maintenant, une actualisation de la page est nécessaire pour mettre à jour les messages reçus et les accusés de lecture.
Protocole LoRa
LoRaMessenger utilise un protocole de communication personnalisé, chaque paquet envoyé est constitué d'un en-tête et d'une charge utile.
L'en-tête fournit les informations nécessaires au bon fonctionnement du réseau et du routage des paquets, les paramètres contenus dans l'en-tête sont les suivants :
- NETID : ID de réseau, spécifié dans config.h. Cela permet la création de plusieurs réseaux indépendants.
- TTL : durée de vie du paquet, spécifiée dans config.h. Cette valeur est utilisée pour connaître le nombre de sauts effectués par un paquet et est nécessaire à l'algorithme de routage.
- RECEIVER : Numéro du nœud récepteur.
- SENDER : numéro du nœud expéditeur.
- DERNIER NŒUD : numéro du nœud émetteur ou dernier nœud qui a relayé le paquet.
- NEXT NODE : numéro du nœud récepteur ou nœud suivant nécessaire pour relayer le paquet vers le nœud récepteur.
- ID : ID de paquet, chaque paquet envoyé depuis le même nœud a son ID unique de 4 octets. Ceci est nécessaire pour éliminer les paquets déjà reçus et pour envoyer un accusé de réception.
- PAYLOAD TYPE : type de charge utile, utilisé pour interpréter correctement la charge utile. Les types de charges utiles possibles sont : Message, Accusé de réception et Annonce.
Charge utile du message :
- TAILLE DU MESSAGE : taille du message en octets, nécessaire à la lecture du message.
- MESSAGE : Contenu du message. Ceci est envoyé en texte brut pour l’instant !
Charge utile d’accusé de réception :
- ID DE PAQUET REÇU : ID du paquet de messages reçu. Celui-ci est renvoyé à l'expéditeur pour lui faire savoir que le paquet a été reçu.
Annoncer la charge utile :
- NAME SIZE : taille du nom du nœud en octets, nécessaire à la lecture du nom.
- NOM DU NŒUD : Nom du nœud. Ceci est affiché sur l'interface Web de chaque nœud et peut être écrit dans le champ de destination pour envoyer un message uniquement à un nœud spécifique.
Relais et routage de paquets
LoRaMessenger crée un réseau de nœuds capables de transférer des messages vers des nœuds non directement accessibles par l'expéditeur.
Pour ce faire, chaque nœud utilise une table de routage automatique contenant les nœuds de destination et le meilleur itinéraire pour les atteindre. La table est mise à jour via des paquets d'annonces envoyés périodiquement ou lors d'un changement de nom par tous les nœuds.
L'algorithme de routage actuel est très simple et préfère un nombre de sauts inférieur, dans le cas de deux routes avec le même nombre de sauts, celle avec la connexion au nœud suivant le plus fort est choisie.
Installation
Ce programme peut être facilement installé en important le projet dans platformio, en mettant à jour les paramètres et en le téléchargeant sur les tableaux.
Configuration
Dans le dossier include, un fichier de configuration appelé config.h est présent. Ce fichier contient tous les paramètres nécessaires au fonctionnement LoRaMessenger .
Configuration LoRa :
- LORABAND : fréquence de la puce LoRa. La fréquence dépend de votre carte et des fréquences locales autorisées, veillez à n'utiliser que les fréquences autorisées dans votre pays, plus d'informations ici.
Valeurs possibles : 433E6, 866E6, 915E6. - SPREADINGFACTOR : facteur d’étalement LoRa. Soyez prudent lorsque vous utilisez des valeurs supérieures à 7 car LoRaMessenger respecte le rapport cyclique de transmission. Des valeurs élevées ralentissent considérablement le temps d'attente entre les transmissions et pourraient affecter le bon fonctionnement. D'autres ajustements comme le temps d'anticollision peuvent être nécessaires. Valeurs possibles : 7 - 12.
- TXDBM : Puissance de transmission de la puce LoRa.
Valeurs possibles : 1 - 20 - LORADUTY : rapport cyclique de transmission. Assurez-vous d'utiliser uniquement les valeurs autorisées dans votre pays. Valeurs possibles : 1 - 99.
- NETID : identifiant du réseau LoRaMessenger . Cela permet la création de plusieurs réseaux indépendants.
Valeurs possibles : 0 - 255.
Configuration L1 :
- L1BUFFER : file d’attente des paquets de transmission. Augmentez si vous utilisez de grands réseaux de nœuds ou si vous utilisez des facteurs de propagation élevés.
- TTL : durée de vie du paquet. Définit le nombre maximum de sauts qu'un paquet peut effectuer avant d'expirer.
Valeurs possibles : 1 (uniquement messages directs, pas de relais), >1. - BROADCASTADDR : Numéro d’adresse de diffusion.
Configuration L3 :
- NODENUMBER : numéro du nœud local. Chaque nœud a besoin d'un numéro de nœud différent ! Vous pouvez considérer cela comme l’équivalent d’une adresse IP pour un réseau classique.
Valeurs possibles : 1 - 255. Attention à ne pas utiliser la même adresse de BROADCASTADDR ! - MAXNODES : nombre maximum de nœuds attendus dans le réseau.
- ANNONCES : annonce de la présence du nœud et mise à jour du nom. Ce message est nécessaire pour informer tous les nœuds de la présence de tous les autres nœuds. L'intervalle peut être augmenté pour éviter le spam si vous utilisez des nœuds statiques, des facteurs de propagation élevés ou de grands réseaux.
- INACTIVEMINS : temps d'inactivité nécessaire pour qu'un nœud soit considéré comme hors ligne. Attention à utiliser au moins 2 à 3 fois la valeur d'ANNOUNCEMINS voire plus si mauvaise réception.
- INACTIVESECONDSREMOVECHECK : intervalle de vérification de la suppression des nœuds hors ligne.
Configuration des messages :
- SHOWNMESSAGES : Nombre de messages à afficher sur l'interface web.
- KEEPNMESSAGES : Nombre de messages à conserver en mémoire.
Configuration d'affichage :
- DISPLAYSTBYSECS : Nombre de secondes après l'extinction de l'écran.
Configuration réseau :
- WIFIENABLED : Wi-Fi activé. Cela peut être utilisé pour réduire la consommation d'énergie en cas de déploiement d'un nœud uniquement pour le relais des messages.
- NODENAMEOVERRIDEEN : activation du remplacement du nom de nœud. Utilisé pour remplacer le nom de nœud par défaut (Node [numéro]) par la chaîne spécifiée dans NODENAMEOVERRIDE.
- NODENAMEOVERRIDE : remplacement du nom du nom. Ceci peut être utilisé pour définir le nom du nœud sans le modifier sur l'interface Web. Utile lors de la configuration d'un nœud de relais uniquement.
- WIFISSID : préfixe du nom du réseau Wi-Fi ( LoRaMessenger [numéro])
- DNSPORT : port DNS.
Brochage :
- SCK : horloge SPI.
- MISO : SPI MISO.
- MOSI : SPI MOSI.
- SS : sélection de l'esclave SPI.
- RST : réinitialisation de la puce LoRa.
- DI0 : LoRa reçoit un rappel.
- I2CSCL : horloge I2C.
- I2CSDA : données I2C.
- LCDRESET : réinitialisation de l'écran LCD.
Les définitions des broches devront peut-être être modifiées au cas où une autre carte serait utilisée (les définitions des broches sont basées sur un TTGO LoRa32 V2).
Améliorations/correctifs futurs
Les autres fonctionnalités prévues pour le futur sont :
- Cryptage des messages : dès le premier accès, tous les messages sont envoyés en clair.
- Actualisation automatique des messages.
- Tests et améliorations de l'algorithme de routage.
Licence
Licence MIT.