KryonOS es un sistema operativo liviano que corre JavaScript y convierte una placa de desarrollo ESP32 compatible, con pantalla táctil, en un computador autónomo con interfaz gráfica, lanzador de aplicaciones y almacenamiento de archivos. Entrega el entorno de software básico para usar la placa sin escribir ni grabar un firmware distinto para cada aplicación.

A diferencia del firmware tradicional del ESP32, KryonOS mantiene las aplicaciones separadas del sistema y las ejecuta con su intérprete de JavaScript integrado. También trae una tienda de aplicaciones (App Store) desde la que se descargan e instalan programas y actualizaciones por WiFi, sin volver a grabar el dispositivo.

¿Qué trae KryonOS?

Las características principales del sistema son estas:

  • Microcontroladores compatibles. ESP32 (WROOM-32), ESP32-S2, ESP32-S3 y ESP32-C3.
  • Almacenamiento. Soporte para tarjeta microSD por el bus HSPI.
  • Pantalla. Controlador de pantalla ILI9341 con controlador táctil resistivo XPT2046, conectados por VSPI. Hay soporte experimental para otros controladores de pantalla, por ejemplo el ST7789V2.
  • Motor de JavaScript. Duktape 2.x, compatible con ES5 y ES5.1.
  • Motor gráfico. Dibujo directo a la pantalla en RGB565 de 16 bits, con doble búfer por hardware (Mini-Sprites) para eliminar el parpadeo.
  • API del sistema. Una colección amplia de enlaces de C++ a JavaScript para GPIO, ADC, PWM, lectura del panel táctil, un sistema de archivos unificado (/local/ y /sd/) y retardos de menos de un milisegundo.

Dicho en simple, el ESP32 se graba una sola vez. Desde ahí, el hardware físico (sensores, motores, pantallas) se controla escribiendo archivos de texto en JavaScript, sin volver a tocar C++ ni el IDE de Arduino.

¿Cómo se escribe una aplicación?

Las aplicaciones de KryonOS son sencillas de escribir porque se programan en JavaScript y corren sobre el motor Duktape 2.x. El intérprete soporta ECMAScript 5.1 y algunas funciones de ES6, pero no admite funciones flecha, let ni const, ni clases de ES6. Cada aplicación dispone de unos 90 KB de RAM utilizable, así que hay que cuidar el consumo de memoria. KryonOS también libera memoria (recolección de basura) cada vez que se llama a System.delay(ms), lo que reduce la fragmentación en aplicaciones que corren durante mucho tiempo.

Este es el ejemplo de "Hola mundo" en JavaScript:

JavaScript
// Limpia la pantalla
Graphics.fillScreen(Graphics.COLOR_BLUE);

// Dibuja un texto al centro
Graphics.setTextColor(Graphics.COLOR_WHITE);
Graphics.drawString("Hello KryonOS!", 120, 160, 2);

// Espera 3 segundos
System.delay(3000);

// Cierra la aplicación y vuelve al lanzador del sistema
System.exit();

Para armar una aplicación se crea una carpeta con dos archivos. Uno es app.json, con los metadatos (el nombre del paquete, la versión y la URL de actualización OTA), y el otro es main.js, con la lógica de la aplicación. El sistema esconde la configuración compleja de C++ y permite dibujar figuras, leer la tarjeta SD o cambiar el estado de un pin con comandos simples de JavaScript.

¿En qué placas funciona?

El sistema usa el mismo cableado de pantalla y panel táctil que el ESP32 Marauder v4, v6 y v6.1, así que corre en esos dispositivos sin cambiar las conexiones de fábrica. El proyecto también tiene soporte experimental para varios equipos basados en ESP32, entre ellos la placa conocida como Cheap Yellow Display (CYD), el M5Stack Cardputer y la LilyGO T-HMI.

Interfaz gráfica en JavaScript sobre el M5Stack Cardputer

KryonOS corriendo en el M5Stack Cardputer.

La diferencia con Espruino

CNX Software ya había escrito sobre Espruino, otra plataforma de JavaScript para microcontroladores. Espruino entrega un intérprete de JavaScript y no un sistema operativo completo. Se ha usado en el ESP32 y en la placa Pixl.js del propio proyecto, donde JavaScript controla GPIO, pantallas, Bluetooth LE, NFC y otros periféricos. También sirve para juegos, relojes, estaciones meteorológicas y proyectos con shields de Arduino.

KryonOS, en cambio, junta en un solo sistema operativo para placas ESP32 una interfaz de tipo escritorio, un explorador de archivos y una tienda de aplicaciones en JavaScript.

Cómo instalarlo

Quien tenga una placa ESP32 compatible, una pantalla ILI9341 y un módulo de tarjeta SD puede grabar KryonOS hoy mismo. Hay archivos .bin precompilados que se graban directo con esptool.py, y el sistema también se puede compilar desde el código fuente con PlatformIO. El código, la guía de desarrollo de aplicaciones y la documentación completa de la API de JavaScript están en el repositorio del proyecto en GitHub.

El proyecto llegó a CNX Software a través de Hackaday.