跳转到内容

LCD 菜单

该组件提供用于在基于字符的 LCD 显示屏上设置分层菜单的基础设施。这为用户提供了一种交互式方法来显示 标签、控制像 switch、select、number 等在 ESPHome 节点 上本地可用的实体,而不需要网络连接。

该组件实现了 Display Menu 组件,提供 一个主要通过带按钮的旋转编码器 或五键摇杆控制器进行控制的分层菜单。

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

# Example configuration entry
display:
- platform: lcd_pcf8574
id: my_lcd
dimensions: 20x4
...
user_characters:
- position: 0
data: # mark_back symbol
- 0b00100
- 0b01000
- 0b11110
- 0b01001
- 0b00101
- 0b00001
- 0b11110
- 0b00000
lambda: |-
id(my_lcd_menu).draw();
if (!id(my_lcd_menu).is_active())
it.print("Menu is not active");
# Declare a LCD menu
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:
...
# Rotary encoder to provide navigation
sensor:
- platform: rotary_encoder
...
filters:
debounce: 30ms
on_anticlockwise:
- display_menu.up:
on_clockwise:
- display_menu.down:
# A debounced GPIO push button is used to 'click'
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(右箭头)。

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