KryonOS เปลี่ยนบอร์ด ESP32 ให้กลายเป็นมินิคอมพิวเตอร์ที่ใช้ JavaScript

KryonOS ระบบปฏิบัติการขนาดเล็กที่ใช้ JavaScript เป็นหลัก ซึ่งเปลี่ยนบอร์ดพัฒนา ESP32 ที่รองรับและมีหน้าจอสัมผัส ให้กลายเป็นคอมพิวเตอร์แบบ Standalone ที่มีส่วนติดต่อผู้ใช้แบบกราฟิก (GUI), ตัวเปิดแอปพลิเคชัน และระบบจัดเก็บไฟล์ในตัว โดยมีสภาพแวดล้อมซอฟต์แวร์พื้นฐานที่ช่วยให้สามารถใช้งานบอร์ดได้โดยไม่จำเป็นต้องเขียนและแฟลชเฟิร์มแวร์ใหม่สำหรับแต่ละแอปพลิเคชัน

แตกต่างจากเฟิร์มแวร์ ESP32 แบบดั้งเดิม KryonOS แยกแอปพลิเคชันออกจากระบบหลัก และเรียกใช้งานผ่าน JavaScript Runtime ที่มีมาให้ในตัว นอกจากนี้ยังมี App Store ที่ช่วยให้ผู้ใช้ดาวน์โหลดและติดตั้งแอปพลิเคชัน รวมถึงอัปเดตต่าง ๆ ผ่าน Wi-Fi ได้โดยไม่ต้องแฟลชเฟิร์มแวร์ลงอุปกรณ์ใหม่

KryonOS รันบนอุปกรณ์ที่ใช้ ESP32 สองเครื่อง

คุณสมบัติเด่นของ KryonOS:

  • MCU ที่รองรับ – ESP32 (WROOM-32), ESP32-S2, ESP32-S3 และ ESP32-C3
  • ที่จัดเก็บข้อมูล – รองรับ MicroSD Card ผ่านบัส HSPI
  • จอแสดงผล
    • คอนโทรลเลอร์จอ ILI9341 พร้อมคอนโทรลเลอร์ทัชแบบResistive XPT2046 ซึ่งเชื่อมต่อผ่าน VSPI
    • รองรับคอนโทรลเลอร์จอรุ่นอื่นในระดับทดลอง เช่น ST7789V2
  • JavaScript Engine – Duktape 2.x ซึ่งรองรับมาตรฐาน ES5/ES5.1
  • Graphics Engine – การเรนเดอร์แบบ Direct-to-glass ด้วยสี 16-bit RGB565 และใช้ Hardware Double Buffering (Mini-Sprites) เพื่อลดหรือกำจัดอาการหน้าจอกระพริบจากการเรนเดอร์
  • System APIs – มี C++ Binding สำหรับ JavaScript อย่างหลากหลาย เพื่อควบคุม GPIO, ADC, PWM, การอ่านค่าทัช, ระบบไฟล์แบบรวม (/local/ และ /sd/) และการหน่วงเวลาที่ละเอียดต่ำกว่ามิลลิวินาที

พูดง่าย ๆ คือคุณแฟลช KryonOS ลง ESP32 เพียงครั้งเดียว จากนั้นสามารถควบคุมฮาร์ดแวร์จริง เช่น เซนเซอร์ มอเตอร์ และหน้าจอ ผ่านไฟล์ JavaScript ได้ทั้งหมด โดยไม่จำเป็นต้องกลับไปเขียน C++ หรือใช้ Arduino IDE อีก

แอปพลิเคชันของ KryonOS เขียนได้ค่อนข้างง่าย เพราะใช้ JavaScript และทำงานบน Duktape 2.x Runtime รองรับ ECMAScript 5.1 รวมถึงฟีเจอร์ ES6 บางส่วน แต่ ไม่รองรับ Arrow Functions, let/const หรือ ES6 Classes แต่ละแอปมี RAM ให้ใช้งานประมาณ 90 KB ดังนั้นจึงต้องระมัดระวังเรื่องการใช้หน่วยความจำ, KryonOS ยังทำ Garbage Collection เมื่อมีการเรียก System.delay(ms) ซึ่งช่วยลดปัญหา Memory Fragmentation ในแอปพลิเคชันที่ทำงานต่อเนื่องเป็นเวลานาน

ตัวอย่างโค้ด JavaScript สำหรับ Hello world:


ในการสร้างแอป ให้สร้างโฟลเดอร์ที่ประกอบด้วยไฟล์ app.json สำหรับเก็บข้อมูล Metadata เช่น ชื่อ Package, เวอร์ชัน และ URL สำหรับ OTA Update รวมถึงไฟล์ main.js ซึ่งเป็นโค้ดหลักของแอป ระบบปฏิบัติการจะจัดการส่วนที่ซับซ้อนของ C++ ให้ทั้งหมด ทำให้นักพัฒนาสามารถวาดรูป อ่านข้อมูลจาก SD Card หรือสั่งเปิด/ปิด GPIO ด้วยคำสั่ง JavaScript ที่เรียบง่าย

ระบบปฏิบัติการนี้ใช้ขา (Pinout) ของหน้าจอและทัชแบบเดียวกับ ESP32 Marauder v4, v6 และ v6.1 ดังนั้นจึงสามารถใช้งานกับอุปกรณ์เหล่านี้ได้โดยไม่ต้องเปลี่ยนการเดินสายเริ่มต้น โครงการยังมีการรองรับอุปกรณ์ ESP32 อีกหลายรุ่นในระดับทดลอง เช่น Cheap Yellow Display (CYD), M5Stack Cardputer และ LilyGO T-HMI

GUI ที่เขียนด้วย JavaScript บน M5Stack CardPuter
KryonOS บน M5Stack CardPuter

ก่อนหน้านี้เราเคยเขียนบทความเกี่ยวกับโครงการ Espruino ซึ่งเป็นแพลตฟอร์ม JavaScript สำหรับไมโครคอนโทรลเลอร์เช่นกัน โดยทำหน้าที่เป็น JavaScript Interpreter แทนที่จะเป็นระบบปฏิบัติการแบบ Standalone โดย Espruino สามารถทำงานบนแพลตฟอร์มอย่าง ESP32 และบอร์ด Pixl.js ของ Espruino เอง โดยสามารถใช้ JavaScript เพื่อควบคุม GPIO, หน้าจอ, Bluetooth LE, NFC และอุปกรณ์ต่อพ่วงอื่น ๆ ได้ นอกจากนี้ยังสามารถนำไปสร้างเกม นาฬิกา สถานีตรวจวัดสภาพอากาศ รวมถึงโปรเจกต์ที่ใช้ Arduino Shield ได้ ในทางตรงกันข้าม KryonOS รวมระบบอินเทอร์เฟซแบบ Desktop, File Explorer และ JavaScript App Store เข้าไว้ด้วยกันในระบบปฏิบัติการเดียวสำหรับบอร์ด ESP32

ถ้าคุณมีบอร์ด ESP32 ที่รองรับ พร้อมหน้าจอ ILI9341 และโมดูล SD Card ก็สามารถทดลองติดตั้ง KryonOS ได้ทันที มีไฟล์ .bin ที่คอมไพล์ไว้ล่วงหน้าแล้ว สามารถแฟลชลงอุปกรณ์โดยตรงด้วย esptool.py หรือหากต้องการก็สามารถ Build ระบบปฏิบัติการจาก Source Code ด้วย PlatformIO ได้, สามารถดู Source Code, คู่มือการพัฒนาแอป และเอกสาร JavaScript API ฉบับเต็ม ได้จาก GitHub Repository ของโปรเจกต์

แปลจากบทความ : KryonOS turns ESP32 boards into JavaScript-powered mini computer

Subscribe
Notify of
guest
0 Comments
Oldest
Newest Most Voted
โฆษณา