KryonOS — это компактная операционная система на JavaScript, которая превращает совместимую отладочную плату ESP32 с сенсорным экраном в самостоятельный мини-компьютер с собственным графическим интерфейсом, лаунчером приложений и файловым хранилищем. Она даёт базовое программное окружение, позволяющее пользоваться платой, не написав и не прошив отдельную прошивку под каждое приложение.

В отличие от традиционных прошивок для ESP32, KryonOS держит приложения отдельно от самой системы и запускает их через встроенную среду выполнения JavaScript. В систему также встроен магазин приложений, позволяющий скачивать и устанавливать программы и обновления по Wi-Fi — без повторной перепрошивки устройства.

Интерфейс операционной системы KryonOS на экране платы ESP32

реклама кормит Уточку 🦆

Ключевые особенности KryonOS:

  • Поддерживаемые микроконтроллеры — ESP32 (WROOM-32), ESP32-S2, ESP32-S3 и ESP32-C3
  • Хранилище — поддержка карт MicroSD через шину HSPI
  • Дисплей
    • Контроллер дисплея ILI9341 с резистивным сенсорным контроллером XPT2046, подключённым по шине VSPI
    • Экспериментальная поддержка некоторых других контроллеров, например ST7789V2
  • Движок JavaScript — Duktape 2.x (совместимость с ES5/ES5.1)
  • Графический движок — прямой вывод на экран (direct-to-glass) в 16-битном формате RGB565 с аппаратной двойной буферизацией (Mini-Sprites) для устранения мерцания
  • Системные API — обширные привязки C++ к JS для работы с GPIO, ADC, PWM, опроса сенсора, единой файловой системы (/local/ и /sd/) и задержек с точностью до долей миллисекунды

Проще говоря, вы прошиваете ESP32 один раз. После этого управлять физическим оборудованием (датчиками, моторами, экранами) можно целиком через текстовые файлы на JavaScript — больше не нужно возвращаться к C++ или Arduino IDE.

реклама кормит Уточку 🦆

Приложения для KryonOS писать несложно, ведь они создаются на JavaScript и работают на движке Duktape 2.x. Среда поддерживает ECMAScript 5.1 и часть возможностей ES6, но не поддерживает стрелочные функции, let/const и классы ES6. На каждое приложение приходится около 90 КБ доступной оперативной памяти, поэтому расходовать её нужно экономно. При вызове System.delay(ms) KryonOS выполняет сборку мусора, что помогает уменьшать фрагментацию памяти в долго работающих приложениях.

Пример кода «Hello world» на JavaScript:

// Очищаем экран
Graphics.fillScreen(Graphics.COLOR_BLUE);

// Выводим текст по центру
Graphics.setTextColor(Graphics.COLOR_WHITE);
Graphics.drawString("Hello KryonOS!", 120, 160, 2);

// Ждём 3 секунды
System.delay(3000);

// Закрываем приложение и возвращаемся в лаунчер ОС
System.exit();
реклама кормит Уточку 🦆

Чтобы собрать приложение, нужно создать папку с файлом app.json для метаданных (название пакета, версия, URL для OTA-обновлений) и файлом main.js с логикой программы. Система берёт на себя сложную настройку на C++, позволяя рисовать фигуры, читать данные с SD-карты или переключать аппаратные выводы простыми командами на JavaScript.

KryonOS использует ту же распиновку дисплея и сенсора, что и ESP32 Marauder версий v4, v6 и v6.1, поэтому запускается на этих устройствах без изменения стандартной разводки. У проекта также есть экспериментальная поддержка ряда устройств на базе ESP32, включая Cheap Yellow Display (CYD), M5Stack Cardputer и LilyGO T-HMI.

реклама кормит Уточку 🦆

KryonOS, запущенная на устройстве M5Stack CardputerKryonOS на M5Stack Cardputer

Ранее уже появлялась платформа Espruino — ещё одно решение на базе JavaScript для микроконтроллеров, которое предоставляет интерпретатор JavaScript, а не полноценную операционную систему. Её применяли на таких платформах, как ESP32 и собственная плата Espruino Pixl.js, где на JavaScript можно управлять GPIO, дисплеями, Bluetooth LE, NFC и другой периферией. Espruino поддерживает и приложения — игры, часы, метеостанции, проекты с платами расширения Arduino. В отличие от неё, KryonOS объединяет в одной ОС для плат ESP32 интерфейс в духе настольной системы, файловый менеджер и магазин приложений на JavaScript.

Если у вас уже есть совместимая плата ESP32, экран ILI9341 и модуль SD-карты, прошить KryonOS можно прямо сейчас. Готовые .bin-файлы прошиваются напрямую через esptool.py, либо систему можно собрать из исходников с помощью PlatformIO. Исходный код, руководство по разработке приложений и полная документация по JavaScript-API доступны в репозитории проекта на GitHub.