โลกของระบบฝังตัวมักต้องการส่วนติดต่อผู้ใช้แบบกราฟิกที่สามารถทำงานบนอุปกรณ์ที่มีข้อจำกัดด้านทรัพยากรอย่างมาก LVGL (Light and Versatile Graphics Library) ได้กลายเป็นโซลูชันยอดนิยมสำหรับนักพัฒนาที่ทำงานกับไมโครคอนโทรลเลอร์และจอแสดงผลขนาดเล็ก โดยมอบวิธีการสร้างส่วนติดต่อผู้ใช้สมัยใหม่โดยไม่จำเป็นต้องใช้ GPU ที่ทรงพลังหรือระบบปฏิบัติการ
การเรนเดอร์ด้วยซอฟต์แวร์สำหรับอุปกรณ์ที่มีทรัพยากรจำกัด
LVGL ได้รับการออกแบบมาโดยเฉพาะสำหรับไมโครคอนโทรลเลอร์และอุปกรณ์พลังงานต่ำที่มีความต้องการหน่วยความจำน้อยที่สุด - ต้องการเพียง 32KB ของ RAM และ 128KB ของหน่วยความจำแฟลช บวกกับพื้นที่เพิ่มเติมสำหรับการเรนเดอร์และเฟรมบัฟเฟอร์ ทำให้เหมาะสำหรับอุปกรณ์เช่น ไมโครคอนโทรลเลอร์ ESP32 ที่เชื่อมต่อกับจอแสดงผลขนาดเล็กเช่น ILI9341 หรือ SSD1306 ต่างจากเฟรมเวิร์ก GUI บนเดสก์ท็อป LVGL ทำงานโดยตรงกับบัฟเฟอร์พิกเซล ช่วยให้สามารถทำงานบนระบบที่คุณเพียงแค่กำหนดสีพิกเซลหรือวาดรูปทรงพื้นฐาน
แอปพลิเคชันฝังตัวจะต้องการทำสิ่งอื่นในช่วงเวลา CPU ที่เหลือประมาณ 90% ในแต่ละวินาทีที่ไม่ได้ใช้ในการเรนเดอร์ GUI ด้วยซอฟต์แวร์
ผลการทดสอบประสิทธิภาพบนไมโครคอนโทรลเลอร์ยอดนิยมเช่น ESP32-S2 แสดงเวลาในการเรนเดอร์ระหว่าง 50-100 มิลลิวินาทีสำหรับการทำงานต่างๆ รวมถึงการหมุนบิตแมปหลายรายการ ระดับประสิทธิภาพนี้เพียงพอสำหรับแอปพลิเคชันฝังตัวส่วนใหญ่ซึ่งการอัปเดต UI อาจจำเป็นต้องเกิดขึ้นเพียง 1 เฟรมต่อวินาที โดย CPU ใช้เวลาส่วนใหญ่ไปกับงานอื่นๆ
ความต้องการของระบบ LVGL
- RAM: ขั้นต่ำ 32KB
- หน่วยความจำแฟลช: ขั้นต่ำ 128KB
- ต้องการพื้นที่เพิ่มเติมสำหรับบัฟเฟอร์การเรนเดอร์และเฟรมบัฟเฟอร์
- ใช้งานร่วมกับไมโครคอนโทรลเลอร์ได้ เช่น ESP32, STM32, Raspberry Pi Pico
ประเภทจอแสดงผลยอดนิยมที่ใช้กับ LVGL
- จอแสดงผล ILI9341
- จอแสดงผล SSD1306
- จอ OLED ขนาดเล็ก
- จอแสดงผล E-paper
ไลบรารีสำหรับอินเทอร์เฟซกราฟิกแบบฝังตัวทางเลือกอื่นๆ
- TouchGFX - คู่แข่งหลักของ LVGL
- Adafruit GFX - สำหรับจอแสดงผลขาวดำที่มีทรัพยากรจำกัดมาก
- Dear ImGui - สำหรับระบบที่มีการรองรับ GPU (กรณีการใช้งานที่แตกต่าง)
เครื่องมือพัฒนา LVGL
- SquareLine Studio - โปรแกรมแก้ไขส่วนติดต่อผู้ใช้เฉพาะสำหรับ LVGL
- GUI Guider (NXP) - โปรแกรมแก้ไขส่วนติดต่อผู้ใช้ทางเลือก
- EEZ Studio - ตัวเลือกโปรแกรมแก้ไขส่วนติดต่อผู้ใช้แบบโอเพนซอร์ส
การพัฒนาข้ามแพลตฟอร์มและเครื่องมือ
แม้จะมุ่งเป้าไปที่ระบบฝังตัวเป็นหลัก ความหลากหลายของ LVGL ช่วยให้นักพัฒนาสามารถสร้างประสบการณ์ผู้ใช้ที่สอดคล้องกันบนแพลตฟอร์มที่แตกต่างกัน ไลบรารีสามารถทำงานในเฟรมบัฟเฟอร์บน Linux หรือผ่านการจำลอง ช่วยให้สามารถใช้อินเทอร์เฟซเดียวกันได้ทั้งบนอุปกรณ์จริง (เช่น จอแสดงผลเทอร์โมสตัท) และเมื่อเข้าถึงจากระยะไกลผ่านอินเทอร์เฟซเว็บที่คอมไพล์ด้วย Emscripten
มีเครื่องมือหลายตัวที่ช่วยให้การพัฒนา UI ด้วย LVGL ง่ายขึ้น SquareLine Studio ทำหน้าที่เป็นตัวแก้ไขเฉพาะสำหรับอินเทอร์เฟซ LVGL แม้ว่านักพัฒนาบางคนจะระบุว่าพวกเขาชอบปลั๊กอิน VSCode มากกว่าแอปพลิเคชันแบบสแตนด์อโลน ทางเลือกอื่นๆ ที่ชุมชนกล่าวถึงได้แก่ GUI Guider จาก NXP และ EEZ Studio โอเพนซอร์ส ซึ่งผู้ใช้บางคนพบว่าใช้งานง่ายกว่า
การผสานรวม MicroPython และไลบรารีทางเลือก
LVGL รองรับ MicroPython แม้ว่าสมาชิกในชุมชนจะแนะนำไม่ให้ใช้พอร์ตทางการ แทนที่จะเป็นเช่นนั้น พวกเขาแนะนำการใช้งานทางเลือกที่ github.com/lvgl-micropython/lvgl_micropython เพื่อการทำงานที่ดีกว่า รวมถึงการรองรับฟอนต์ที่กำหนดเอง การผสานรวมนี้ช่วยให้นักพัฒนา Python สามารถใช้ประโยชน์จากความสามารถของ LVGL โดยไม่ต้องเขียนโค้ด C
เมื่อพิจารณาทางเลือกในพื้นที่ GUI แบบฝังตัว TouchGFX ดูเหมือนจะเป็นคู่แข่งหลักของ LVGL สำหรับจอแสดงผลขาวดำที่มีทรัพยากรจำกัดอย่างมาก ตัวเลือกเช่น Adafruit GFX library อาจเหมาะสมกว่า ควรทราบว่า LVGL อยู่ในกลุ่มที่แตกต่างจากไลบรารี GUI แบบ immediate-mode เช่น Dear ImGui ซึ่งได้รับการออกแบบมาสำหรับระบบที่มี GPU ที่รองรับ 3D มากกว่าไมโครคอนโทรลเลอร์
การเร่งความเร็วด้วยฮาร์ดแวร์และการพัฒนาในอนาคต
แม้ว่า LVGL จะใช้การเรนเดอร์ด้วยซอฟต์แวร์เป็นหลัก แต่ก็สามารถใช้ประโยชน์จากการเร่งความเร็วด้วยฮาร์ดแวร์เฉพาะทางบนแพลตฟอร์มบางแพลตฟอร์ม ไมโครคอนโทรลเลอร์บางตัวมีเอนจิ้น Blitter หรือตัวประมวลผลพิกเซลเฉพาะทาง (เช่น Pixel Pipeline-Processor ของ NXP) ที่สามารถจัดการกับการทำงานต่างๆ เช่น การปรับขนาด การหมุน การผสมอัลฟา และการคัดลอกพิกเซล เอกสารของ LVGL กล่าวถึงหน่วยวาดต่างๆ รวมถึงการรองรับ GPU การผสานรวม SDL (ซึ่งสามารถใช้ OpenGL) และงานที่กำลังดำเนินอยู่สำหรับการรองรับ OpenGL ES โดยตรง
ไลบรารียังคงพัฒนาอย่างต่อเนื่องด้วยการพัฒนาที่แข็งขันและการสนับสนุนจากชุมชนที่เข้มแข็ง เอกสารที่ครอบคลุม ตัวอย่าง และ API ที่ตรงไปตรงมาทำให้เป็นที่ชื่นชอบในหมู่นักพัฒนาที่ทำงานกับระบบฝังตัวซึ่งต้องการสร้างส่วนติดต่อผู้ใช้ที่ใช้งานง่ายโดยไม่มีภาระของเฟรมเวิร์กกราฟิกที่ซับซ้อนกว่า
สำหรับนักพัฒนาที่ต้องการเริ่มต้นใช้งาน LVGL ไลบรารีนี้มีเอกสารและตัวอย่างที่ครอบคลุม รวมถึงตัวอย่างโค้ดทั้งใน C และ MicroPython ชุมชนรอบ LVGL มีความกระตือรือร้นและให้การสนับสนุน โดยมีฟอรั่มสำหรับการแก้ไขปัญหาและการแบ่งปันความรู้