MicroPython y Lua en el ESP32: programar sin compilar

Cómo flashear y usar MicroPython en el ESP32, qué puedes y qué no puedes hacer, el REPL, mpremote, y por qué Lua (NodeMCU) ya no merece la pena.

También disponible en: EN, ES

Serie Introducción al ESP32 Parte 13 Ver la serie →
MicroPython sobre el ESP32

Hay una forma de programar el ESP32 en la que no compilas nada: flasheas un firmware, abres una consola y escribes Python. En cinco minutos tienes un LED parpadeando. Se llama MicroPython y es la mejor puerta de entrada que existe.

La otra cara: es más lento y no todo está cubierto. Vamos a verlo con honestidad.

Qué es MicroPython

Es una implementación de Python 3 hecha para microcontroladores. Ocupa poco, cabe en el ESP32 y te da un REPL (consola interactiva) por USB o Wi-Fi.

Flashear y conectar

Se instala con esptool (el firmware lo publica micropython.org):

esptool.py --chip esp32 -p /dev/ttyUSB0 erase_flash
esptool.py --chip esp32 -p /dev/ttyUSB0 write_flash -z 0x1000 esp32-*.bin

Y para hablar con la placa, mpremote:

mpremote connect /dev/ttyUSB0
>>> import machine, time
>>> led = machine.Pin(2, machine.Pin.OUT)
>>> while True:
...     led.value(not led.value()); time.sleep(1)

Eso es todo. Sin compilar, sin setup(), sin loop(). Perfecto para aprender.

Subir tu código

El ESP32 aparece como un sistema de ficheros (en boot.py y main.py):

mpremote cp main.py :main.py     # copiar
mpremote run main.py             # ejecutar sin copiar

main.py se ejecuta solo al arrancar.

Lo bueno

  • Curva mínima si sabes Python (o si no, también).
  • Iteración instantánea: pruebas una línea y ves el resultado.
  • Ideal para enseñar y para taller.
  • Buenos módulos: machine, network, time, socket, json.

Lo malo (importante)

  1. Velocidad: es interpretado, así que olvídate de timing fino o de procesar audio/vídeo.
  2. Memoria: el intérprete ocupa parte de la RAM; con PSRAM mejora, pero no es C.
  3. Periféricos: no todos los del ESP32 están expuestos. Si algo falta, normalmente hay que bajar a C.
  4. Tiempo real: no hay tareas con prioridad real como en FreeRTOS.
  5. Producción: para un producto serio, casi siempre se acaba en C/C++ o Rust.

¿Y Lua (NodeMCU)?

Fue popular con el ESP8266. Hoy está prácticamente aparcado: menos soporte, menos librerías y MicroPython es más cómodo y está más vivo. Para proyectos nuevos, no lo recomiendo.

Comparativa rápida

MicroPythonArduinoESP-IDF
CompilarNo
VelocidadBajaAltaAlta
RAM disponibleMenosMuchaMucha
TareasNo1 loopN tareas
CurvaMuy bajaBajaAlta
Ideal paraAprender, prototiposTodoProducto

Cuándo usarlo (y cuándo no)

Sí:

  • Estás aprendiendo o enseñando.
  • Quieres probar una idea en 10 minutos.
  • El proyecto es un sensor que publica y no necesita velocidad.

No:

  • Necesitas timing preciso o DSP.
  • Vas a producción con requisitos de memoria o consumo.
  • Necesitas un periférico que no está expuesto en Python.

Resumen

  • MicroPython: Python en el ESP32, sin compilar, con REPL y sistema de ficheros. Versión actual: 1.29.
  • Es la mejor forma de empezar y de prototipar rápido.
  • Es más lento y usa más RAM: no sirve para todo.
  • Lua/NodeMCU ya no merece la pena para proyectos nuevos.
  • Puedes empezar en MicroPython y bajar a C/Rust cuando el proyecto lo pida.

Siguiente paso: Rust en el ESP32, el otro extremo: máxima seguridad y control. O vuelve al hub de la serie.

Entradas relacionadas

↑↓ navegar ↵ abrir Esc cerrar