ESP32 LoRa for dummys - Inicio
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.
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 suele llevar la placa por defecto (USB-SERIE, BLUETOOTH y Wi-Fi) le añadimos LoRa) aunqee también hay la opción de incorporar la recepción de GPS, pero ¿Qué 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 dá lo mismo una banda que otra).
El modelo elegido, para evitar sorpresas en este primer 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:
- LILYGO®TTGO-módulo inalámbrico LoRa32 V2.1_1,6, banda de 868 Mhz, procesador ESP32 LoRa, pantalla OLED, tarjeta SD de 0,96" (No incluida), Bluetooth, WIFI, conector SMA que sale por unos 25€ e incluye :
- 1 X LoRa32 V2.1 433/868/915 Mhz
- 1 X Power Cable (Jst 2pin 1.25mm): Se trata del cable de alimentación de la placa a partir de una bateria externa con voltaje entre 1,8-3,7V). Se pueden comprar por separado en lotes, ver aliexpress desde 1,25 hasta 2,75mm
- 1 X Antenna
- 2 X Regletas de pines
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 |
La placa 433 MHz funciona sin problemas en las bandas LORA satélites (TinyGS) de 136 y 433, la placa de 866 solamente en la de 866 y por último en Aliexpress hay una placa de 144 MHz (SX1278 144-148MHz) que no aparece enn la web del fabricante ¿?. Si va a configurar una estación TinyGS el 433 es su mejor opción.
LOS CHIPS
Puede necesitar por temas de drivers conocer los chips que incorpora esta placa:
- Serial UART chio CH9102 (para macOS necesita bajarse los drivers de https://github.com/Xinyuan-LilyGO/CH9102_Mac_Driver/blob/main/CH34xVCPDriver.pkg)
- LORA SX1276
- Pantalla OLED (monocroma de 128x64 ) de 0,96 controlada por SSD1306
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 antena) y 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. |
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
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:
- En https://docs.espressif.com/projects/esptool/en/latest/troubleshooting.htmlse tiene la ayuda del fabricante para este punto
- Los drivers para que su SO pueda usar un cable USB como un cable serie (UART) son:
- 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)
- 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
Referencias
- Turorial-I: LoRa + TTN comunicando cosas con Internet
- Tutorial-II: Primeros pasos con el módulo ESP32 TTGO con LoRa
- Tutorial -III : ESP Basic Starter Kit de Loten technology
- Tutorial - IV: ESP32 with LoRa using Arduino IDE – Getting Started
Comentarios
Publicar un comentario