Gateway LoRa de Bajo Costo para The Things Network - San Salvador

¡Hola a todos!

Si han estado pendientes de nuestras redes sociales habrán notado que como Hackerspace San Salvador nos convertimos en los iniciadores de The Things Network para la ciudad de San Salvador.

¿Qué significa ser iniciador? Pues simplemente que nos hemos dado la tarea de ser los primeros en motivar la creación de una red gestionada por la comunidad para conectar toda clase de dispositivos y sensores en la ciudad.

Como es una red manejada por la comunidad esto significa que cualquiera puede participar y comenzaremos por lo primero: Cómo montar un Gateway LoRa de muy bajo costo que se conecte a The Things Network.

 

Materiales Necesarios

  1. ESP32 LoRa 1-Channel Gateway*
  2. Cable de expansión uFL a RP-SMA
  3. Antena cuadri-banda de celuar RP-SMA
  4. Caja plexo para conexiones eléctricas 105x105x55mm IP-55
  5. Cable Micro USB
  6. Cargador USB 5V
  7. Mini-Breadboard (Opcional)
* El gateway de Sparkfun es de caracter experimental por lo que es probable que no encuentres disponibles para compra. Si es así no te preocupes ya que lo puedes reemplazar fácilmente por una tarjeta de expansión para el esp-wroom-32 más un módulo LoRa FRM95W.

Soporte de Software

Asegúrate de tener instalado el siguiente software:
  1. Arduino 1.8.6
  2. Git

Agregando Soporte para el ESP-8266 y ESP-32

  1. Abre Arduino IDE y accede al menú "Archivo" -> "Preferencias".
  2. Has clic en el botón junto a "Gestor de URLs Adicionales de Tarjetas".
  3. En la ventana agrega las dos siguientes direcciones:
    http://arduino.esp8266.com/stable/package_esp8266com_index.json
    https://dl.espressif.com/dl/package_esp32_index.json
    
  4. Abre el menú "Herramientas"-> "Placa" -> "Gestor de tarjetas...".
  5. En la ventaja de búsqueda escribe "esp8266" y elije la versión "2.4.2", luego haz clic en "Instalar".
  6. Repite nuevamente la búsqueda para "esp32", para esta placa solo una versión debería estar disponible (1.0.0) has clic en "Instalar".
  7. Regresa al menú "Archivo" -> "Preferencias" y has clic en el archivo abajo de donde dice "Más preferencias pueden ser editadas directamente en el fichero". Puede que se abra un editor de texto, es importante que anotes la carpeta a donde se guarda ese fichero ya que la utilizaremos en el siguiente paso.
  8. Descarga el archivo de "variantes de hardware" de la tarjeta de Sparkfun y descomprime el archivo. Copia la carpeta "sparkx_esp32_lora" en el directorio "packages/esp32/hardware/esp32/1.0.0/variants".
  9. En la carpeta donde esta el archivo "preferences.txt" busca el archivo "packages/esp32/hardware/esp32/1.0.0/boards.txt". Puedes abrirlo con cualquier editor de texto. Pega al final del mismo la definición de la nueva tarjeta:
    ##############################################################
    
    sparkx_esp32_lora.name=SparkX ESP32 LoRa Gateway
    
    sparkx_esp32_lora.upload.tool=esptool
    sparkx_esp32_lora.upload.maximum_size=1310720
    sparkx_esp32_lora.upload.maximum_data_size=294912
    sparkx_esp32_lora.upload.wait_for_upload_port=true
    
    sparkx_esp32_lora.serial.disableDTR=true
    sparkx_esp32_lora.serial.disableRTS=true
    
    sparkx_esp32_lora.build.mcu=esp32
    sparkx_esp32_lora.build.core=esp32
    sparkx_esp32_lora.build.variant=sparkx_esp32_lora
    sparkx_esp32_lora.build.board=ESP32_DEV
    
    sparkx_esp32_lora.build.f_cpu=240000000L
    sparkx_esp32_lora.build.flash_size=4MB
    sparkx_esp32_lora.build.flash_freq=40m
    sparkx_esp32_lora.build.flash_mode=dio
    sparkx_esp32_lora.build.boot=dio
    sparkx_esp32_lora.build.partitions=default
    
    sparkx_esp32_lora.menu.PartitionScheme.default=Default
    sparkx_esp32_lora.menu.PartitionScheme.default.build.partitions=default
    sparkx_esp32_lora.menu.PartitionScheme.minimal=Minimal (2MB FLASH)
    sparkx_esp32_lora.menu.PartitionScheme.minimal.build.partitions=minimal
    sparkx_esp32_lora.menu.PartitionScheme.no_ota=No OTA (Large APP)
    sparkx_esp32_lora.menu.PartitionScheme.no_ota.build.partitions=no_ota
    sparkx_esp32_lora.menu.PartitionScheme.no_ota.upload.maximum_size=2097152
    sparkx_esp32_lora.menu.PartitionScheme.min_spiffs=Minimal SPIFFS (Large APPS with OTA)
    sparkx_esp32_lora.menu.PartitionScheme.min_spiffs.build.partitions=min_spiffs
    sparkx_esp32_lora.menu.PartitionScheme.min_spiffs.upload.maximum_size=1966080
    
    sparkx_esp32_lora.menu.FlashMode.qio=QIO
    sparkx_esp32_lora.menu.FlashMode.qio.build.flash_mode=dio
    sparkx_esp32_lora.menu.FlashMode.qio.build.boot=qio
    sparkx_esp32_lora.menu.FlashMode.dio=DIO
    sparkx_esp32_lora.menu.FlashMode.dio.build.flash_mode=dio
    sparkx_esp32_lora.menu.FlashMode.dio.build.boot=dio
    sparkx_esp32_lora.menu.FlashMode.qout=QOUT
    sparkx_esp32_lora.menu.FlashMode.qout.build.flash_mode=dout
    sparkx_esp32_lora.menu.FlashMode.qout.build.boot=qout
    sparkx_esp32_lora.menu.FlashMode.dout=DOUT
    sparkx_esp32_lora.menu.FlashMode.dout.build.flash_mode=dout
    sparkx_esp32_lora.menu.FlashMode.dout.build.boot=dout
    
    sparkx_esp32_lora.menu.FlashFreq.80=80MHz
    sparkx_esp32_lora.menu.FlashFreq.80.build.flash_freq=80m
    sparkx_esp32_lora.menu.FlashFreq.40=40MHz
    sparkx_esp32_lora.menu.FlashFreq.40.build.flash_freq=40m
    
    sparkx_esp32_lora.menu.FlashSize.4M=4MB (32Mb)
    sparkx_esp32_lora.menu.FlashSize.4M.build.flash_size=4MB
    
    sparkx_esp32_lora.menu.UploadSpeed.921600=921600
    sparkx_esp32_lora.menu.UploadSpeed.921600.upload.speed=921600
    sparkx_esp32_lora.menu.UploadSpeed.115200=115200
    sparkx_esp32_lora.menu.UploadSpeed.115200.upload.speed=115200
    sparkx_esp32_lora.menu.UploadSpeed.256000.windows=256000
    sparkx_esp32_lora.menu.UploadSpeed.256000.upload.speed=256000
    sparkx_esp32_lora.menu.UploadSpeed.230400.windows.upload.speed=256000
    sparkx_esp32_lora.menu.UploadSpeed.230400=230400
    sparkx_esp32_lora.menu.UploadSpeed.230400.upload.speed=230400
    sparkx_esp32_lora.menu.UploadSpeed.460800.linux=460800
    sparkx_esp32_lora.menu.UploadSpeed.460800.macosx=460800
    sparkx_esp32_lora.menu.UploadSpeed.460800.upload.speed=460800
    sparkx_esp32_lora.menu.UploadSpeed.512000.windows=512000
    sparkx_esp32_lora.menu.UploadSpeed.512000.upload.speed=512000
    
    sparkx_esp32_lora.menu.DebugLevel.none=None
    sparkx_esp32_lora.menu.DebugLevel.none.build.code_debug=0
    sparkx_esp32_lora.menu.DebugLevel.error=Error
    sparkx_esp32_lora.menu.DebugLevel.error.build.code_debug=1
    sparkx_esp32_lora.menu.DebugLevel.warn=Warn
    sparkx_esp32_lora.menu.DebugLevel.warn.build.code_debug=2
    sparkx_esp32_lora.menu.DebugLevel.info=Info
    sparkx_esp32_lora.menu.DebugLevel.info.build.code_debug=3
    sparkx_esp32_lora.menu.DebugLevel.debug=Debug
    sparkx_esp32_lora.menu.DebugLevel.debug.build.code_debug=4
    sparkx_esp32_lora.menu.DebugLevel.verbose=Verbose
    sparkx_esp32_lora.menu.DebugLevel.verbose.build.code_debug=5
    
  10. Cierra Arduino IDE y vuelve a abrirlo para verificar que la tarjeta "SparkX ESP32 LoRa Gateway" aparece en el menú "Herramientas" -> "Placas".

Cargando el Sketch del Gateway LoRa

Muy importante: En El Salvador LoRa solo puede ser utilizado en la banda libre entre los 915 y 928MHz, en el Hackerspace San Salvador hemos modificado las bibliotecas de soporte para hacer trabajar los radios LoRa en dicha banda con el objetivo de cumplir con la reglamentación local. Si estás en otra región deberás de asegurarte que esta banda está libre y que puedes utilizarla sin licenciamiento, el incumplimeinto de reglamentaciones locales puede exponerte a multas o decomiso de equipos.

Una vez hecha esa aclaración bajemos los archivos de soporte necesarios:
  1. Abre una consola de comandos y clona el repositorio que contiene el Sketch con el siguiente comando:
    git clone https://gitlab.com/hackerspacesv-iot/ESP-1ch-Gateway-v5.0-hssv
    
  2. Esto creará un nuevo directorio de nombre "ESP-1ch-Gateway-v5.0-hssv", busca la carpeta "libraries" y copia todas las carpetas contenidas en tu directorio de librerias para los Sketchs de Arduino ("Documentos/Arduino/libraries")
  3. Abre el Arduino IDE y abre el menú "Programa" -> "Incluir Librería" -> "Gestionar librerías"
  4. Busca la biblioteca "ArduinoJson" y selecciona la versión "5.13.1" luego haz clic en "Instalar"
  5. Busca la biblioteca "WifiManager" y selecciona la versión "0.12.0" luego haz clic en "Instalar" (Puede que te solicite sobreescribir la versión existente, en ese caso haz clic en aceptar)
  6. Selecciona la placa "SparkX ESP32 LoRa Gateway" del menú "Herramientas" -> "Placa"
  7. Para verificar que todo funciona, abre el Sketch "ESP-sc-gway" en la carpeta "ESP-1ch-Gateway-v5.0-hssv" que creaste en el paso 1 y haz clic en el botón "Verificar". Si todo ha sido instalado correctamente deberías de ejecutarse sin errores.

Configurando nuestro Gateway para conectarse la Red Local

Como mencionamos en las instrucciones anteriores el código del repositorio ya está pre-configurado para funcionar según las reglamentaciones locales por lo que la única configuración que solo haremos leves configuraciones.
  1. En Arduino IDE abrimos el Sketch "ESP-sc-gway" incluído en la carpeta "ESP-1ch-Gateway-v5.0-hssv"
  2. Abrimos la pestaña "ESP-sc-gway.h" y buscamos el texto:
    wpas wpa[] = {
     { "" , "" },  // Reserved for WiFi Manager
     { "HACKERSPACE_SV", "314159265358979" }
    };
    
  3. Modificamos "HACKERSPACE_SV" y cambiamos por el nombre de nuestra red WiFi local. De igual manera cambiamos "314159265358979" por la clave de nuestra WiFi local. Recuerda que ambos textos deben estar entre comillas y no debemos olvidar dejar la primera línea con las comillas en blanco.
  4. Ahora modificamos la información acerca del Gateway en las siguientes líneas:
    // Gateway Ident definitions
    #define _DESCRIPTION "descripcion-gateway" // Name of the gateway
    #define _EMAIL "email.contacto@algunlugar.com" // Owner
    #define _PLATFORM "ESP32 LoRa 1-CH Gateway"
    #define _LAT LATITUD
    #define _LON LONGITUD
    #define _ALT ALTITUD    // Altitude
    
  5. Para ingresar los valores de Latitud, Longitud y Altitud puedes utilizar la App gratuita GPS Status & Toolbox disponible en la Play Store
  6. Asegurate de tener seleccionada la placa "SparkX ESP32 LoRa Gateway" en el menú  "Herramientas" -> "Placa"
  7. Asegurate de tener seleccionado "115200" en el meńu "Herramientas" -> "Upload Speed"
  8. Asegurate de tener seleccionado el puerto adecuado en el menú "Herramientas" -> "Puerto"
  9. Una vez listo todo has clic en el botón "Subir". Si te genera algun error al momento de subir intenta presionar el botón "Reset" y luego el botón "0" en la tableta.
  10. Verifica que el gateway está funcionando abriendo el menú "Herramientas" -> "Monitor Serie" y busca las siguientes lineas:
    Gateway ID: AQUI_DIRECCION_HEX, Listening at SF9 on 915.20 Mhz.
    ...
    WlanStatus:: CONNECTED to AQUI_TU_WLAN
    ...
    IP address: AQUI IP Local
    
  11. Abre una ventana de navegador con la dirección que recién se reportó en el monitor serie http://Aqui IP local/ y deberías de ver una página como la siguiente:
  12. Anota el número mostrado en la línea "Gateway ID" ya que lo utilizaremos para registrar el gateway en The Things Network

Registrando nuestro Gateway en The Things Network


  1. Registra una cuenta en The Things Network e inicia sesión.
  2. En el ícono de usuario has clic en "Console".
  3. Abre el botón grande "Gateway" y luego haz clic en "register gateway".
  4. Marca la opción "I'm using the legacy packet forwarder" y escribe en su lugar el valor que anotaste arriba del "Gateway ID".
  5. Llena los otros parámetros de la siguiente manera:
    • Description: Nombre de tu Gateway
    • Frecuency Plan: Australia 915
    • Router: ttn-router-us-west
    • Location: Arrastra en el mapa hasta la ubicación del router o ingresa las coordenadas utilizadas en la sección anterior.
    • Antenna Placement: Indoor (Interior) Outdoor (Exterior)
  6. Si has realizado toda la configuración de forma adecuada entonces ahora tu router aparecerá como "Conectado" en una pantalla como la siguiente:
  7. Si quieres ceder la administración de tu router a la comunidad The Things Network San Salvador, haz clic en el link "Transfer ownership" y en el espacio donde dice "owner" escribe hackerspacesv, por último solo haz clic en el botón "Transfer ownership to hackerspacesv" para finalizar el proceso. Este paso es opcional y solo es necesario si deseas que tu router aparesca listado como parte de la comunidad de The Things Network San Salvador.
  8. ¡Felicidades! Ya puedes comenzar a conectar dispositivos a tu router en The Things Network.

Haciendo un case para nuestro Gateway


Ahora que has logrado conectar tu Gateway a internet es momento de hacer un pequeño para que puedas colocarlo en una mejor ubicación.
  1. Utiliza una caja plexo para contener montar el gateway.
  2. En el lado que solo tiene una salida, abre un agujero del tamaño del conector RP-SMA.
  3. Dentro de la caja coloca el Gateway. En nuestro caso utilizamos una mini breadboard para facilitar el fijado de la tableta y poder estarla removiendo fácilmente.
  4. En la parte inferior abrimos uno de los sellos para colocar el cable USB.
  5. Una vez finalizado conecta la antena externa.
  6. ¡Ahora estas listo para colocar la caja en exteriores!

Ùnete a la comunidad The Things Network - San Salvador


Si vives en San Salvador y quieres colocar un Gateway o estás trabajando en aplicaciones de IoT aplicables a la ciudad. Ùnete a la comunidad para recibir noticias y actualizaciones sobre la red.
En la próxima entrada vamos a desarrollar un aparato para marcar puntos en terreno y verificar el alcance de nuestros dispositivos.

Enlaces de utilidad

Comentarios

Entradas populares de este blog

Reactivando el Blog

Emulando el Raspberry Pi OS con QEMU en Linux

Escribiendo Mensajes al Blockchain de Bitcoin