Una scheda ESP32-S3 con 16 MB di flash può eseguire OreoOS, un sistema operativo in MicroPython progettato per una badge da conferenza con schermo a colori, giochi, lettore di documenti e connessione WiFi. Il progetto open source, pubblicato su GitHub da Elixpo, include il firmware e le applicazioni, oltre a un progetto hardware di riferimento e strumenti per installare software dal computer.
La badge Oreo non è pensata come una scheda di sviluppo generica a cui aggiungere un’interfaccia in un secondo momento. Il suo sistema integra un launcher, un app store sul dispositivo, controlli fisici, trasferimento wireless di file e aggiornamenti OTA. Include anche RV565, una pipeline video che sfrutta il DMA sul display; un lavoro pubblicato su arXiv descrive la riproduzione a 24 fotogrammi al secondo su un ESP32-S3.
Una badge aperta, non solo un’etichetta da conferenza
Il repository GitHub presenta Oreo come una badge indossabile a tema panda che esegue un sistema operativo. La proposta combina una scheda hardware e un ambiente software realizzati intorno a MicroPython, con applicazioni modificabili o ampliabili. Lo schermo è un pannello IPS da 2 pollici, con risoluzione di 320 × 240 pixel e colori RGB565. Il repository indica una frequenza di 33 FPS per l’interfaccia.
La scheda tecnica del progetto identifica il modulo come ESP32-S3-DevKitC-1-N16R8: dispone di 16 MB di flash e 8 MB di PSRAM, connettività WiFi 802.11 b/g/n e Bluetooth Low Energy 5.0. La scheda di riferimento aggiunge un sensore di movimento MPU-6050 a sei gradi di libertà, un ricevitore a infrarossi TSOP38238, otto pulsanti, quattro LED agli angoli e un LED di stato WS2812. L’alimentazione è progettata per una batteria 18650 e la ricarica USB-C.
Il documento tecnico descrive un progetto di riferimento su breadboard, non una specifica di un prodotto commerciale finito. La sua versione è la revisione A, datata 15 maggio 2026, ed è indicata come compatibile con OreoOS v1.3 o successive.
Lo schermo usa un controller ST7789 e una connessione SPI a quattro fili a 40 MHz. Il documento stima in 153.600 byte la dimensione di un framebuffer RGB565 completo e in circa 30,7 ms il tempo di trasferimento di un fotogramma. La retroilluminazione è regolata tramite PWM. Si tratta di dati del progetto di riferimento: il repository indica anche che la badge può mostrare un’interfaccia a 33 FPS.
Applicazioni MicroPython e app store locale
Le applicazioni sono classi Python basate sull’SDK di OreoOS. Secondo la documentazione del repository, ciascuna implementa tre metodi del ciclo di vita ed è organizzata nella propria cartella all’interno di apps/. I modelli del progetto fungono da punto di partenza; la distribuzione copia le applicazioni sulla scheda e le relative icone appaiono nel launcher.
Il catalogo distingue le applicazioni incluse dagli extra opzionali. Quelle che si trovano in apps_market/ non appaiono nel cassetto del launcher finché l’utente non le installa dal riquadro App Market. Il catalogo iniziale descritto su GitHub contiene Color Picker ed Elixpo Pet; un’app installata può essere disinstallata dallo stesso punto e aggiunta di nuovo senza scaricarla un’altra volta. Gli sviluppatori possono contribuire con una cartella contenente main.py, manifest.json, __init__.py e risorse.
L’elenco del repository include utilità per consultare informazioni sulla badge e i commit di GitHub, un’app meteo, una galleria, un lettore Markdown, giochi, impostazioni, archiviazione, missioni a infrarossi e Doom. OreoOS raggruppa WiFi e Bluetooth nelle Impostazioni invece di assegnare loro icone proprie nel cassetto. Offre anche un pannello delle notifiche che si apre con il pulsante C: da lì si accede alle radio, alla luminosità, alla sincronizzazione dell’ora e agli avvisi di trasferimento o aggiornamento.
Il numero di applicazioni varia tra le pagine dello stesso progetto. Il README di GitHub parla di 14 applicazioni predefinite; la scheda tecnica ne conta 13 e il sito di OreoOS annuncia 20 applicazioni proprietarie. Il sito elenca, tra le altre, Badge, Flappy Oreo, Gallery, Snake, IR Quest e Reader, e afferma che l’app store del dispositivo scarica le applicazioni da GitHub durante l’esecuzione.
L’SDK include funzioni per disegnare forme e testo, mostrare sprite, caricare font, salvare dati nella cache, sincronizzare l’orologio e consultare lo spazio occupato. Il lettore apre file Markdown e di testo copiati nella cartella dei documenti o inclusi nell’applicazione. Il repository indica che rileva i nuovi file nel selettore tramite controlli ogni 200 ms, senza riavviare il sistema.
WiFi, file e aggiornamenti
OreoOS utilizza lo stack di rete standard di MicroPython, con wrapper personalizzati per gestire la configurazione e limitare i consumi. GitHub documenta il WiFi con una potenza massima di trasmissione di 11 dBm e una modalità di risparmio energetico. La badge può consultare il meteo, ottenere informazioni da GitHub e cercare aggiornamenti. Una sezione del repository descrive anche i trasferimenti Bluetooth: la scheda si annuncia come Oreo e offre un servizio GATT per ricevere un’immagine fino a 250 KB o un documento di testo compresso.
Il trasferimento wireless è descritto in modo diverso sul sito di OreoOS. Qui viene presentato come una funzione basata su WiFi, con approvazione sulla badge, un codice a sei cifre, uno scambio di segnali e la conversione delle immagini in RGB565 nel browser. La stessa pagina indica che il Bluetooth tornerà per funzioni di prossimità, come le missioni a infrarossi e i gesti tra badge. Le pagine del progetto, quindi, non presentano una descrizione uniforme delle funzioni wireless disponibili.
Il sistema integra aggiornamenti OTA che consultano GitHub Releases. Secondo il README, le patch fino a 80 KB vengono installate automaticamente; per gli aggiornamenti più grandi è necessaria la conferma dell’utente. I file vengono convalidati con SHA-256 e sostituiti atomicamente al successivo avvio. La documentazione tecnica stima il modulo di aggiornamento in circa 350 righe di codice, all’interno di un sistema che conta meno di 10.000 righe di Python.
Per iniziare, GitHub indica che gli strumenti per computer richiedono Python 3.9 o successivo e funzionano su Linux, macOS o Windows tramite WSL. Il firmware della badge usa MicroPython 1.28. La procedura indicata clona il repository, installa le dipendenze di OreoOS ed esegue tools/deploy.py con la porta della scheda. È anche possibile eseguire test unitari senza hardware: coprono le funzioni ausiliarie per il colore e la lettura della configurazione, ma non eseguono le applicazioni. Il repository precisa che non è ancora disponibile un simulatore desktop.
RV565 e la riproduzione video
La riproduzione video è una delle funzioni che contraddistingue la proposta. Il sito di OreoOS annuncia video nativo a 24 FPS, mentre il lavoro su RV565 spiega come sono organizzate la decodifica e il trasferimento allo schermo per raggiungere tale frequenza su un ESP32-S3. L’articolo accademico, intitolato «RV565: Cross-Layer Co-Design for Frame-Independent Video Playback on MicroPython-Class ESP32-S3 Systems», esamina due clip di dieci secondi tratte da un film con licenza aperta.
Il lavoro confronta un percorso seriale — decomprimere e poi ridimensionare ogni fotogramma in blocchi di memoria interna mentre si trasferisce l’immagine tramite DMA — con una pipeline a doppio core. Il primo rispetta la scadenza di 41,7 ms nella finestra più leggera, ma perde tutti i 7.200 fotogrammi in quella più impegnativa. RV565 decomprime il fotogramma successivo sul secondo core durante il trasferimento di quello corrente e, secondo gli autori, mantiene 24 FPS senza fotogrammi persi in entrambe le finestre, con un margine di 10,3 ms.
Il documento aggiunge che il tempo per fotogramma è limitato dal trasferimento allo schermo, che raggiunge il 98,1% del limite teorico della connessione a 40 MHz. Valuta anche la decompressione eseguita nel firmware all’interno di OreoOS: in questa configurazione raggiunge 12,2 FPS. L’analisi attribuisce il tempo di 80,4 ms per fotogramma alla lettura seriale del file system, alla collocazione dei dati nella memoria esterna e alla visualizzazione bloccante; il costo dell’interprete è di 0,8 ms.
L’articolo sostiene inoltre che la decompressione di fotogrammi indipendenti cresce linearmente con la lunghezza compressa del contenitore. Nelle misurazioni, un modello adattato a una finestra prevede l’altra con una differenza inferiore a 0,04 ms. Il lavoro confronta anche la compressione Deflate di fotogrammi RGB565 con una tecnica basata sulle differenze XOR: il flusso Deflate condiviso modifica appena la dimensione, al massimo dell’1,1%, mentre le differenze XOR farebbero risparmiare dal 46% all’80%.
Consumi, limiti e prossimi passi
La scheda tecnica calcola un consumo tipico di 95 mA con lo schermo acceso e il WiFi connesso in standby; durante la trasmissione WiFi al limite di 11 dBm, il picco raggiunge 130 mA. Con il Bluetooth in trasmissione a intervalli di 500 ms, stima una media di 65 mA. In standby leggero, con schermo e WiFi spenti, indica 22 mA. La modalità deep sleep dell’ESP32-S3 consuma 25 µA, ma la scheda tecnica avverte che OreoOS non la utilizza ancora.
L’autonomia stimata per una cella 18650 da 3.000 mAh è di circa 14 ore con uso attivo e tre settimane in standby con la retroilluminazione spenta. Il documento segnala anche un requisito elettrico specifico: sono necessari 2.000 µF di capacità sulla linea a 3,3 V per assorbire i picchi di trasmissione WiFi quando l’alimentazione avviene tramite il regolatore AMS1117.
Tra le funzioni future, la scheda tecnica riserva alla revisione v2 due superfici touch TTP223. Il firmware v1 non le legge; il risveglio del sistema dipende dai pulsanti. Il sito del progetto indica come prossima la reintroduzione delle funzioni Bluetooth di prossimità. La pagina menziona gesti di sincronizzazione, avvisi tra badge e supporto alle missioni IR tra gli usi previsti, ma non fissa una data per il loro arrivo.
OreoOS combina quindi un sistema MicroPython modificabile con una scheda i cui dettagli elettrici e meccanici sono documentati. Il repository permette di provare le funzioni ausiliarie senza hardware, ma per eseguire le applicazioni serve una badge ESP32-S3; la scheda tecnica rimanda le superfici touch a una revisione successiva e la pagina del progetto lascia in sospeso le funzioni Bluetooth di prossimità.