Programación ESP8266 con MicroPython - pensactius/Tutoriales 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)

Instalación de MicroPython en ESP8266

En esta sección veremos como instalar MicroPython en una placa basada en el chip ESP8266.

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, cómo 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/, o 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

En algunas placas más recientes de NodeMCU es posible que necesites especificar un modo SPI Flash Mode. Normalmente querrás especificar la opción más rápida que sea compatible con tu dispositivo, pero la opción -fm dout (la opción más lenta de todas) es la más compatible. A continuación tienes las posibles opciones de velocidad a especificar (de más rápido a más lento). Si tras subir el firmware no consigues que arranque con MicroPython te sugiero que pruebes en orden las diferentes configuraciones hasta que encuentres la mínima velocidad estable:

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

Es posible que no reconozca directamente el comando esptool.py. Si es así, prueba a ejecutar los comandos anteriores de la siguiente manera:

python -m esptool --port /dev/ttyUSB0 erase_flash
python -m esptool --port /dev/ttyUSB0 --baud 460800 write_flash --flash_size=detect 0 esp8266-20200911-v1.13.bin
python -m esptool --port /dev/ttyUSB0 --baud 460800 write_flash --flash_size=detect -fm dout 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.

Instalación de MicroPython en ESP32

En esta sección veremos como instalar MicroPython en una placa basada en el chip ESP32.

Requerimientos

Lo primero que necesitarás, obviamente, es una placa basada en el chip ESP32. MicroPython soporta el chip ESP32 en general, yo uso la placa ESP32-WROOM-32D.

Recuerdo el pinout de esta placa:

ESP-WROOM-32 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.

Usaremos la última versión estable a fecha de escribir estas líneas y basado en la API ESP IDF v3.x SIN SPIRAM:

Cargar el firmware

Una vez descargado el fichero del firmware hay que cargarlo al dispositivo ESP32. 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/, o 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 --chip esp32 --port /dev/ttyUSB0 erase_flash

Y cargar el firmware con inicio de ejecución en 0x1000 usando:

esptool.py --chip esp32 --port /dev/ttyUSB0 --baud 460800 write_flash -z 0x1000 esp32-idf3-20200902-v1.13.bin

Es posible que no reconozca directamente el comando esptool.py. Si es así, prueba a ejecutar los dos comandos anteriores de la siguiente manera:

python -m esptool --chip esp32 --port /dev/ttyUSB0 erase_flash
python -m esptool --chip esp32 --port /dev/ttyUSB0 --baud 460800 write_flash -z 0x1000 esp32-idf3-20200902-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.

Instalación del Editor Thonny IDE

La forma más sencilla de comenzar a programar en MicroPython con la placa ESP8266 o ESP32 es usando el editor Thonny IDE. Aunque hay otras maneras de programar en MicroPython, mi experiencia con Thonny IDE ha sido de las más fáciles para comenzar.

Este editor permite programar en python normal para ordenadores, para raspberry y también en MicroPython para ESP8266 y ESP32. Lo mejor de todo es que conecta con la placa automáticamente y de forma transparente.

Instalación

(imágenes extraídas de randomnerdtutorials.com)

La forma más sencilla de instalar el editor en Windows es descargándolo desde la propia página web:

  • Ejecuta el fichero .exe descargado:

  • Sigue las instrucciones de instalación. Simplemente pulsa Next.

  • Una vez instalado abre el editor Thonny IDE. Se debería abrir una ventana como la que se muestra:

Alternativa de Instalación

Como alternativa, si tienes python3 instalado, se puede instalar Thonny IDE usando el gestor de paquetes de python pip3:

sudo pip3 install thonny

El propio gestor de paquetes pip3 se encargará de buscar la aplicación e instalarla así como sus dependencias.

Si lo instalas así es probable que no aparezca ningún icono de aplicación. La forma de abrirlo será usando una ventana de terminal y escribir:

thonny

Entonces debería abrirse la aplicación Thonny IDE.

Configuración para ESP8266/ESP32

Importante: antes de comprobar la instalación, la placa ESP8266/ESP32 debe tener el firmware de MicroPython ya instalado como se ha explicado anteriormente.


Conecta la placa al USB del ordenador. Para probar la instalación, hay que decirle a Thonny que queremos ejecutar el intérprete de MicroPython que hay instalado en la placa.

  • Ve a Tools > Options y selecciona la pestaña Interpreter.

  • Selecciona MicroPython (ESP8266) o MicroPython (ESP32) dependiendo del modelo que estés usando.

  • A continuación debes seleccionar el puerto al que está conectada la placa:

  • El editor Thonny IDE debería estar ahora conectado a la placa y deberías ver el prompt desde el intérprete de comandos.

  • Teclea el comando help() en el intérprete y deberías ver que éste te responde:

Si ha respondido, todo funciona correctamente. Probemos a enviar más comandos.

Escribe lo siguiente en el intérprete de MicroPython para encender el LED interno de la placa

from machine import Pin
Pin(2, Pin.OUT).value(1)

Si usas una placa ESP8266 la lógica para encender el LED interno de la placa está invertida, deberías escribir lo siguiente:

from machine import Pin
Pin(2, Pin.OUT).value(0)

Si todo va bien, el LED interno de la placa se debería encender.

¡Felicidades! ¡La instalación de MicroPython ha sido todo un éxito!

Vistazo Rápido a Thonny IDE

(Información extraída de randomnerdtutorials.com)

Si has llegado hasta aquí deberías tener:

  • Thonny IDE instalado en tu ordenador
  • ESP32/ESP8266 con el firmware de MicroPython

Abre el editor Thonny IDE. Hay dos partes diferenciadas: el Editor y el Shell/Intérprete MicroPython:

  • La sección del Editor es dónde escribes el código y editas los ficheros de python .py. Se pueden abrir múltiples archivos al mismo tiempo y el editor abrirá una pestaña nueva para cada uno.

  • En el Shell/Intérprete MicroPython se pueden ejecutar comandos que se interpretan inmediatamente por la placa ESP sin necesidad de cargar ficheros a la placa. Puedes usar esta zona para probar comandos o una idea de forma rápida. Esta sección también muestra información sobre el estado de ejecución de programas, errores de carga, de sintaxis, muestra mensajes, etc.

Ejecución de Tu Primer Programa

Para familiarizarte con el proceso de escribir un programa y ejecutarlo en la placa ESP32/ESP8266, vamos a crear un script muy sencillo que hará parpadear el LED interno de la placa ESP8266 o ESP32.

Creación del archivo main.py en la placa

Cuando abres el editor Thonny IDE por primera vez se muestra un archivo llamado untitled (sin nombre). Clica el icono de guardar, Thonny IDE nos preguntará dónde queremos guardar: en nuestro ordenador o en la placa ESP32/ESP8266.

Vamos a guardar el archivo directamente en la placa. Para ello pulsamos en MicroPython Device

Nos preguntará ahora el nombre del archivo, lo llamaremos main.py

El editor debería tener ahora una pestaña llamada main.py. A la izquierda en Files se muestra los archivos que hay ahora en la placa ESP32/ESP8266 y los archivos locales en tu ordenador.

El código que usaremos para parpadear el LED es el siguiente:

from machine import Pin
from time import sleep_ms

led = Pin(2, Pin.OUT)

while True:
  led.value (not led.value())
  sleep_ms (250)

Ejecutar el programa

Para ejecutar el programa basta con pulsar el botón Run Current Script (el botón verde) o pulsar F5. Esto ejecutará el script directamente en el ESP32/ESP8266. Si aún no hemos guardado el archivo, Thonny IDE nos preguntará dónde guardarlo como se explicó en el apartado anterior.

Para detener la ejecución del programa pulsa el botón Stop.

Con el programa detenido prueba a resetear la placa: pulsa el botón EN (ESP32) o RST (ESP8266). Verás que el LED empieza a parpadear.


Nota: En mis pruebas he visto que si reinicias la placa mientras IDE Thonny está ejecutando el programa main.py el editor se vuelve inestable y comienza a dar errores. Asegúrate de parar cualquier programa en ejecución pulsando el botón Stop.


Al arrancar MicroPython en placas ESP8266, ejecuta el contenido del archivo boot.py y a continuación, el archivo main.py. Es por eso que, al reiniciar la placa ESP8266, se ejecuta el programa main.py y el LED comienza a parpadear.