KryonOS trasforma l’ESP32 in un mini computer con app JavaScript

KryonOS è un sistema operativo open source per il microcontrollore ESP32. Trasforma una scheda con display touch e modulo SD in un piccolo computer autonomo, con launcher di applicazioni, file manager e App Store. Il firmware si flasha una volta sola: da quel momento le app si scrivono in JavaScript e si installano via Wi-Fi, senza più toccare C++ né l’Arduino IDE. Dietro il progetto c’è Haris16-code, che lo distribuisce con licenza GNU General Public License v3.0.

Il cuore software è Duktape 2.x, un motore JavaScript conforme a ES5/ES5.1. Mancano quindi le arrow function, let/const e le classi ES6, ma alcune funzionalità ES6 sono comunque presenti. Ogni applicazione ha a disposizione circa 90 KB di RAM utilizzabile, e la garbage collection scatta quando il codice chiama System.delay(ms).

Un’applicazione KryonOS è una cartella con due file. Il primo è app.json, che contiene i metadati: nome del pacchetto, versione e URL di aggiornamento OTA. Il secondo è main.js, dove sta la logica vera e propria. L’App Store integrato scarica e installa questi pacchetti via Wi-Fi, quindi chi sviluppa non ha bisogno di un cavo né di un computer collegato alla scheda.

Display, touch e SD su due bus SPI separati

La scheda di riferimento usa un display ILI9341 da 2.8 pollici con touch resistivo XPT2046. Il rendering è a 16 bit RGB565, con double-buffering hardware chiamato Mini-Sprites: serve a eliminare lo sfarfallio nelle scene 3D. Il pin CS del display va a D17, il RESET a D5, il DC a D16, il MOSI a D23, il clock a D18, il LED a D32 e il MISO a D19. L’alimentazione del display è a 3,3 V.

Il touch condivide clock, MOSI e MISO con il display, mentre il suo T_CS sta su D21 e il T_IRQ non è connesso. KryonOS separa i bus: il VSPI è dedicato esclusivamente a display TFT e controller touch, l’HSPI esclusivamente al modulo SD Card. Quest’ultimo usa MOSI su GPIO 13, MISO su GPIO 26, clock su GPIO 14 e CS su GPIO 15.

Schermo del M5Stack CardPuter con l'interfaccia grafica di KryonOS
KryonOS in esecuzione su M5Stack CardPuter

Per chi vuole rifare il progetto, i componenti sono pochi e tutti comuni. Serve una scheda ESP32, un display TFT con touch resistivo e slot SD integrato, e volendo un lettore di schede microSD con interfaccia SPI separato.

Le API hardware e il flash dei binari

KryonOS espone alle app JavaScript un set di API per l’hardware. Ci sono chiamate per GPIO, ADC, PWM e polling del touch, un file system unificato che vede sia /local/ sia /sd/, e un delay con risoluzione sotto il millisecondo. Quindi un’app può leggere un sensore, pilotare un’uscita o salvare un file sulla SD senza scrivere una riga di C++.

  • GPIO, ADC e PWM gestiti direttamente da JavaScript
  • Polling del touch resistivo XPT2046
  • File system unificato con percorsi /local/ e /sd/
  • Delay con risoluzione sotto il millisecondo
  • App Store integrato per installare pacchetti JS via Wi-Fi
  • File explorer e text editor con storage su SD Card

Chi vuole compilare da sorgente usa PlatformIO. Chi preferisce i binari precompilati ha due strade: esptool.py oppure ESP Flash Download Tool. Nel primo caso la velocità di trasmissione dell’esempio è 921600 baud, con il bootloader all’indirizzo 0x1000, le partizioni a 0x8000 e il firmware a 0x10000.

Il codice e i file del progetto stanno nel repository di Haris16-code, dove si trovano firmware, sorgenti e pacchetti delle applicazioni. Inoltre il sistema gira anche su M5Stack Cardputer, quindi chi possiede quella scheda può provarlo senza montare nulla.

Il limite principale è il motore JavaScript: chi è abituato a ES6 moderno deve adattarsi a ES5. Tuttavia i circa 90 KB di RAM per app bastano per interfacce, giochi semplici e piccoli strumenti di misura. Infine, la separazione dei bus SPI evita conflitti tra display e SD, un dettaglio che spesso fa perdere ore a chi monta questi moduli su breadboard.


Fonte: https://github.com/Haris16-code/KryonOS

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

Menu