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 屏幕,这是没有父对象的特殊对象。显示屏上始终有一个活动页面。
一些组件还集成为原生 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 组件交互的触摸屏列表。如果配置单个触摸屏,它将被自动使用,此配置项将不需要。