Micropython: Programando el ESP-01

El ESP-01 es uno de los módulos basados en el ESP8266 mas pequeño y también de los menos valorados, a tal punto que durante mucho tiempo no fue mas que un accesorio para brindar conectividad Wifi a las placas Arduino. Sin embargo, aunque con limitaciones de memoria y de cantidad de pines, alberga al mismo chip que un Nodemcu o un D1 mini, con las mismas potencialidades, lo que lo convierte en una opción a tener en cuenta para un proyecto pequeño y de bajo costo. En este artículo veremos como grabarle el firmware de Micropython para poder programarlo en este lenguaje.

Características

El módulo ESP-01 fue lanzado al mercado en el año 2014 por la firma Ai-Thinker para brindar de conectividad Wifi a las placas Arduino. Con un ESP8266EX, 32 KBytes (256 Kbits) de memoria Flash y un firmware pregrabado, permitía realizar conexiones a un red inalámbrica enviándole comandos AT a través de una conexión serie. Sin embargo, con el paso del tiempo y sobre todo la popularización del ESP8266 gracias a placas como las Nodemcu y la abundancia de información y herramientas de desarrollo, se hizo posible encontrarle mas aplicaciones a este pequeño pero potente módulo. El firmware que contiene puede ser reemplazado por otro, para programarlo en C/C++ desde el IDE de Arduino, o con el de Micropython, como haremos en esta oportunidad.

Por tratarse de una placa muy popular y que es fabricada por distintas empresas, podemos encontrar distintas variaciones. El módulo ESP-01 “clásico” (comúnmente de color azul) puede tener distintas memorias, con valores como 512 Kbyte (4 Mbits) y 1 Mbyte (8 Mbits). También existe una variante denominada ESP-01S (frecuentemente de color negro) que incorpora una memoria de 1 Mbyte y algunas modificaciones en el diseño de la placa.

El aspecto del ESP-01 y ESP-01S puede verse en la siguiente imagen. Destacan el SoC ESP8266EX, la memoria Flash y el conector con los 8 pines de conexión. El ESP01 (izquierda) tiene dos leds integrados, uno de encendido y el otro de uso general, conectado a GPIO2 (a GPIO1 en algunas placas) mientras que el ESP-01S no tiene led de encendido y sólo un led conectado a GPIO2.

Este módulo no incluye un regulador de voltaje para alimentar al ESP8266, así que debemos proveerle una tensión de 3,3 voltios y tampoco cuenta con un adaptador para programarlo desde un puerto USB, así que deberemos usar uno externo.

ESP-01 a la izquierda y ESP-01s a la derecha

La cantidad de señales en el conector es bastante reducida. Además de la alimentación de 3,3V (VCC y GND) tenemos dos pines de control (RESET y CH_PD) y cuatro pines de uso múltiple (GPIO) que podemos emplear en nuestros proyectos (GPIO0, GPIO2, GPIO1 y GPIO3) aunque estos dos últimos se usan para la comunicación en el proceso de programación (TX y RX). Afortunadamente GPIO0 y GPIO2 se pueden usar también para controlar dispositivos I2C, ampliando considerablemente la capacidad de interconexión del módulo.

Distribución de pines (de ambos modelos)

Instalando Micropython

La grabación del firmware de Micropython se puede hacer con el mismo procedimiento que vimos anteriormente empleando la herramienta ESPTOOL desde Windows o Linux. El método mas sencillo utilizando Thonny, que también expliqué, no funciona porque es necesario reiniciar la placa entre el borrado de la Flash y la posterior grabación, una operación que debemos hacer de forma manual.

La mayor complicación en el proceso de grabación es conectar el módulo a la computadora mediante un adaptador de nivel, tambien conocido como adaptador FTDI (aunque esta es una marca comercial). Si bien hay varios tipos y modelos, es importante elegir uno que provea una tensión de alimentación de 3,3V o que al menos tenga una llave selectora 5V/3,3V (que fijaremos en 3,3V). Esto es muy importante, ya que si alimentamos al ESP-01 con 5V lo mas probable es que lo dañemos de manera irreparable.

Alimentación

El ESP-01 debe ser alimentado con una tensión de 3,3V

Adaptador FTDI

Además de la alimentación y las señales TX/RX que sirven para comunicar la placa con la computadora, también debemos conectar CH_PD a VCC, para que el ESP-01 esté habilitado y GPIO a GND. GPIO0 cumple una función fundamental en el proceso de grabación, ya que cuando el ESP8266 se inicia luego de un reset, entra en modo PROGRAMACION si GPIO está conectado a GND o entra en modo UART (comunicación) si GPIO está a VCC (lo cual se consigue desconectándolo de GND, ya que internamente tiene una resistencia de PULL UP).

El esquema de conexiones es el siguiente:

Conexiones entre el ESP-01 y el adaptador FTDI

Al realizar las conexiones debemos tener en cuenta que va a ser necesario conectar y desconectar GPIO de GND. En mi caso, el adaptador FTDI tiene un conector ISP donde están disponibles VCC y GND así que lo conecté en uno de esos pines para poder hacerlo con facilidad.

Conexiones entre el adaptador FTDI y el ESP-01

Antes de continuar, debemos revisar la cantidad de memoria que tiene nuestro ESP-01. Podemos hacerlo visualmente, copiando el nombre del chip de memoria y buscando sus especificaciones o empleando el programa ESPTOOL.

Instalación de ESPTOOL

ESPTOOL es un programa escrito en Python, así que para hacerlo funcionar debemos tener instalado Python en nuestra computadora. Si no tienes ESPTOOL instalado, sigue las siguientes indicaciones

Conectamos el adaptador FTDI a un puerto USB abrimos una ventana de comandos (cmd en Windows) y escribimos lo siguiente (reemplazando el puerto COM por el puerto donde esté nuestro ESP-01)

esptool.py --port COM8: --baud 115200 flash_id  

Obtendremos algo así para una placa con 512KB:

Salida de ESPTOOL para una placa de 512KB

Y lo siguiente para una placa de 1MB:

Salida de ESPTOOL para una placa de 1MB

Una vez corroborada la cantidad de memoria, debemos descargar la versión de firmware apropiada, ya sea para dispositivos con 512KB o para 1 MB, siempre desde la página de Micropython

Dispositivos de 512 KB

En todas las pruebas que realicé, el firmware de 512 KB se graba correctamente en placas con 512 KB de memoria, pero luego Thonny no funciona, devolviendo una serie de errores. (tanto con versiones nuevas o “inestables” del firmware como con otras mas antiguas). Las únicas placas que funcionaron correctamente son las que tienen al menos 1 MB de memoria.

Hecha esta aclaración, continuaremos con el proceso de grabación usando como ejemplo sólo el firmware de 1 MB (de todos modos, la versión de 512 KB tiene muchas limitaciones).

Abrimos una ventana de comandos y nos movemos a la carpeta donde está el arhivo del firmware descargado. Una vez allí, borramos la memoria con ESPTOOL:

esptool.py --port COM8: erase_flash

Borrado de la memoria

Una vez completado el borrado con éxito, desconectamos el adaptador FTDI y lo volvemos a conectar, para resetear el ESP-01.

A continuación, grabamos el Firmware:

esptool.py --port COM8: --baud 460800 write_flash --flash_size=detect 0 esp8266-1m-20200902-v1.13.bin

Grabación del firmware de 1MB

Luego de que se haya grabado el firmware debemos sacar a la placa del modo PROGRAMACIÓN desconectando GPIO0 y reseteando nuevamente desconectando el adaptador (con desconectar GPIO0 no alcanza, siempre debemos resetear la placa).

Llegado a este punto la placa ya está en modo UART y con el firmware cargado. Si abrimos Thonny y configuramos el intérprete y el puerto (Ejecutar – Elegir intérprete) ya podremos escribir nuestros programas en MIcropython.

Thonny funcionando en el ESP-01

Ejemplo

Y para probar, el típico Blink:

El programa en funcionamiento

Si queremos que el programa sea autónomo, podemos grabarlo en el sistema de archivos de la placa con el nombre main.py, como habitualmente lo haríamos con cualquier otra placa.

Conclusión

Vimos como preparar el ESP-01 para programarlo en Micropython grabandole el firmware correspondiente. En placas con sólo 512 KB hay problemas y aunque el firmware se graba sin errores, luego no se pueden programar, asi que debemos usar aquellas que tengan al menos 1 MB de memoria. A pesar de las limitaciones de pines y memoria, estas pequeñas y económicas placas pueden encontrar su “nicho” de aplicación en nuestros proyectos con Micropython.

En próximos artículos les compartiré proyectos realizados con el ESP-01, mientras tanto espero que puedan grabar sus placas y comenzar a desarrollas los suyos. Cualquier duda o sugerencia pueden hacerla en la sección de comentarios.

6 comentarios en «Micropython: Programando el ESP-01»

  1. Estimado profesor.Ante nada muchas gracias por su articulo, me ha parecido muy útil. Sin embargo tengo un problema y es que cuando intento guardar el main.py con thonny en el esp-01 me da error, diciendo q el dispositivo esta ocupado. Le agradecería mucho si pudiera aclararme a que se debe este error.Gracias de antemano

    Responder
    • Hola Ronald, seguramente es porque intentas hacerlo cuando se está ejecutando un programa. Detenlo con el botón STOP (o CTRL + F2) y prueba de nuevo

      Responder
      • Saludos profesor, lo he intentado con el programa detenido siempre, me llama la atención que cuando abro el dispositivo no me sale el archivo boot.py que si me sale cuando estoy utilizando el nodemcu, o sea como si la memoria estuviera vacia.Tal vez eso nos pueda dar algun indicio.graacias por responder

        Responder
  2. Yo tenía el mismo problema, el problema fue que tomaba la última versión del firmware. Probé con otro firmware anterior, concretamente con uno que no está etiquetado como “Unstable” y ya aparece el archivo Boot.py, además de que ya puedo grabar archivos en el ESP-01

    Responder
  3. Buenos noches, quería consultar porq hice todos los pasos con esp01-s y una vez flasheado me devuelve caracteres raros. podrán ayudarme?
    saludos.-

    Responder

Deja un comentario

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.

Habilitar notificaciones OK No, gracias