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.

Vuelvo a recomendar la estupenda guía de Bricolabs específica para estos tipos de módulos.

Configuración del gateway

Siguiendo los pasos de la guía 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:

Selecci-n_161

En la carpeta de libraries movéis todo a vuestra carpeta personal de libraries dentro de Arduino:

Selecci-n_162

Selecci-n_164

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.

Selecci-n_165

Veremos que nos ha cargado bastantes archivos, todos necesarios para el proyecto.

Selecci-n_168

Selecci-n_170

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:

Selecci-n_171

Definición de características de nuestro gateway. Por defecto está así:
Selecci-n_172

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 frecuencia y el tiempo de aire (Time on Air).
Selecci-n_175

Aquí podéis ver un gráfico de como el SF se define el factor. Hay que tener en cuenta que a más distancia más consumo de energía.

Selecci-n_176

Cambiamos a "1" el valor _STRICT_1CH para indicar que solamente utilizaremos el primer canal.

Selecci-n_177

Definimos el servidor ntp de horario, vamos a poner un local.

Selecci-n_178

#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.

Selecci-n_173

Lleva una de las partes mas importantes configuración de la conexión WiFi. En esta sección hay que hacer dos cambios.

Selecci-n_174

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:

Selecci-n_179

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());

Selecci-n_180

Y este es el resultado cuando nos conectamos a nuestro gateway vía web:

Selecci-n_181

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.

Selecci-n_182

Selecci-n_183

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!!!

Selecci-n_185

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, a través de nuestro Gateway. Pero eso será en otro post ;)
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.

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:

Selecci-n_161

En la carpeta de libraries moveis todo a vuestra carpeta personal de libraries dentro de Arduino:

Selecci-n_162

Selecci-n_164

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.

Selecci-n_165

Veremos que nos ha cargado bastantes archivos, todos necesarios para el proyecto.

Selecci-n_168

Selecci-n_170

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:

Selecci-n_171

Definición de características de nuestro gateway. Por defecto está así:
Selecci-n_172

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).
Selecci-n_175

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.

Selecci-n_176

Cambiamos a "1" el valor _STRICT_1CH para indicar que solamente utilizaremos el primer canal.

Selecci-n_177

Definimos el servidor ntp de horario, vamos a poner un local.

Selecci-n_178

#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.

Selecci-n_173

Lleva una de las partes mas importantes configuración de la conexión WiFi. En esta sección hay que hacer dos cambios.

Selecci-n_174

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:

Selecci-n_179

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());

Selecci-n_180

Y este es el resultado cuando nos conectamos a nuestro gateway vía web:

Selecci-n_181

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.

Selecci-n_182

Selecci-n_183

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!!!

Selecci-n_185

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 ;)