MiniGateway LoRa monocanal con ESP32
Vamos a ver los pasos para convertir nuestro pequeño módulo ESP32+LoRa en un gateway LoRa monocanal. Esto quiere decir que únicamente va a ser capaz de escuchar y enviar información por el único canal que tiene configurado. Esto limita la red pública.
Pero antes recordad de tener preparado el IDE de Arduino para soporte al módulo ESP32. En este post anterior explico cómo se puede realizar GHOST_URL/preparando-arduino-ide-para-esp32-lora/. Sin esta configuración no se podrá seguir los siguientes pasos.
Vuelvo a recomendar la estupenda guia de Bricolabs específica para estos tipos de módulos.
Configuración del gateway
Siguiendo los pasos de la guia Bricolabs, vamos a necesitar hacer ciertas modificaciones a nivel de hardware antes de pasar a cargar el software.
Empezamos bajando la librería de Marteen Westenberg que tiene publicado en su repositorio GitHub https://github.com/kersing/ESP-1ch-Gateway-v5.0. Descomprimos todo y para no tener muchos problemas con la cantidad de librerías que necesita, yo he optado por copiarlo todo en mi carpeta de usuario Arduino:
En la carpeta de libraries moveis todo a vuestra carpeta personal de libraries dentro de Arduino:
Ahora copiamos la carpeta ESP-sc_gway con el código necesario y el fichero ESP-sc-gway.ino que cargaremos en nuestro IDE de Arduino.
Veremos que nos ha cargado bastantes archivos, todos necesarios para el proyecto.
El archivo de configuración ESP-sc-gway.h nos va permitir configurar diferentes conceptos interesantes:
El servidor TTN al que nos conectaremos. Por defecto lo vamos a dejarlo así, utilizando los propios de The Things Network:
Definición de características de nuestro gateway. Por defecto está así:
Revisamos que el spreading factor esté definido como SF7, es importante cuando utilizamos un único canal de comunicación. El spreading factor especifica la potencia de transmisión, la subfrecuencia y el tiempo de aire (Time on Air).
Aquí podéis ver un gráfico de como el SF se define el factor. Hay que tener en cuenta que a mas distancia mas consumo de energía.
Cambiamos a "1" el valor _STRICT_1CH para indicar que solamente utilizaremos el primer canal.
Definimos el servidor ntp de horario, vamos a poner un local.
#define NTP_TIMESERVER "es.pool.ntp.org"
Hacemos cambios en la descripción, donde es interesante poner que es un ESP32, la frecuencia y el spreading factor (SF7) que hemos definido anteriormente. La posición geográfica y email de contacto:
// Gateway Ident definitions
#define _DESCRIPTION "ESP32 Gateway 868.1Mhz SF7"
#define _EMAIL "akirasan@mi.com"
#define _PLATFORM "ESP32"
#define _LAT 42.506151
#define _LON 2.256303
#define _ALT 2
Velocidad de conexión al puerto serie, en este caso 115200. Y una opción que yo he deshabilitado, ya que mi módulo no lleva pantalla OLED: OLED 1 pasa a OLED 0.
Lleva una de las partes mas importantes configuración de la conexión WiFi. En esta sección hay que hacer dos cambios.
Forzar el if a que sea verdadero siempre, eso se hace cambiando el 0 por un 1. Y luego poner el nombre de nuestra Wifi y contraseña. Ojo!!! que el primer elemento { "" , "" } no se debe tocar. Quería como algo así:
#if 1
wpas wpa[] = {
{ "" , "" }, // Reserved for WiFi Manager
{ "MiWifi", "123456_Passwd" },
{ "MiWifi_5G", "123456_Passwd" }
};
#else
// Place outside version control to avoid the risk of commiting it to github ;-)
#include "d:\arduino\wpa.h"
#endif
Una vez tenemos realizados estos cambios de la configuración, compilamos y subimos a nuestro módulo ESP3. Revisamos entonces lo que nos muestra por el puerto Serial:
La información que aparece es muy importante, porque podemos ver si se ha conectado a nuestra WiFi y el código del Gateway ID. Un identificador que necesitamos para registrarlo en TTN.
Pero no te preocupes, porque tu ESP32 está emitiendo un pequeño servidor web donde te mostrará toda la información.
Si quieres conocer la IP que tiene tu nuevo gateway (para poder acceder vía web), puedes conectarte a tu router y ver la dirección IP que se le ha asignado por DHCP, o puedes usar esta modificación que he propuesto. Modificar el fichero _wwwServer y añadir estas dos líneas para que cuando arranque, puedas ver por la consola del Serial la dirección IP asignada dentro de tu red WiFi.
Serial.print(F("IP :"));
Serial.println(WiFi.localIP());
Y este es el resultado cuando nos conectamos a nuestro gateway vía web:
Registro en The Things Networks
Llega el momento de dirigirnos a la página de The Thing Networks y crea una cuenta, si no la tenemos ya. Cuando estás logado, accede a tu consola para poder configurar un nuevo gateway.
Informamos los diferentes campos que nos piden y aquí lo importante es primer campo Gateway EUI, y es el número de nuestro gateway ID y que podemos consultar desde la web del ESP32.
Y si todo ha ido bien, tendrás tu gateway listo para recibir paquetes LoRa!!!
Hasta aquí esta segunda parte sobre la configuración de dispositivos LoRa. El siguiente paso: configurar un nodo LoRa para emitir información hacia una aplicación definida en TTN, através de nuestro Gateway. Pero eso será en otro post ;)