LVGL: Thư viện đồ họa nhẹ hỗ trợ màn hình nhúng không cần tăng tốc GPU

BigGo Editorial Team
LVGL: Thư viện đồ họa nhẹ hỗ trợ màn hình nhúng không cần tăng tốc GPU

Trong thế giới của hệ thống nhúng, thường cần có giao diện người dùng đồ họa có thể chạy trên các thiết bị với giới hạn tài nguyên nghiêm ngặt. LVGL (Light and Versatile Graphics Library) đã nổi lên như một giải pháp phổ biến cho các nhà phát triển làm việc với vi điều khiển và màn hình nhỏ, cung cấp cách tạo giao diện người dùng hiện đại mà không cần GPU mạnh mẽ hoặc hệ điều hành.

Kết xuất phần mềm cho thiết bị có tài nguyên hạn chế

LVGL được thiết kế đặc biệt cho vi điều khiển và thiết bị công suất thấp với yêu cầu bộ nhớ tối thiểu - chỉ cần 32KB RAM và 128KB bộ nhớ flash, cộng thêm một số không gian bổ sung cho kết xuất và bộ đệm khung hình. Điều này làm cho nó phù hợp với các thiết bị như vi điều khiển ESP32 kết nối với màn hình nhỏ như ILI9341 hoặc SSD1306. Không giống như các framework GUI máy tính để bàn, LVGL hoạt động trực tiếp với bộ đệm pixel, cho phép nó hoạt động trên các hệ thống nơi bạn chỉ cần đặt màu pixel hoặc vẽ các hình nguyên thủy cơ bản.

Một ứng dụng nhúng sẽ muốn làm việc khác trong khoảng 90% thời gian CPU còn lại mỗi giây không dành cho việc kết xuất phần mềm GUI.

Các điểm chuẩn hiệu suất trên các vi điều khiển phổ biến như ESP32-S2 cho thấy thời gian kết xuất từ 50-100ms cho các hoạt động khác nhau bao gồm xoay nhiều bitmap. Mức hiệu suất này hơn đủ cho hầu hết các ứng dụng nhúng, nơi cập nhật giao diện người dùng có thể chỉ cần xảy ra ở tốc độ 1 khung hình mỗi giây, với CPU dành phần lớn thời gian cho các tác vụ khác.

Yêu cầu hệ thống cho LVGL

  • RAM: tối thiểu 32KB
  • Bộ nhớ Flash: tối thiểu 128KB
  • Cần thêm không gian cho bộ đệm kết xuất và bộ đệm khung hình
  • Tương thích với các vi điều khiển như ESP32, STM32, Raspberry Pi Pico

Các loại màn hình phổ biến sử dụng với LVGL

  • Màn hình ILI9341
  • Màn hình SSD1306
  • Màn hình OLED nhỏ
  • Màn hình E-paper

Các thư viện GUI nhúng thay thế

  • TouchGFX - Đối thủ chính của LVGL
  • Adafruit GFX - Dành cho màn hình đơn sắc với tài nguyên rất hạn chế
  • Dear ImGui - Cho hệ thống có hỗ trợ GPU (trường hợp sử dụng khác)

Công cụ phát triển LVGL

  • SquareLine Studio - Trình soạn thảo UI chuyên dụng cho LVGL
  • GUI Guider (NXP) - Lựa chọn thay thế cho trình soạn thảo UI
  • EEZ Studio - Lựa chọn trình soạn thảo UI mã nguồn mở

Phát triển đa nền tảng và công cụ

Mặc dù chủ yếu nhắm vào hệ thống nhúng, tính linh hoạt của LVGL cho phép các nhà phát triển tạo ra trải nghiệm người dùng nhất quán trên các nền tảng khác nhau. Thư viện có thể chạy trong bộ đệm khung hình trên Linux hoặc thông qua giả lập, cho phép sử dụng cùng một giao diện trên cả thiết bị vật lý (như màn hình điều nhiệt) và khi truy cập từ xa thông qua giao diện web được biên dịch bằng Emscripten.

Có một số công cụ tồn tại để đơn giản hóa việc phát triển UI với LVGL. SquareLine Studio đóng vai trò là trình soạn thảo chuyên dụng cho giao diện LVGL, mặc dù một số nhà phát triển lưu ý rằng họ thích một plugin VSCode hơn là một ứng dụng độc lập. Các tùy chọn thay thế được cộng đồng đề cập bao gồm GUI Guider từ NXP và EEZ Studio mã nguồn mở, mà một số người dùng thấy dễ sử dụng hơn.

Tích hợp MicroPython và thư viện thay thế

LVGL cung cấp hỗ trợ MicroPython, mặc dù các thành viên cộng đồng khuyên không nên sử dụng phiên bản chính thức. Thay vào đó, họ khuyên dùng một triển khai thay thế tại github.com/lvgl-micropython/lvgl_micropython để có chức năng tốt hơn, bao gồm hỗ trợ cho phông chữ tùy chỉnh. Sự tích hợp này cho phép các nhà phát triển Python tận dụng khả năng của LVGL mà không cần viết mã C.

Khi xem xét các lựa chọn thay thế trong không gian GUI nhúng, TouchGFX dường như là đối thủ cạnh tranh chính của LVGL. Đối với màn hình đơn sắc có tài nguyên cực kỳ hạn chế, các tùy chọn như thư viện Adafruit GFX có thể phù hợp hơn. Đáng chú ý là LVGL chiếm một vị trí khác biệt so với các thư viện GUI chế độ tức thì như Dear ImGui, vốn được thiết kế chủ yếu cho các hệ thống có GPU hỗ trợ 3D thay vì vi điều khiển.

Tăng tốc phần cứng và phát triển trong tương lai

Mặc dù LVGL chủ yếu sử dụng kết xuất phần mềm, nó có thể tận dụng tăng tốc phần cứng chuyên biệt trên một số nền tảng nhất định. Một số vi điều khiển có các động cơ Blitter hoặc bộ xử lý pixel chuyên dụng (như Pixel Pipeline-Processor của NXP) có thể xử lý các hoạt động như co giãn, xoay, trộn alpha và sao chép pixel. Tài liệu LVGL đề cập đến các Draw Units khác nhau bao gồm hỗ trợ GPU, tích hợp SDL (có thể sử dụng OpenGL), và công việc đang tiến hành để hỗ trợ trực tiếp OpenGL ES.

Thư viện tiếp tục phát triển với sự phát triển tích cực và hỗ trợ mạnh mẽ từ cộng đồng. Tài liệu toàn diện, ví dụ và API đơn giản đã làm cho nó trở thành lựa chọn yêu thích của các nhà phát triển làm việc trên hệ thống nhúng, những người cần tạo giao diện người dùng trực quan mà không cần chi phí của các framework đồ họa phức tạp hơn.

Đối với các nhà phát triển muốn bắt đầu với LVGL, thư viện cung cấp tài liệu và ví dụ mở rộng, bao gồm mẫu mã trong cả C và MicroPython. Cộng đồng xung quanh LVGL năng động và hỗ trợ, với các diễn đàn có sẵn để khắc phục sự cố và chia sẻ kiến thức.

Tham khảo: LVGL Light and Versatile Graphics Library