ESP32

Ya metidos en el mundo de los microcontroladores, se me ha ocurrido «pegarme» con uno que no conocía. Se trata del micro ESP32 que es un micro de la pera limonera según dice el fabricante que es Espressif. Según cuenta este chip tiene wifi, bluetooth, doble core y no sé cuántas cosas más.

A veces me da el punto y elijo algunos productos sin mirar demasiado la documentación. En este caso me ha pasado ya que he comprado tres micros en Amazon mirando únicamente el precio, ya que comprando esos tres salían cada uno a 8 €. Confiaba encontrar información detallada en internet, pero esto no es como las Raspberry Pi Pico o las placas de Arduino, ya que cada placa es de su padre y de su madre. En concreto compré esas tres placas.

Lo primero que no me gustó es que son muy anchas, por lo tanto no encajan bien en las placas de prototipos (breadboard) normales y he tenido que hacer un invento cutre para poder pinchar la placa. En la imagen se pueden ver las dos placas de prototipos pequeñas, la placa ESP32 pinchada en una y otra y el hueco que hay entre las dos placas de prototipos. No se me ha ocurrido otra forma de pincharlo. Se ve de color rojo porque como puede verse la placa ESP32 está conectada por USB y al hacerlo se enciende un led de color rojo.

En un principio viene pensado para trabajar con el IDE de Arduino, así que instalé esta herramienta, pero vi que no reconocía la tarjeta. Lo primero es instalar los drivers del chip CP2102 que es el chip utilizado para pasar de USB a puerto serie. El driver se puede encontrar en la web del fabricante (Silicon Labs) en concreto en este enlace. En mi caso bajé el driver para Mac, que es un fichero ZIP que al descomprimirlo se puede encontrar un fichero de texto y una imagen DMG que al montar se puede ver que contiene varios ficheros y uno de ellos es el fichero «Install CP210x VCP Driver». Haciendo doble clic sobre este fichero se instala el driver siguiendo un wizard, sencillo. Si está insertada la placa se verá un fichero llamado /dev/cu.SLAB_USBtoUART, bastante explicativo el nombre.

En el IDE de Arduino vienen las placas de Arduino, lógicamente, por lo que hay que hacer un apaño para incluir otras. En las preferencias de este IDE hay una opción que es el Gestor de URLs adicionales de tarjetas. Ahí añadí la URL https://raw.githubusercontent.com/espressif/arduino-esp32/gh-pages/package_esp32_index.json y ya pude elegir la tarjeta. En una de las reseñas de Amazon leí que se podía elegir la tarjeta NodeMCU-32S y esa fui la que elegí.

Lo malo es que el Mac con el que trabajo es un Mac antiguo y la versión del sistema operativo es, por lo tanto, también antigua, en concreto la 10.13.6 y a la hora de compilar me decía que había un error con Python porque was built for Mac OS X 11.0. Mi gozo en un pozo. De todos modos, para saber si el chisme funcionaba o no, probé en Windows, instalando primero el driver del chip CP2102 y luego el IDE de Arduino con la URL de tarjetas adicionales y eligiendo la tarjeta NodeMCU-32S. Ahí sí pude compilar el programilla del led intermitente y subirlo a la placa:

#define ONBOARD_LED  2

void setup() {
  pinMode(ONBOARD_LED,OUTPUT);
}

void loop() {
  delay(1000);
  digitalWrite(ONBOARD_LED,HIGH);
  delay(100);
  digitalWrite(ONBOARD_LED,LOW);
}

¡Y funcionó!

Se me ocurrió que como no funcionaba con el IDE de Arduino podía probar con el IDE Thonny y MicroPython. Ya se trabaje con Thonny o con el IDE de Arduino hay que tener el driver del chip CP2102, por lo que ya tenía una cosa hecha. En las preferencias de Thonny hay que indicar que el puerto es el /dev/cu.SLAB_USBtoUART y que el intérprete es MicroPython(ESP32), tal como se ve en la imagen.

Una vez se tenga la placa ESP32 conectada hay que cambiar el firmware de la placa para poder utilizar el MicroPython. Para ello hay que descargarse el firmware en la web https://micropython.org/ eligiendo el chip en cuestión. En este caso seleccioné la primera ESP32 que encontré entre las múltiples opciones que te ofrecen en la sección de descargas. ¿Y por qué elegí esa? Porque la foto es muy parecida a la que compré y porque aparece el texto ESP-WROOM-32 que es lo mismo que aparece en el micro de mi tarjeta. La única diferencia es que la placa del «mío» tiene 30 patitas y el de la imagen tiene 36, pero como el chip es el mismo, igual dará, imagino que simplemente habrá algunas puertas de entrada/salida que no estén conectadas en mi caso.

En esta página donde aparece esta foto vienen las instrucciones para instalar el firmware y los ficheros que hay que bajarse. En concreto bajé la versión 1.19.1 del 18 de junio de 2022 en formato bin (esp32-20220618-v1.19.1.bin).

En esas instrucciones indican que se necesita la herramienta esptool.py por lo que tuve que instalar la herramienta, pero es cosa sencilla:

$ pip3 install esptool

Me dio unos cuantos warnings ya que el Mac es antiguo, pero se instaló. Y para ver si funcionaba lo primero fue ejecutar un comando que no rompiese nada, como por ejemplo, obtener información de la flash del micro:

$ esptool.py -p /dev/cu.SLAB_USBtoUART flash_id

De lo que se obtiene:

esptool.py v4.2.1
Serial port /dev/cu.SLAB_USBtoUART
Connecting.......
Detecting chip type... Unsupported detection protocol, switching and trying again...
Connecting.........
Detecting chip type... ESP32
Chip is ESP32-D0WD-V3 (revision 3)
Features: WiFi, BT, Dual Core, 240MHz, VRef calibration in efuse, Coding Scheme None
Crystal is 40MHz
MAC: 94:e6:86:01:01:7c
Uploading stub...
Running stub...
Stub running...
Manufacturer: 5e
Device: 4016
Detected flash size: 4MB
Hard resetting via RTS pin...

Al menos parece que el chip es un ESP32, que todo pudiera ser que me hubiesen engañado y que el tamaño de la flash es de 4 MB.

Siguiendo las instrucciones, lo primero es borrar la flash:

$ esptool.py --chip esp32 --port /dev/cu.SLAB_USBtoUART erase_flash

El comando de borrado indica que se ha borrado correctamente:

esptool.py v4.2.1
Serial port /dev/cu.SLAB_USBtoUART
Connecting....
Chip is ESP32-D0WD-V3 (revision 3)
Features: WiFi, BT, Dual Core, 240MHz, VRef calibration in efuse, Coding Scheme None
Crystal is 40MHz
MAC: 94:e6:86:01:01:7c
Uploading stub...
Running stub...
Stub running...
Erasing flash (this may take a while)...
Chip erase completed successfully in 11.5s
Hard resetting via RTS pin...

Y lo siguiente es escribir en la memoria flash el nuevo firmware:

$ esptool.py --chip esp32 --port /dev/cu.SLAB_USBtoUART write_flash -z 0x1000 esp32-20220618-v1.19.1.bin

Y según parece lo hizo bien:

esptool.py v4.2.1
Serial port /dev/cu.SLAB_USBtoUART
Connecting.....
Chip is ESP32-D0WD-V3 (revision 3)
Features: WiFi, BT, Dual Core, 240MHz, VRef calibration in efuse, Coding Scheme None
Crystal is 40MHz
MAC: 94:e6:86:01:01:7c
Uploading stub...
Running stub...
Stub running...
Configuring flash size...
Flash will be erased from 0x00001000 to 0x0017efff...
Compressed 1560976 bytes to 1029132...
Wrote 1560976 bytes (1029132 compressed) at 0x00001000 in 90.9 seconds (effective 137.3 kbit/s)...
Hash of data verified.

Leaving...
Hard resetting via RTS pin...

Después de escribir la nueva flash, llegó el momento de la verdad, así que crucé los dedos y arranqué Thonny… ¡y funcionó!

El siguiente paso fue ejecutar el «hello world» de un cacharro de este tipo, es decir, hacer que parpadee el led que viene soldado en la placa. Para ello hice un sencillo programa:

from machine import Pin
from time import sleep

led = Pin(2,Pin.OUT)

while True:
    led.on()
    sleep(1)
    led.off()
    sleep(1)
    
    

Y desde ese momento pude observar un led azul situado debajo de la esquina derecha del chip que se encendía y se apagaba cada segundo.

Salvando este código en un fichero llamado main.py en el dispositivo, cada vez que el chisme tenga alimentación tendremos el led encendiéndose y apagándose. El siguiente paso será pegarse con la wifi.

Comentarios 1

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *