跳转到内容

LCD 菜单

该组件提供了在字符型 LCD 显示屏上设置层次菜单的基础设施。这为用户提供了一种交互方法来显示标签、控制 ESPHome 节点上本地可用的 switchselectnumber 等实体,无需网络连接。

该组件实现了 显示菜单 组件,提供了一个主要旨在通过带按钮的旋转编码器或五键摇杆控制器控制的层次菜单。

该组件需要连接到字符型 LCD 显示屏实例,如 lcd_pcf8574 组件lcd_gpio 组件。为获得最佳效果,建议使用 GPIO 连接;按照数据手册速度(通常为 100 kHz)甚至 ESPHome 默认速度(50 kHz)运行的 I²C 连接会产生明显的延迟,尤其是在使用旋转编码器更改数值时。不过,大多数与这些显示屏配合使用的 PCF8574 适配器可以正常运行在 200 甚至 400 kHz,因此如果您愿意承担超出规格运行硬件的风险,可以在您的 I²C 总线 配置中尝试。

# 示例配置
display:
- platform: lcd_pcf8574
id: my_lcd
dimensions: 20x4
...
user_characters:
- position: 0
data: # mark_back 符号
- 0b00100
- 0b01000
- 0b11110
- 0b01001
- 0b00101
- 0b00001
- 0b11110
- 0b00000
lambda: |-
id(my_lcd_menu).draw();
if (!id(my_lcd_menu).is_active())
it.print("菜单未激活");
# 声明 LCD 菜单
lcd_menu:
id: my_lcd_menu
display_id: my_lcd
active: true
mode: rotary
mark_back: 0x08
mark_selected: 0x3e
mark_editing: 0x2a
mark_submenu: 0x7e
items:
...
# 旋转编码器提供导航
sensor:
- platform: rotary_encoder
...
filters:
debounce: 30ms
on_anticlockwise:
- display_menu.up:
on_clockwise:
- display_menu.down:
# 使用去抖动的 GPIO 按钮进行"点击"
binary_sensor:
- platform: gpio
...
filters:
- delayed_on: 30ms
- delayed_off: 30ms
on_press:
- display_menu.enter:

配置变量:

  • id (可选, ID):手动指定用于代码生成的 ID。

  • display_id (可选, ID):手动指定 LCD 显示屏的 ID。

  • mark_back (可选, 0-255):用于标记返回上一级菜单项的字符代码。由于字符集缺少好看的返回箭头,建议使用用户定义字符(使用 8 引用位置 0 处的字符,以避免字符串中的零问题)。默认为 0x5e (^)。

  • mark_selected (可选, 0-255):用于标记选中的菜单项的字符代码。默认为 0x3e (>)。

  • mark_editing (可选, 0-255):用于标记编辑模式菜单项的字符代码。默认为 0x2a (*)。

  • mark_submenu (可选, 0-255):用于标记指向子菜单的菜单项的字符代码。默认为 0x7e(右箭头)。

其余配置在 显示菜单 组件中描述。菜单继承所连接 LCD 显示屏的尺寸并使用整个区域。