micropython-guardar-script-en-placa

Guardar el script en el dispositivo en MicroPython

  • 3 min

Vamos a ver cómo grabar nuestro programa o script en un dispositivo, de forma que la placa ejecute el programa de forma autónoma (sin un PC conectado).

Hasta ahora hemos creado nuestro primer programa (blink) y hemos visto como se ejecuta a través del REPL de MicroPython.

Pero, al desconectar el dispositivo y volverlo a conectar, el programa no se conserva. Es decir, no hemos guardado nuestro programa en el dispositivo.

Lógicamente nosotros queremos poder subir nuestro programa a la placa, y que esta lo ejecute la próxima vez que se reinicie. Así que vamos a ver como hacerlo.

Sistema de archivos en la placa

Normalmente, en un sistema embebido, cuando queremos guardar nuestro programa lo que hacemos es grabarlo en el dispositivo, sobreescribiendo su configuración.

Pero en el caso de MicroPython, ya tenemos un firmware cargado en el dispositivo. Que es, precisamente, el intérprete de Python. Así que no podemos sobreescribirlo.

En su lugar, MicroPython funciona con un sistema de ficheros, que es muy similar al de un ordenador, con directorios y archivos.

  • Archivo principal (main.py): Este archivo se ejecuta automáticamente cuando la placa se inicia. Es el punto de entrada principal para cualquier proyecto.
  • Archivos de módulos: Puedes crear módulos personalizados (por ejemplo, sensor.py) y utilizarlos en tu programa principal.

Por ejemplo, nuestro proyecto podría tener la siguiente estructura,

/
├── main.py
├── sensor.py
├── config.json
└── data/
    └── log.txt

Es decir, para subir nuestro proyecto tenemos que subir nuestra estructura de directorios y ficheros al dispositivo. En el arranque, MicroPython ejecutará el fichero main.py.

Herramientas para la transferencia de archivos

Los distintos IDEs y herramientas que nos la transferencia de archivos a una placa MicroPython. Vamos a ver cómo hacerlo en los más populares,

En Arduino Lab for MicroPython, tenéis un icono con un símbolo de carpeta. Al pulsarlo, se nos abre una ventana.

Podemos seleccionar ficheros desde nuestro ordenador, y subirlos a la memoria del dispositivo.

micropython-subir-ficheros-1

En Thonny, para subir el fichero simeplemente tenemos que elegir Archivo > Guardar como....

Nos saldrá una ventana con dos opciones, donde podemos elegir nuestro dispositivo.

micropython-subir-ficheros-2

ampy (Adafruit MicroPython Tool) es una herramienta de línea de comandos que permite interactuar con placas MicroPython desde la terminal.

Podemos instalarlo con este comando:

pip install adafruit-ampy

Para transferir ficheros con ampy, conectamos la placa y obtenemos el puerto serial (por ejemplo, /dev/ttyUSB0 en Linux o COM3 en Windows). Ejecutamos el siguiente comando,

ampy --port /dev/ttyUSB0 put archivo.py

Para verificar que el archivo se ha transferido correctamente, puedes listar los archivos en la placa:

ampy --port /dev/ttyUSB0 ls

Transferencia de múltiples archivos

En proyectos más complejos, es común necesitar transferir múltiples archivos a la placa. A continuación, te mostramos cómo hacerlo:

En Arduino Lab podemos subir carpetas desde la ventana que hemos visto. Si dentro de la carpeta tenemos varios ficheros, los subirá todo.

Curiosamente, me deja elegir varios ficheros fuera de la carpeta (esta parte del UI es francamente mejorable).

En Thonny, podemos activar un explorador de archivos, pulsando en Visualizar / Archivos

micropython-subir-ficheros-3

También podemos crearnos un pequeño script para automatizar la transferencia con ampy (útil en proyectos con muchos muchos muchos ficheros).

import os
import subprocess

port = "/dev/ttyUSB0"  # Cambia esto según tu puerto
files = ["main.py", "sensor.py", "config.json"]

for file in files:
    subprocess.run(["ampy", "--port", port, "put", file])