跳转到内容

LVGL 图形

LVGL (Light and Versatile Graphics Library,轻量级通用图形库) 是一个免费且开源的嵌入式图形库,用于为任何 MCU、MPU 和显示类型创建精美的用户界面。ESPHome 支持 LVGL 版本 8

要在 ESPHome 中将 LVGL 与 显示屏 配合使用,您需要 ESP32 或 RP2040。PSRAM 不是必需的,但通常建议使用,特别是对于大型彩色显示屏。

图形显示屏应配置为 auto_clear_enabled: false,并且不应设置任何 lambda。 LVGL 组件将负责显示屏的渲染。对于大多数显示屏,update_interval 应设置为 never,但请注意,OLED 和电子纸等某些显示屏需要将更新间隔设置为合适的值,或者使用 on_draw_end 触发器手动更新显示屏。

对于交互功能,可以使用 触摸屏(强烈推荐电容式)、旋转编码器 或由离散 二进制传感器 组成的自定义键盘。

请查看 Cookbook 中的详细示例,这些示例演示了将您的环境与 LVGL 和 ESPHome 集成的多种方式。

要开始使用,只需添加一个显示屏和一个空的 LVGL 配置即可。如果既未指定 pages 也未指定 widgets,则会显示默认的”hello world”页面。

# 示例最小配置
lvgl:
display:
- platform: ...
# ...
auto_clear_enabled: false
update_interval: never

要自定义 LVGL,您需要在显示屏上添加组件。例如,要在屏幕中央显示一个带有”Hello World!”文本的标签:

lvgl:
widgets:
- label:
align: CENTER
text: 'Hello World!'

现在请继续阅读,了解更多配置选项以及如何自定义您的 LVGL 显示屏。

在 LVGL 中,按钮、标签、滑块等图形元素称为组件(widget)或对象。有关 ESPHome 中支持的组件完整列表,请参阅 组件。并非所有 LVGL 组件都已实现,仅实现了通常用于支持家庭自动化需求/任务的组件。

每个组件都有一个父对象,在其中创建。例如,如果在按钮上创建标签,则按钮是标签的父对象。复杂组件内部由多个较小/简单的组件组成;这些称为部件(parts),每个部件可以具有与主组件分开的属性。

ESPHome 中的页面实现为 LVGL 屏幕,这是没有父对象的特殊对象。显示屏上始终有一个活动页面。

组件可以分配一个 ID,以便在 自动化 中引用。

一些组件还集成为原生 ESPHome 组件:

LVGL 组件ESPHome 组件
button开关二进制传感器
switch , checkbox开关
slider, arc, spinbox数值传感器
dropdown, roller选择器
label, textarea文本文本传感器
led灯光

这些对于与组件直接交互的 Home Assistant 自动化 非常有用。

虽然 LVGL 是对象-部件-状态-样式的复杂矩阵,但 ESPHome 将其简化为一个层次结构。

LVGL 对象层次结构的最高层是显示屏(由硬件驱动程序表示)。一个显示屏可以关联一个或多个页面。每个页面包含图形组件的对象层次结构,表示要在显示屏上呈现的布局。

以下配置变量适用于主 lvgl 组件,用于建立主要操作条件。一些 样式选项 也可以在此级别设置,但仅用于继承目的。

配置变量:

  • displays (可选, 列表, ID):LVGL 应根据其配置执行渲染的显示屏 ID 列表。如果配置了单个显示屏,则可以省略此项,该显示屏将被自动使用。
  • touchscreens (可选, 列表):与显示屏上的 LVGL 组件交互的触摸屏列表。如果配置单个触摸屏,它将被自动使用,此配置项将不需要。
    • touchscreen_id (必需, ID):与显示屏关联的触摸屏配置 ID。
    • long_press_time (可选, 时间):对于触摸屏,调用 on_long_pressed 交互触发器 之前的延迟。默认为 400ms
    • long_press_repeat_time (可选, 时间):对于触摸屏,在 long_press_time 之后的重复间隔,此时将调用 on_long_pressed_repeat 交互触发器。默认为 100ms