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 entrydisplay: - 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 menulcd_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 navigationsensor: - 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 显示屏的尺寸,并使用整个区域。