LoRaMessenger
LoRaMessenger es un chat fuera de la red entre nodos ESP32 equipados con LoRa con una interfaz web inalámbrica simple.
El ESP32 alberga una red Wi-Fi que proporcionará una interfaz simple similar a un chat que mostrará nodos en línea, mensajes recibidos y enviados, y algunos cuadros de texto para configurar el nombre del nodo, el nodo de destino y el mensaje.
Dado que el protocolo de comunicación LoRa se utiliza para enviar y recibir mensajes, es posible configurar dos o más módulos para transmitir y recibir mensajes hasta una distancia de unos pocos kilómetros.
La mayoría de los módulos ESP32 LoRa, como el TTGO LoRa32 o el Heltec Wifi LoRa 32, están equipados con una pantalla, por lo que puedes usarlos de forma independiente para recibir mensajes como un buscapersonas.
Se puede instalar fácilmente un nodo dentro de una pequeña caja con una batería, creando así un sistema de comunicación que puede comunicarse incluso en zonas donde no hay señal telefónica.
interfaz web
Después de iniciar ESP32, se crea una nueva red Wi-Fi llamada LoRaMessenger [número].
Cuando un dispositivo se conecta a la red, la interfaz web debería abrirse automáticamente; si no sucede nada, se puede acceder a la interfaz abriendo un navegador web y navegando a la IP ESP32, que es por defecto 1.1.1.1.
En Android, se abre una página de inicio de sesión wifi que contiene la interfaz web después de conectarse a la red Wi-Fi. De esta manera, la conexión de red 4g en segundo plano se mantiene incluso cuando se utiliza LoRaMessenger . Una notificación que indique iniciar sesión en la red debe permanecer en el panel de notificaciones y puede abrirse en cualquier momento para mostrar la interfaz nuevamente.
La interfaz web ahora se presenta en su navegador, el chat tiene las siguientes características:
- En la parte superior de la página, se puede ingresar el nombre del nodo para que el destinatario sepa quién está escribiendo. Después de presionar actualizar, el nombre se guarda y se envía a todos los nodos accesibles.
- La sección en línea muestra todos los nodos disponibles detectados, con información adicional, como el nodo de retransmisión que está utilizando el nodo receptor, si está presente, el RSSI de recepción, el número de saltos entre retransmisiones y el tiempo transcurrido desde el último contacto.
- La sección de mensajes muestra los últimos 5 mensajes (por defecto, configurables por el usuario) enviados y recibidos en orden cronológico. Debajo de cada mensaje se indica el nombre de todos los nodos que han recibido el mensaje correctamente.
- En la parte inferior de la página, hay dos cuadros de texto, el primero se usa para configurar el nodo de destino y el segundo para escribir el mensaje.
El campo de destino contiene el valor de Difusión de forma predeterminada. De esta forma el mensaje se envía a todos los nodos disponibles. También puede escribir el nombre de un nodo exactamente como se informa en la sección en línea para enviar el mensaje solo a un destinatario específico.
Tenga en cuenta que a partir de ahora es necesario actualizar la página para actualizar los mensajes recibidos y leer los recibos.
protocolo LoRa
LoRaMessenger utiliza un protocolo de comunicación personalizado, cada paquete enviado consta de un encabezado y una carga útil.
El encabezado proporciona la información necesaria para que la red y el enrutamiento de paquetes funcionen correctamente, los parámetros contenidos en el encabezado son los siguientes:
- NETID: ID de red, especificado en config.h. Esto permite la creación de múltiples redes independientes.
- TTL: tiempo de vida del paquete, especificado en config.h. Este valor se utiliza para saber cuántos saltos ha realizado un paquete y es necesario para el algoritmo de enrutamiento.
- RECEPTOR: Número de nodo receptor.
- REMITENTE: Número de nodo remitente.
- ÚLTIMO NODO: Número de nodo remitente o último nodo que transmitió el paquete.
- SIGUIENTE NODO: Número de nodo receptor o siguiente nodo necesario para transmitir el paquete al nodo receptor.
- ID: ID del paquete, cada paquete enviado desde el mismo nodo tiene su ID único de 4 bytes de longitud. Esto es necesario para descartar paquetes ya recibidos y para enviar un acuse de recibo.
- PAYLOAD TYPE: Tipo de carga útil, utilizado para interpretar correctamente la carga útil. Los posibles tipos de cargas útiles son: Mensaje, Acuse de recibo y Anuncio.
Carga útil del mensaje:
- TAMAÑO DEL MENSAJE: Tamaño del mensaje en bytes, necesario para la lectura del mensaje.
- MENSAJE: Contenido del mensaje. ¡Esto se envía en texto plano por ahora!
Carga útil de reconocimiento:
- ID DE PAQUETE RECIBIDO: ID del paquete de mensaje recibido. Este se devuelve al remitente para informarle que se ha recibido el paquete.
Anunciar carga útil:
- TAMAÑO DEL NOMBRE: Tamaño del nombre del nodo en bytes, necesario para la lectura del nombre.
- NOMBRE DE NODO: Nombre del nodo. Esto se muestra en la interfaz web de cada nodo y se puede escribir en el campo de destino para enviar un mensaje solo a un nodo específico.
Retransmisión y enrutamiento de paquetes
LoRaMessenger crea una red de nodos capaces de reenviar mensajes a nodos a los que el remitente no puede acceder directamente.
Para ello, cada nodo utiliza una tabla de enrutamiento automático que contiene los nodos de destino y la mejor ruta para llegar a ellos. La tabla se actualiza mediante paquetes de anuncios que se envían periódicamente o cuando todos los nodos cambian de nombre.
El algoritmo de enrutamiento actual es muy simple y prefiere un menor número de saltos, en el caso de dos rutas con el mismo número de saltos se elige la que tiene la conexión al siguiente nodo más fuerte.
Instalación
Este programa se puede instalar fácilmente importando el proyecto en platformio, actualizando la configuración y cargándolo en los foros.
Configuración
En la carpeta de inclusión, está presente un archivo de configuración llamado config.h. Este archivo contiene todas las configuraciones necesarias para que LoRaMessenger funcione.
Configuración de LoRa:
- LORABAND: Frecuencia del chip LoRa. La frecuencia depende de su placa y de las frecuencias locales permitidas; asegúrese de utilizar solo frecuencias permitidas en su país, más información aquí.
Valores posibles: 433E6, 866E6, 915E6. - SPREADINGFACTOR: factor de dispersión LoRa. Tenga cuidado al utilizar valores superiores a 7 porque LoRaMessenger respeta el ciclo de trabajo de la transmisión. Valores altos ralentizan mucho el tiempo de espera entre transmisiones y podrían afectar el correcto funcionamiento, pudiendo ser necesarios otros ajustes como el tiempo anticolisión. Valores posibles: 7 - 12.
- TXDBM: Potencia de transmisión del chip LoRa.
Valores posibles: 1 - 20 - LORADUTY: Ciclo de trabajo de la transmisión. Asegúrese de utilizar sólo valores permitidos en su país. Valores posibles: 1 - 99.
- NETID: identificación de la red LoRaMessenger . Esto permite la creación de múltiples redes independientes.
Valores posibles: 0 - 255.
Configuración L1:
- L1BUFFER: Cola de paquetes de transmisión. Aumente si utiliza grandes redes de nodos o utiliza factores de dispersión altos.
- TTL: tiempo de vida del paquete. Establece el número máximo de saltos que puede realizar un paquete antes de caducar.
Valores posibles: 1 (solo mensajes directos, sin retransmisión), >1. - BROADCASTADDR: Número de dirección de transmisión.
Configuración L3:
- NODENUMBER: Número de nodo local. ¡Cada nodo necesita un número de nodo diferente! Puede pensar que esto es el equivalente a una dirección IP para una red normal.
Valores posibles: 1 - 255. ¡Precaución de no utilizar la misma dirección de BROADCASTADDR! - MAXNODES: Número máximo de nodos esperados en la red.
- ANNOUNCEMINS: Anuncio de presencia de nodo y actualización de nombre. Este mensaje es necesario para informar a todos los nodos de la presencia de todos los demás nodos. El intervalo se puede aumentar para evitar el spam si se utilizan nodos estáticos, factores de dispersión altos o redes grandes.
- INACTIVEMINS: Tiempo de inactividad necesario para que un nodo se considere fuera de línea. Tenga cuidado de utilizar al menos 2-3 veces el valor de ANNOUNCEMINS o incluso más si la recepción es deficiente.
- INACTIVESECONDSREMOVECHECK: Intervalo para comprobar la eliminación de nodos fuera de línea.
Configuración de mensajes:
- MENSAJES MOSTRADOS: Número de mensajes a mostrar en la interfaz web.
- KEEPNMESSAGES: Número de mensajes a mantener en memoria.
Configuración de pantalla:
- DISPLAYSTBYSECS: Número de segundos después de que se apaga la pantalla.
Configuración de red:
- WIFIENABLED: Wi-Fi habilitado. Esto se puede utilizar para reducir la energía utilizada en caso de implementar un nodo solo para retransmitir mensajes.
- NODENAMEOVERRIDEEN: habilitación de anulación de nombre de nodo. Se utiliza para anular el nombre de nodo predeterminado (Nodo [número]) a la cadena especificada en NODENAMEOVERRIDE.
- NODENAMEOVERRIDE: anulación del nombre del nombre. Esto se puede utilizar para configurar el nombre del nodo sin modificarlo en la interfaz web. Útil al configurar un nodo de solo retransmisión.
- WIFISSID: prefijo del nombre de la red Wi-Fi ( LoRaMessenger [número])
- DNSPORT: puerto DNS.
Configuración de pines:
- SCK: reloj SPI.
- MISO: SPI MISO.
- MOSI: SPI MOSI.
- SS: selección de esclavo SPI.
- Primero: reinicio del chip LoRa.
- DI0: LoRa recibe devolución de llamada.
- I2CSCL: reloj I2C.
- I2CSDA: datos I2C.
- LCDRESET: reinicio de la pantalla LCD.
Es posible que sea necesario editar las definiciones de pines en caso de que se utilice otra placa (las definiciones de pines se basan en un TTGO LoRa32 V2).
Mejoras/correcciones futuras
Otras características que están previstas para el futuro son:
- Cifrado de mensajes, a partir de la derecha todos los mensajes se envían sin cifrar.
- Actualización automática de mensajes.
- Pruebas y mejoras del algoritmo de enrutamiento.
Licencia
Licencia MIT.