BTC$29880

ETH$3666

Шукати

KryonOS перетворює ESP32 на мінікомп’ютери з підтримкою JavaScript

KryonOS — невелика операційна система на JavaScript для сумісних плат ESP32 із сенсорним екраном. Вона додає графічний інтерфейс, запуск програм і файлове сховище, тож платою можна користуватися без окремої прошивки для кожного застосунку.

На відміну від традиційної прошивки ESP32, система відокремлює застосунки від основної частини ОС і запускає їх у вбудованому середовищі JavaScript. У KryonOS також є магазин застосунків: програми й оновлення можна завантажувати через Wi-Fi, не перепрошиваючи пристрій.

KryonOS running on two ESP32 based devices
Джерело: CNX Software

Основні характеристики KryonOS:

  • Підтримувані мікроконтролери: ESP32 (WROOM-32), ESP32-S2, ESP32-S3 та ESP32-C3.
  • Сховище: підтримка карт MicroSD через шину HSPI.
  • Дисплей: контролер ILI9341 і резистивний сенсорний контролер XPT2046, під’єднані через VSPI.
  • Експериментальна підтримка деяких інших контролерів дисплеїв, зокрема ST7789V2.
  • Рушій JavaScript: Duktape 2.x із підтримкою стандарту ES5/ES5.1.
  • Графічний рушій: пряме виведення зображення на дисплей у форматі RGB565 із глибиною 16 біт і апаратною подвійною буферизацією Mini-Sprites, що має усувати мерехтіння екрана під час 3D-візуалізації.
  • Системні API: C++-прив’язки до JavaScript для керування GPIO, АЦП, ШІМ, опитування сенсорного екрана, єдиної файлової системи (/local/ і /sd/) та затримок менш як мілісекунда.

Плату потрібно прошити лише один раз. Після цього датчиками, двигунами, екранами та іншою периферією можна керувати за допомогою JavaScript-файлів — без роботи з C++ чи Arduino IDE.

Застосунки працюють на рушії 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++: JavaScript-командами можна малювати фігури, читати дані з SD-картки чи перемикати апаратні контакти.

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

JavaScript GUI M5Stack CardPuter
KryonOS на M5Stack CardPuter. Джерело: CNX Software

Раніше для мікроконтролерів створили Espruino — платформу з інтерпретатором JavaScript, але не окрему операційну систему. Її використовують, зокрема, на ESP32 та платі Espruino Pixl.js: JavaScript дає змогу керувати GPIO, дисплеями, Bluetooth LE, NFC та іншою периферією. На платформі також створюють ігри, годинники, метеостанції та проєкти з Arduino Shields. Натомість KryonOS об’єднує в одній системі інтерфейс у стилі настільної ОС, файловий менеджер і магазин застосунків на JavaScript.

KryonOS можна встановити на сумісну плату ESP32 з екраном ILI9341 і модулем SD-картки. Готові файли .bin можна прошити за допомогою esptool.py або зібрати ОС із вихідного коду в PlatformIO. Вихідний код, посібник зі створення застосунків і повна документація JavaScript API доступні в репозиторії KryonOS на GitHub.

Нагадаємо, компанія 8devices представила тепловізійну камеру 8Sight T100 для безпілотних авіаційних систем, робототехніки та промислового застосування.