1. LVGL (Light and Versatile Graphics Library)
適用場景:嵌入式設備、資源受限環境
優勢:
- 專為嵌入式設計的開源 GUI 庫,內存占用極小(最低僅需 64KB RAM)
- 支持觸摸屏、硬件加速(如 STM32 的 LTDC)
- 提供豐富的控件(按鈕、圖表、列表等)和動畫效果
開發方式: - 在嵌入式 Linux 上通過 FrameBuffer 或 SDL 驅動顯示
- 支持 C/Python/MicroPython 綁定
示例代碼(Python):
import lvgl as lv
lv.init()
# 初始化顯示驅動(需根據硬件配置)
disp_buf = lv.disp_draw_buf_create()
disp_drv = lv.disp_drv_init()
lv.disp_drv_register(disp_drv)
# 創建按鈕
btn = lv.btn(lv.scr_act())
btn.set_size(100, 50)
btn.align(lv.ALIGN.CENTER, 0, 0)
label = lv.label(btn)
label.set_text("Hello ATK-MD0430!")
2. SDL2 (Simple DirectMedia Layer)
適用場景:需要直接操作像素或硬件加速
優勢:
- 低層級圖形庫,適合游戲或自定義 UI
- 支持 OpenGL ES 加速(適合 Raspberry Pi 的 GPU)
- 跨平臺(Linux/Windows/嵌入式)
開發方式: - 通過 Python 的
pygame-sdl2
或直接使用 C 語言
示例代碼(Python):
import pygame
pygame.init()
screen = pygame.display.set_mode((480, 272))
running = True
while running:for event in pygame.event.get():if event.type == pygame.QUIT:running = Falsescreen.fill((0, 0, 255)) # 藍色背景pygame.draw.rect(screen, (255, 0, 0), (100, 100, 200, 50)) # 紅色矩形pygame.display.flip()
3. Flutter for Embedded (通過 Flutter-Pi)
適用場景:需要現代 UI 動畫效果
優勢:
- 使用 Dart 語言開發,跨平臺支持
- 硬件加速渲染,流暢的動畫
- 適合 Raspberry Pi(通過 flutter-pi 項目)
限制: - 需要嵌入式 Linux 系統(如 Raspberry Pi OS)
- 內存占用較高(建議 512MB+ RAM)
開發流程:
- 在 PC 上用 Flutter 開發界面
- 交叉編譯為 ARM 版本部署到嵌入式設備
4. 直接使用 FrameBuffer (Linux 原生方案)
適用場景:極簡需求,完全控制像素
優勢:
- 無需額外庫,直接操作
/dev/fb0
- 適合靜態界面或簡單圖形
示例代碼(Python):
import numpy as np
import mmap
# 打開 FrameBuffer
with open("/dev/fb0", "r+b") as fb:fbuf = mmap.mmap(fb.fileno(), 480*272*2, mmap.MAP_SHARED)# 寫入紅色像素(RGB565格式)pixel_red = np.array([0xF800], dtype=np.uint16)fbuf.seek(0)fbuf.write(pixel_red.tobytes())
5. GTK3 (適用于 Raspberry Pi)
適用場景:傳統 Linux GUI 應用
優勢:
- Raspberry Pi 官方推薦(搭配 Raspbian)
- 支持觸摸屏和硬件加速
示例代碼(Python):
import gi
gi.require_version("Gtk", "3.0")
from gi.repository import Gtkclass MyWindow(Gtk.Window):def __init__(self):super().__init__(title="ATK-MD0430")self.set_default_size(480, 272)self.button = Gtk.Button(label="點擊")self.button.connect("clicked", self.on_button_click)self.add(self.button)def on_button_click(self, widget):print("按鈕被點擊")win = MyWindow()
win.connect("destroy", Gtk.main_quit)
win.show_all()
Gtk.main()
選擇建議:
方案 | 語言 | 適合場景 | 硬件要求 | 開發難度 |
---|---|---|---|---|
LVGL | C/Python | 嵌入式專用 UI | 低資源(64KB+ RAM) | 中等 |
SDL2 | C/Python | 游戲/自定義圖形 | 需要 GPU 加速 | 中等 |
Flutter | Dart | 現代動畫 UI | 高資源(512MB+ RAM) | 高 |
FrameBuffer | C/Python | 極簡像素操作 | 最低 | 高 |
GTK3 | Python | 傳統 Linux 應用 | 中等資源 | 低 |
推薦選擇:
- 如果是 STM32 MCU + ATK-MD0430 → LVGL
- 如果是 Raspberry Pi → GTK3(簡單)或 Flutter(炫酷)
- 如果需要 超低功耗 → LVGL 或直接操作 FrameBuffer