Programación ESP8266 con MicroPython - pensactius/ESP8266 GitHub Wiki

(extraído de Python for Undergraduate Engineers)

Qué es MicroPython

MicroPython es una versión de Python diseñada para ejecutarse en microcontroladores de bajo consumo. Normalmente Python se ejecuta en un ordenador de mesa o portátil (o también en grandes servidores). En comparación con un ordenador de mesa o portátil un microcontrolador es mucho más pequeño, barato y menos potente. Una versión "normal" de Python no podría ejecutarse en un microcontrolador, ya que Python de por sí requiere de más potencia, memoria RAM y disco duro de las que un microcontrolador puede ofrecer.

Para que MicroPython pueda ejecutarse en una placa de características tan limitadas como el ESP8266, MicroPython contiene únicamente un subconjunto de las funcionalidades de una versión completa de Python. Esto permite que MicroPython sea muy compacto (alrededor de unos 600 KB para la versión de ESP8266) y usa muy poca memoria (tan sólo unos 16 KB según la página principal de MicroPython.

Incluso existe la opción de probar Micopython de forma online con este simulador online de MicroPython. El emulador permite ejecutar comandos en un entorno MicroPython y ver los resultados en una placa pyboard virtual.

¿Qué se puede hacer con MicroPython?

MicroPython se puede instalar en microcontroladores baratos como el ESP8266. Todo lo que puede hacer el microcontrolador lo puede hacer MicroPython también. Por ejemplo usar el microcontrolador como sensor remoto para medir temperatura, humedad o intensidad de luz. MicroPython puede usarse también para hacer parpadear los LEDs, controlar matrices de LEDs, o controlar pequeñas pantallas. MicroPython puede controlar motores servo, motores paso a paso y selenoides. También se puede usar para monitorizar niveles de agua, controlar robots o controlar los niveles de voltaje en sistemas embebidos.

¿Por qué aprender MicroPython?

Python es un lenguaje de programación muy potente pero a la vez muy sencillo de aprender. Es muy común usar Python para resolver problemas de ingenería como cálculos, estadística, modelado y visualización. Pero Python de por sí es muy limitado a la hora de controlar dispositivos externos al ordenador en que se está ejecutando. Además no sería práctico dejar un portátil al aire libre para medir la temperatura o niveles de agua; pero sí podrías dejar un pequeño y barato microcontrolador junto a un sensor de temperatura o de niveles de agua. Un pequeño robot no podría transportar un pesado portátil, pero un pequeño, ligero y barato microcontrolador de bajo consumo podría controlar un simple robot. No querrías usar un portátil para controlar cada pequeño proyecto electrónico que necesites realizar, pero sí podrías usar un módulo con conexión WiFi que cuesta tan sólo 2€.

(información extraída de la documentación oficial de MicroPython)

Comenzando con MicroPython

En esta sección veremos como instalar MicroPython, comenzar un intérprete de comandos, usar WebREPL, conectar a la red y comunicar con Internet.

Requerimientos

Lo primero que necesitarás, obviamente, es una placa basada en el chip ESP8266. MicroPython soporta el chip ESP8266 en general, así que cualquier placa con ese chip (como la Wemos D1 mini o la NodeMCU) debería servir. La característica principal de la placa es cuánta flash tiene, como están conectados los pines GPIO (General Purpose Input Output/Entrada Salida de Propósito General) al mundo exterior y si tiene conversor USB-Serie integrado para poder programar directamente desde el USB del ordenador.

El tamaño mínimo de memoria flash es de 1 MByte. Hay una versión especial de MicroPython para placas con 512KB, pero está severamente limitado y hay algunas características eliminadas. No es recomendable esta versión de 512KB para comenzar.

En este tutorial nombraremos los pines usando los nombres del chip (i.e. GPIO0) y no el nombre en la placa. No Debería ser difícil encontrar qué pin corresponde a tu placa en particular.

Como ya se vio en la Introducción, yo uso una versión de NodeMCU algo diferente, pero tiene exactamente las mismas funcionalidades que el resto de placas tipo NodeMCU.

Recuerdo el pinout de esta placa:

NodeMCU pinout

Obtener el firmware

Lo primero que se necesita es descargar el fichero .bin correspondiente al firmware más reciente de MicroPython. Puedes descargarlo desde la página de descargas de MicroPython.

Yo usaré la última versión estable a fecha de escribir estas líneas

Cargar el firmware

Una vez descargado el fichero del firmware hay que cargarlo al dispositivo ESP8266. Hay dos pasos involucrados en este proceso: primero hay que poner el dispositivo en modo boot-loader y segundo deberás copiar el firmware a la placa. Los pasos concretos para realizar estos dos pasos dependen de la placa a usar y deberás consultar la documentación de esta para los detalles.

Si tienes una placa con conector USB y conversor USB-serie integrado, con los pines DTR y RTS cableados de una forma determinada, entonces cargar el firmware debería ser tarea fácil, ya que los dos pasos se realizan automáticamente. Placas como la Adafruit Feather HUZZAH y NodeMCU incluyen estas características.

En esta sección describiré los pasos que he usado en mi versión de NodeMCU. Para maximizar las opciones de éxito a la hora de subir el firmware es recomendable primero borrar toda la flash del dispositivo antes de subir el firmware de MicroPython.

Utilizaremos la herramienta esptool.py para subir el firmware a la placa. Puedes encontrar esta herramienta en https://github.com/espressif/esptool/, or instalarla usando pip (deberás tener Python instalado antes en tu ordenador):

pip install esptool

Las versiones 1.3 en adelante soportan tanto Python 2.7 como Python 3.4 (o posteriores).

Con esptool.py puedes borrar la flash con el siguiente comando:

esptool.py --port /dev/ttyUSB0 erase_flash

Y cargar el firmware usando:

esptool.py --port /dev/ttyUSB0 --baud 460800 write_flash --flash_size=detect 0 esp8266-20200911-v1.13.bin

Probablemente deberás cambiar el "puerto" dependiendo del puerto USB al que hayas conectado la placa y el Sistema Operativo (en Windows será algo como COM3 o COM4, etc.). También puede que debas reducir la velocidad de transferencia "--baud" si obtienes errores al cargar el firmware (i.e. reducir a 115200). El nombre y ruta del archivo de firmware también debe coincidir con el que tengas.