ESP32 LoRa for dummys - I

Un ESP32 - LoRa no es un electrodoméstico que se enchufa y funciona, al contrario es un dispositivo que para que funcione se tiene que configurar y programar,  a través de ordenador y un software específico como un IDE (entorno integrado de desarrollo). Pero en elloe stá la gracia, pues resolviendo los problemas que se vayan planteando a lo largo de este proceso aprenderá de hardware, de software, de progrmación, ..., que es lo que en el fondo pretende esta guía, aprender de forma divertida.


 1- ADQUIRIR EL HARDWARE

Lo primero que se necesita es comprar una placa de desarrollo ESP32-LoRa. 

Una placa de desarrollo contienen además del  microprocesador ESP32 diversos elementos que permiten que trabaje de forma autónoma, lo cual le evita muchos quebraderos de cabeza.

Al procesador (ESP32) y a los de protocolos de comunicación que duele llevar la placa por defecto (USB-SERIE, BLUETOOTH y Wi-Fi) le añadimos LoRa), pero ¿Que banda de frecuencias? en cada zona del planeta está permitido transmitir en una banda, en el caso de Europa es la banda de 868 (868-869  MHz) distribuidos en 10 canales (si solamente va a recibir le da lo mismo una banda que otra).

El modelo elegido, para evitar sorpresas en este priemr acercamiento, fue uno de los recomendados por el tutorial-I (Ver referencias), el de la empresa LiLygo  que soporta el protocolo de comunicaciones LORA (LoRa32 v2.1_1.6) y ademas Bluetooth y WiFi. El soporte de esta placa la encontramos aquí

Se aquirió en Aliexpress (Si puede esperar esté atento a las ofertas, pasa la frontera, el precio es competitivo y LiLygo tiene tienda oficial) y por consejo del tutorial-I se compró una pareja de dispositivos, que se necesitan para hacer pruebas de comunicación. 

Recuerde que en Aliexpress hay que estar atentos al modelo sleccionado pues aparecen todos ellos en una única pantalla.

Concretamente el dispositivo en Aliexpress es este:


Descripción de los pines del LILYGO T3_V1.6.1
El botón lateral es el de RESET y el interrruptor es para cuando se trabaja con baterias a través del cable JST con USB no tiene utilidad


LOS CHIPS

Puede necesitar por temas de drivers conocer los chips que incorpora esta placa:

Mi consejo es que si opta por otra placa de desarrollo ESP32, si de antemano no conoce los chips que monta la placa, no la compre, pues puede ser complicado o imposible acertar con los drivers, pues normalmente los chips no llevan el modelo o ha sido borrado (son cosas del ahorro)

 

LOS COMPLEMENTOS

Además adquirí unas cajas de plástico para protegerlos pues decían que era para ESP32, pero no me sirvieron, son cosas que pasa a veces en Aliexpress. De todas formas hay que buscar una solución para proteger la placa de desarrollo ESP32 del polvo, los golpes, etc. , igual valdría la propia caja de plástica en la que viene.


Lo que si necesitará es un cable USB-USB micro, y en este caso igual le resulta más útil usar uno con USB-C (que se está imponiendo) y comprar un adaptador macho USB micro - hembra USB-C por un 1€  pues el ESP32 lleva un micro USB.

El cable USB tiene una doble función:

  • Alimentar la placa de desarrollo ESP32 en local, de forma automata se usa el cable JST.
  • Cargar los programas en la memoria 

ATENCION No todos los cables USB son iguales, pues hay algunos que para ahorrar costes han suprimido los cables de datos y solamente tienen los de alimentación, resumiendo que sirven para cargar un móvil, que es la función mas frecuente que se les exige, pero no para transferir datos. Mas allá de la prueba y error tengo que buscar un método rápido y sencillo para averiguar si un cable USB es de dos o cuatro conductores. El que me funcionó a la primera fue un cable USB-C con adaptador micro USB.

Lo de los cables USB con únicamente 2 hilos no es una leyenda urbana,
La foto de un cable de los que tengo.

 

PRUEBA BASICA DEL HARDWARE

Conecte la antena al ESP32  (Nunca lo haga trabajar sin antenay después conecte el USB. Si todo va bien se encenderá la pantalla OLED y dos pequeños LEDS uno rojo y otro azul.

Información del SoC (ESP32 doble nucleo V1) de los protocolos ( WiFi/BTBLE) y de la memoria (4MB Flash). Han precargado el firmware PAXCOUNTER, peor eso ahora no nos importa mucho.

QR con el identificador del dispositivo


Si tiene un firmware precargado este comenzará a funcionar parpadendo el led verde de la placa en este caso es el PAXCOUNTER en este caso ha identificado 3 redes WiFi y 4 Bluetoth (Es una forma indirecta de saber las personas / dispositivos de una zona)


 

 2- CREAR EL ENTORNO DE DESARROLLO

Un IDE es un entorno integrado de desarrollo de software  y lo necesita tanto usa programas propios como si usa programas de terceros. El lenguaje de programación mas popular para Arduino es Visual Studio Code (VSC) que trabaja en  Windows, MacOS y Linux, y es de uso libre (por ahora no necesita aprenderlo pues vamos a usar programas de terceros)

Para trabajar con ESP32 hay dos posibles IDE:

    • Arduino IDE (2.3.3. oct, 2024) disponible de forma gratuita para windows, linux y macOS (baje la versión del sistema operativo)
    • PlatformIO IDE

Recuerde que el ESP32 es compatible con Arduino por lo que vale su IDE  

Se elige Arduino IDE que es la mas popular y ademas es el que  recomiendan todos los tutoriales que he estudiado, no obstante si busca en Google "Arduino VS PlatformIO" encontrará múltiples discusiones sobre las ventajas de uno u otro. 

Descargue e instale Arduino IDE, y si todo va bien al abrirlo verá una pantalla como la siguiente. 



En preferencias puede seleccionar el idioma del IDE, que por defecto es el "english" y se lo prefiere poner "español".

 

INSTALAR EL NUCLEO 

El siguiente paso es descargar las librerias que contengan el código del núcleo o microprocesador SoC que vamos a usar, en nuestro caso el LiLygo LORA 32 T3  de la web de GitHub de Espressif Systems (GitHub es un repositorio web o bibliotecario de software). Para ello abra del menú "PREFERENCES" e incluya las URL siguiente (creo que el primero basta, pero no pasa nada si tiene mas de una URL separadas por comas) en "Additional boards manager URLs":

Salve y reinicie ARDUINO IDE (cerrar y volver a abrir), con esto se descargan las librerias.


En librerias instale ESP32 by espressif 

En  TOOLS => Board => Boards Manager e instale  ESP32 DEv Module

Después seleccione  TOOLS -> BOARD -> LILYGO T3-S3 

Si cambia de modulo/placa debe de cambiar este parámetro antes de compilar y cargar. 

 


Si todo ha ido bien en la consola (output) saldrá un mensaje indicándole que ha sido instalado 


LIBRERIAS

Las librerías que hay que instalar en un IDE dependen del programa, y mas vale que sobren (ocupan memoria=) que que falten (da error) 

Segun Tutorial-II hay que instalar las librerias que se necesitan para su ejemplo (De no estar cuando hagamos la compilación dará error en las llamadas (Sketch=> Verify/Compile), para ello, nos vamos a Herramientas > Administrar Bibliotecas (Manage Library) y tenemos que instalar las siguientes:

  • “SSD1306” e instalamos la que pone Adafruit SSD1306 by Adafruit (Tutorial-II) necesita la librería GFX que si no está instalada, la instalará
    •  “GFX” e instalamos Adafruit GFX Library by Adafruit (que tiene dependencias) (Tutorial-II) 
  • “LoRa” e instalamos LoRa by Sandeep Minstry ( Tutorial-I y Tutorial-II ) 
  • “ESP8266 and ESP32 Oled Driver for SSD1306 display”  (Tutorial-I) 

Después de tener instaladas todas, reiniciamos Arduino IDE y comenzamos con el código


PRUEBAS BÁSICA DE FUNCIONAMIENTO DE ARDUINO IDE

Verificar y compilar el programa dummy (No hace abslutamente nada):

void setup() {
  // put your setup code here, to run once:
}
void loop() {
  // put your main code here, to run repeatedly:
} 

Pueden pasar dos cosas que se compile sin  errores con un código como el siguiente:

  •  "Sketch uses 265589 bytes (20%) of program storage space. Maximum is 1310720 bytes. Global variables use 17888 bytes (5%) of dynamic memory, leaving 309792 bytes for local variables. Maximum is 327680 bytes.

o que de algun error:

  • "Compilation error: redefinition of 'void setup()" : nos que tiene mas de una pestaña con código y se hace un lio, cierre todas menos una

PRUEBAS BÁSICA DE CONEXION DE ARDUINO IDE PLACA ESP32-LORA

ATENCION: La carga de un nuevo firmware borrará el existente, si quiere conservarlo, consulte ESP32 LoRa for dummys - Firmware backup  & restore 

  

Conecte la placa  al ordenador con un cable USB "bueno" y si todo va bien (drivers y cables correctos) le apareceran en el IDE las posibles formas de conectarse. 


Si no le aparecen las entradas USBSERIAL use "La navaja de Ockham" centrese en el cable USB que es lo mas facil de recolver, despues comprube que ha instalado los drivers de cmunicaciones serie-USB que corresponden al sistema operativo del ordenador y al circuito de la placa ESP32.

Mas cosas que podemos comprobar si perdura el error de comunicaciones:

  • COMPROBAR QUE EN MACOS ESTÁ INSTALADO la extensión del kernel "usbserial.kext" 
  • Para comprobar que puertos son los que reconoce el sistema operativo y por tanto el IDE se puede consultar Establish Serial Connection with ESP32 
    • En macOS se teclea en la consoloa ls /dev/cu.* y hay problemas si solamente 
        • /dev/cu.Bluetooth-Incoming-Port 
      • pues debería devolver 
        • /dev/cu.Bluetooth-Incoming-Port 
        • /dev/cu.SLAB_USBtoUART      
        • /dev/cu.SLAB_USBtoUART7

Verificar, compilar y cargar para probar la placa con el programa del tutorial-I. Para ello borre el programa de ejemplo, copie y pegue el código, despues en Sketch haga "verificar y compilar" (Observe que en ... puede renombrar el programa y salvarlo en la carpeta que quiera, tambien que la extensión de los fuentes de progrmas de arduino es .ino)

int led = 22;
void setup() {
  pinMode(led, OUTPUT);
}
void loop() {
  digitalWrite(led, HIGH);
  delay(1000);
  digitalWrite(led, LOW);
  delay(1000);
}

Ahora veremos en la consola del IDE los mensajes del establecimiento de conexión y de carga:

Connecting.....  

Chip is ESP32-PICO-D4 (revision v1.1) Features: WiFi, BT, Dual Core, 240MHz, Embedded Flash, VRef calibration in efuse, Coding Scheme None Crystal is 40MHz MAC: xx:xx:xx:xx:xx:xx 

Uploading stub...

Running stub...

Stub running...

Changing baud rate to 921600

Changed.

Configuring flash size...

Flash will be erased from 0x00001000 to 0x00007fff...

Flash will be erased from 0x00008000 to 0x00008fff...

Flash will be erased from 0x0000e000 to 0x0000ffff...

Flash will be erased from 0x00010000 to 0x00051fff...

Compressed 24896 bytes to 16262...

Writing at 0x00001000... (100 %)

Wrote 24896 bytes (16262 compressed) at 0x00001000 in 0.5 seconds (effective 396.0 kbit/s)...

Hash of data verified.

Compressed 3072 bytes to 146...

Writing at 0x00008000... (100 %)

Wrote 3072 bytes (146 compressed) at 0x00008000 in 0.0 seconds (effective 549.4 kbit/s)...

Hash of data verified.

Compressed 8192 bytes to 47...

Writing at 0x0000e000... (100 %)

Wrote 8192 bytes (47 compressed) at 0x0000e000 in 0.1 seconds (effective 696.2 kbit/s)...

Hash of data verified.

Compressed 267904 bytes to 148658...

Writing at 0x00010000... (10 %)

Writing at 0x0001b85c... (20 %)

Writing at 0x00024902... (30 %)

Writing at 0x00029a7a... (40 %)

Writing at 0x0002eef0... (50 %)

Writing at 0x0003424e... (60 %)

Writing at 0x0003ceb8... (70 %)

Writing at 0x000460a1... (80 %)

Writing at 0x0004b79f... (90 %)

Writing at 0x00050f28... (100 %)

Wrote 267904 bytes (148658 compressed) at 0x00010000 in 2.2 seconds (effective 972.0 kbit/s)...

Hash of data verified.

Leaving...

Hard resetting via RTS pin... 

 

Ahora debemos hacer un reset apretando el botón de la placa, pero no vemos que parpadee el led verde (Parece que no funciona de forma correcta pues el pin que usa el LED lo comparte con la pantalla)


En este punto el tutorial I carga en dos placas ESP32 LoRa sendos programas para demostrar el funcionamiento de LoRa como protocolo de comunicaciones, puede hacerlo, pero igual le resulta mas provechoso instalar la aplicación Meshtastic que hace lo mismo pero de forma profesional.


Errores frecuentes en la carga
  • A fatal error occurred: Failed to connect to ESP32-S3: No serial data received.
    • No estan los drivers correctos, el cable USB da errores o no está encufado, se ha seleccionado una conexión erronea
  • A fatal error occurred: Failed to write to target RAM (result was 01070000: Operation timed out)
    • Compruebe que usa  chuusbserial

 

Comentarios

Entradas populares de este blog

SDR - Software Defined Radio - IIIb: Receptores RSP o MSI (MSI3001: MSI2500 + MSI001)

Amplificadores LNA compactos

Ayudas a la navegación aerea: NDB, VOR, ILS y ATIS