OreoOS convierte una placa ESP32-S3 en una badge con apps y vídeo

OreoOS convierte una placa ESP32-S3 en una badge con apps y vídeo

Una placa ESP32-S3 con 16 MB de flash puede ejecutar OreoOS, un sistema operativo en MicroPython diseñado para una badge de conferencia con pantalla a color, juegos, lector de documentos y conexión WiFi. El proyecto abierto, publicado en GitHub por Elixpo, incluye el firmware y las aplicaciones, además de un diseño de hardware de referencia y herramientas para instalar software desde el ordenador.

La badge Oreo no se plantea como una placa de desarrollo genérica con una interfaz añadida después. Su sistema integra un lanzador, una tienda de aplicaciones en el dispositivo, controles físicos, transferencia inalámbrica de archivos y actualizaciones OTA. También incorpora RV565, una canalización de vídeo que aprovecha DMA en la pantalla; un trabajo publicado en arXiv describe su reproducción a 24 fotogramas por segundo en un ESP32-S3.

Una badge abierta, no solo una etiqueta de conferencia

El repositorio de GitHub presenta Oreo como una badge portátil con temática de panda que ejecuta un sistema operativo. La propuesta combina una placa de hardware y un entorno de software escritos alrededor de MicroPython, con aplicaciones que se pueden modificar o ampliar. La pantalla es un panel IPS de 2 pulgadas, con resolución de 320 × 240 píxeles y color RGB565. El repositorio cifra su frecuencia en 33 FPS para la interfaz.

La ficha técnica del proyecto identifica el módulo como un ESP32-S3-DevKitC-1-N16R8: dispone de 16 MB de flash y 8 MB de PSRAM, conectividad WiFi 802.11 b/g/n y Bluetooth Low Energy 5.0. La placa de referencia añade un sensor de movimiento MPU-6050 de seis grados de libertad, un receptor infrarrojo TSOP38238, ocho botones, cuatro LED en las esquinas y un LED de estado WS2812. La alimentación está pensada para una batería 18650 y carga por USB-C.

El documento técnico describe un diseño de referencia en protoboard, no una especificación de producto comercial terminado. Su versión es la revisión A, fechada el 15 de mayo de 2026, y se identifica como compatible con OreoOS v1.3 o posterior.

La pantalla usa un controlador ST7789 y una conexión SPI de cuatro hilos a 40 MHz. El documento estima en 153.600 bytes el tamaño de un framebuffer RGB565 completo y en unos 30,7 ms el tiempo de transferencia de un fotograma. La retroiluminación se regula por PWM. Son datos del diseño de referencia: el repositorio también señala que la badge puede mostrar una interfaz de 33 FPS.

Aplicaciones en MicroPython y tienda local

Las aplicaciones son clases Python construidas sobre el SDK de OreoOS. Según la documentación del repositorio, cada una implementa tres métodos de ciclo de vida y se organiza en su propia carpeta dentro de apps/. Las plantillas del proyecto sirven de punto de partida; el despliegue copia las aplicaciones a la placa y sus iconos aparecen en el lanzador.

El catálogo separa las aplicaciones incluidas de los extras opcionales. Las que viven en apps_market/ no aparecen en el cajón del lanzador hasta que el usuario las instala desde la baldosa App Market. El catálogo inicial que describe GitHub contiene Color Picker y Elixpo Pet; una app instalada puede desinstalarse desde el mismo lugar y volver a añadirse sin descargarla otra vez. Los desarrolladores pueden aportar una carpeta con main.py, manifest.json, __init__.py y recursos.

La lista del repositorio incluye utilidades para consultar información de la badge y commits de GitHub, una aplicación del tiempo, una galería, un lector Markdown, juegos, ajustes, almacenamiento, misiones por infrarrojos y Doom. OreoOS agrupa WiFi y Bluetooth dentro de Ajustes en vez de darles iconos propios en el cajón. También ofrece un panel de notificaciones que se abre con el botón C: desde allí se accede a las radios, al brillo, a la sincronización horaria y a avisos de transferencia o actualización.

Las cifras de aplicaciones varían entre las páginas del propio proyecto. El README de GitHub habla de 14 aplicaciones predeterminadas; la ficha técnica contabiliza 13 aplicaciones y el sitio de OreoOS anuncia 20 aplicaciones propias. El sitio enumera, entre otras, Badge, Flappy Oreo, Gallery, Snake, IR Quest y Reader, y afirma que la tienda del dispositivo obtiene aplicaciones de GitHub durante la ejecución.

El SDK incluye funciones para dibujar formas y texto, mostrar sprites, cargar fuentes, guardar datos en caché, sincronizar el reloj y consultar el espacio ocupado. El lector abre archivos Markdown y de texto que se hayan copiado a la carpeta de documentos o incluido en la aplicación. El repositorio indica que detecta nuevos archivos en el selector mediante consultas cada 200 ms, sin reiniciar el sistema.

WiFi, archivos y actualizaciones

OreoOS utiliza la pila de red estándar de MicroPython, con envoltorios propios para gestionar la configuración y limitar el consumo. GitHub documenta WiFi con una potencia máxima de transmisión de 11 dBm y un modo de ahorro energético. La badge puede consultar el tiempo, obtener información de GitHub y buscar actualizaciones. Una sección del repositorio describe también transferencias por Bluetooth: la placa se anuncia como Oreo y ofrece un servicio GATT para recibir una imagen de hasta 250 KB o un documento de texto comprimido.

La transferencia inalámbrica aparece descrita de otro modo en el sitio de OreoOS. Allí se presenta como una función basada en WiFi, con aprobación en la badge, un código de seis dígitos, un intercambio de señales y conversión de imágenes a RGB565 en el navegador. La misma página indica que Bluetooth volverá para funciones de proximidad, como las misiones por infrarrojos y los gestos entre badges. Por tanto, las páginas del proyecto no presentan una descripción uniforme de las funciones inalámbricas disponibles.

El sistema incorpora actualizaciones OTA que consultan GitHub Releases. Según el README, los parches de hasta 80 KB se instalan automáticamente; las actualizaciones mayores esperan la confirmación del usuario. Los archivos se validan con SHA-256 y se intercambian de forma atómica en el siguiente arranque. La documentación técnica cifra el módulo de actualización en unas 350 líneas de código, dentro de un sistema que estima en menos de 10.000 líneas de Python.

Para empezar, GitHub indica que las herramientas del ordenador requieren Python 3.9 o posterior y funcionan en Linux, macOS o Windows mediante WSL. El firmware de la badge utiliza MicroPython 1.28. El procedimiento indicado clona el repositorio, instala las dependencias de OreoOS y ejecuta tools/deploy.py con el puerto de la placa. También es posible lanzar pruebas unitarias sin hardware: cubren funciones auxiliares de color y lectura de configuración, pero no ejecutan las aplicaciones. El repositorio aclara que todavía no hay simulador de escritorio.

RV565 y la reproducción de vídeo

La reproducción de vídeo es una de las funciones que distingue la propuesta. El sitio de OreoOS anuncia vídeo nativo a 24 FPS, mientras que el trabajo sobre RV565 explica cómo se organiza la decodificación y la transferencia a la pantalla para alcanzar esa cifra en un ESP32-S3. El artículo académico, titulado «RV565: Cross-Layer Co-Design for Frame-Independent Video Playback on MicroPython-Class ESP32-S3 Systems», estudia dos fragmentos de diez segundos de una película con licencia abierta.

El trabajo compara una ruta serial —descomprimir y después escalar cada fotograma a franjas de memoria interna mientras se transfiere la imagen mediante DMA— con una canalización de doble núcleo. La primera cumple el plazo de 41,7 ms en la ventana más ligera, pero pierde los 7.200 fotogramas de la más exigente. RV565 descomprime el siguiente fotograma en el segundo núcleo durante la transferencia del actual y, según los autores, mantiene 24 FPS sin fotogramas perdidos en ambas ventanas, con 10,3 ms de margen.

El documento añade que el tiempo de fotograma queda limitado por la transferencia a la pantalla, que alcanza el 98,1 % del límite teórico de la conexión de 40 MHz. También evalúa la descompresión ejecutada en el firmware dentro de OreoOS: llega a 12,2 FPS en esa configuración. El análisis atribuye el tiempo de 80,4 ms por fotograma a la lectura serial del sistema de archivos, la ubicación de datos en memoria externa y una presentación bloqueante; el coste del intérprete es de 0,8 ms.

El artículo sostiene además que la descompresión de fotogramas independientes crece de forma lineal con la longitud comprimida del contenedor. En las mediciones, un modelo ajustado a una ventana predice la otra con una diferencia inferior a 0,04 ms. El trabajo compara también la compresión Deflate de fotogramas RGB565 con una técnica de diferencias XOR: el flujo Deflate compartido apenas cambia el tamaño en un máximo del 1,1 %, mientras que las diferencias XOR ahorrarían entre el 46 % y el 80 %.

Consumo, límites y próximos pasos

La ficha técnica calcula un consumo típico de 95 mA con pantalla encendida y WiFi conectado en reposo; durante transmisión WiFi con el límite de 11 dBm, el pico llega a 130 mA. Con Bluetooth anunciando a intervalos de 500 ms, estima 65 mA de media. En reposo ligero, con pantalla y WiFi apagados, da 22 mA. El modo de suspensión profunda del ESP32-S3 consume 25 µA, pero la ficha advierte que OreoOS todavía no lo utiliza.

La autonomía estimada para una celda 18650 de 3.000 mAh es de unas 14 horas con uso activo y tres semanas en reposo con la retroiluminación apagada. El documento también señala una exigencia eléctrica concreta: se necesitan 2.000 µF de capacidad en el raíl de 3,3 V para absorber los picos de transmisión WiFi cuando se alimenta mediante el regulador AMS1117.

Entre las funciones futuras, la ficha técnica reserva para una revisión v2 dos superficies táctiles TTP223. El firmware v1 no las lee; el despertar del sistema depende de los botones. El sitio del proyecto marca como próxima la recuperación de funciones Bluetooth de proximidad. La página menciona gestos de sincronización, avisos entre badges y apoyo a las misiones IR como usos previstos, pero no fija una fecha para su llegada.

OreoOS combina, por tanto, un sistema MicroPython modificable con una placa cuyos detalles eléctricos y mecánicos están documentados. El repositorio permite probar las funciones auxiliares sin hardware, pero para ejecutar las aplicaciones hace falta una badge ESP32-S3; la ficha técnica mantiene las superficies táctiles para una revisión posterior y la página del proyecto deja pendientes las funciones de proximidad Bluetooth.

Fuentes: GitHub, GitHub, arXiv, OreoOS