Categorías
Microcontroladores Micropython

Escenarios de uso de `async` en MicroPython

Resumen de [[https://github.com/peterhinch/micropython-async/blob/master/v3/docs/TUTORIAL.md]]

1. Gestión de múltiples tareas de E/S

  • Escenario: Leer datos de un sensor mientras se actualiza una pantalla LED o se responde a pulsaciones de botones.
  • ¿Por qué async?: Los microcontroladores suelen necesitar ejecutar tareas como esperar datos de sensores, escribir en pantallas o gestionar interacciones. async permite que estas tareas se ejecuten de forma cooperativa (cediendo el control cuando están inactivas) en lugar de bloquearse entre sí.
  • Ejemplo:

    async def leer_sensor():
        while True:
            datos = sensor.read()
            # ... procesar datos ...
            await asyncio.sleep(0.1)  # Ceder control a otras tareas
    
    async def actualizar_pantalla():
        while True:
            pantalla.mostrar(estado)
            await asyncio.sleep(1)

2. Retrasos no bloqueantes

  • Escenario: Realizar acciones con intervalos distintos (ej.: parpadear un LED cada 500 ms mientras se registran datos cada 2 segundos).
  • ¿Por qué async?: time.sleep() bloquea todo el programa. async lo reemplaza con await asyncio.sleep(), liberando el microcontrolador para otras tareas durante las esperas.

3. Gestión de protocolos de comunicación

  • Escenario: Comunicación por UART, I2C o Wi-Fi mientras se ejecuta otro código.
  • ¿Por qué async?: Las comunicaciones suelen requerir que se espere por las respuestas. async permite iniciar una solicitud, luego cambiar a otras tareas y finalmente reanudar la tarea previa al recibir datos.
  • Ejemplo:
    async def obtener_clima():
        while True:
            respuesta = await wifi.get('http://api.weather.com')
            # ... procesar respuesta ...

4. Tareas en segundo plano con recursos compartidos

  • Escenario: Registrar datos en una tarjeta SD mientras se controla un motor.
  • ¿Por qué async?: Usar “primitivas de sincronización”, por ejemplo Lock (de micropython-async) para compartir recursos de forma segura entre tareas.
  • Ejemplo:

    lock = asyncio.Lock()
    
    async def registrar_datos():
        async with lock:
            with open('log.txt', 'a') as f:
                f.write(datos)
    
    async def controlar_motor():
        async with lock:
            motor.ejecutar(velocidad)

Notas clave para async en MicroPython

  • Multitarea cooperativa: Las tareas deben usar await explícitamente para ceder el control (no hay multitarea preemptiva, es decir, no hay control central de tareas).
  • Ligero: Usa mucha menos memoria que los hilos, lo cual es crítico para microcontroladores.
  • Bucle de eventos: La librería asyncio gestiona la planificación de tareas (similar al bucle de eventos de JavaScript).

Para más detalles, consulta el tutorial de micropython-async.

Categorías
Sin categoría

Propuestas para un espacio de retroinformática como proyecto de patrimonio industrial

1. Documentación y Contextualización Histórica

Identificación de la evolución tecnológica de los dispositivos almacenados (ordenadores, videoconsolas, radiocassettes, televisores).

Relación de los dispositivos con cambios culturales y tecnológicos, destacando su impacto en la sociedad y en el entretenimiento.

Comparación entre generaciones de hardware, mostrando diferencias en diseño, componentes y funcionalidad.

2. Conservación y Restauración

Mantenimiento y reparación de dispositivos para que funcionen en su estado original.

Preservación de carcasas, circuitos y componentes electrónicos ante el deterioro por el tiempo y el almacenamiento.

Digitalización de software y archivos (ejemplo: ROMs de videojuegos, programas antiguos en disquetes o cassettes).

Estrategias de almacenamiento adecuadas para evitar humedad, polvo y corrosión en los dispositivos antiguos.

3. Exposición y Divulgación

Creación de una pequeña zona expositiva donde los visitantes puedan ver y conocer los dispositivos.

Exposición temática rotativa, enfocándose en la historia de marcas icónicas (Atari, Amstrad, Sony, Sega, Nintendo, etc.).

Presentación de modelos funcionales para que los visitantes puedan interactuar con ellos.

Recreación de espacios de uso originales, como un “rincón ochentero” con una TV CRT y una consola clásica conectada.

4. Interactividad y Educación

Talleres de desmontaje y reparación para enseñar cómo funcionan los dispositivos.

Charlas sobre la historia de la tecnología y su evolución en el mercado.

Experiencias prácticas donde los asistentes puedan probar sistemas antiguos (por ejemplo, escribir en un MS-DOS, programar en BASIC, jugar en un Amiga 500).

Creación de fichas técnicas para cada dispositivo, con información sobre su año de fabricación, características y curiosidades.

5. Relación con la Historia del Retro y la Comunidad

Vinculación con otros grupos retro y eventos (ferias, exposiciones, competiciones de juegos antiguos).

Rescate de tecnología obsoleta y su importancia en la informática y el entretenimiento moderno.

Colaboraciones con otros coleccionistas para intercambiar información y dispositivos.

Registro y catalogación de los dispositivos disponibles en el local, creando una base de datos accesible para la comunidad.