跳转到内容

字符型 LCD 显示屏

lcd_pcf8574lcd_gpio 显示组件允许您在 ESPHome 中使用兼容 HD44780 的字符型 LCD 显示屏。 此组件仅适用于在屏幕上显示单个字符的 LCD(通常为 8-40 列和 2-4 行),而不适用于可以单独控制每个像素的 LCD。

NOTE

存在多个版本的显示屏,支持不同的字符集:

  • HD44780UA00 英文-日文版,包括片假名字符、一些希腊字母和数学符号
  • HD44780UA02 英文-欧洲版,包括希腊文、西里尔文和西欧字符(带有一些变音符号)
  • HD44780UBxx 自定义的、制造商特定的字符集

也可以添加八个用户自定义字符。

lcd_pcf8574 用于连接了 PCF8574 GPIO 扩展模块的 LCD 显示屏,模块连接了所有数据引脚。 这样的好处是您只需要将两根数据线连接到 ESP,而不是像 lcd_gpio 组件那样需要六根或十根。 通信通过 I²C 总线进行,您需要在配置中有 i2c: 部分。

背面带有 PCF8574 模块的 LCD 显示屏
# 配置示例
i2c:
sda: D0
scl: D1
display:
- platform: lcd_pcf8574
dimensions: 20x4
address: 0x27
lambda: |-
it.print("Hello World!");
  • dimensions (必填, 字符串):显示屏尺寸,格式为 列x行。如果不确定,请给显示屏通电并数一下。

  • address (可选, int):PCF8574 芯片的 I²C 地址,默认为 0x3F

  • lambda (可选, lambda):用于在显示屏上渲染内容的 lambda。 详见渲染 Lambda

  • update_interval (可选, 时间):重新绘制屏幕的间隔。默认为 1s

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

NOTE

如果您在显示屏上看不到任何内容,请尝试调节 PCF8574 模块上的对比度电位器。

此组件的 lcd_gpio 版本直接寻址屏幕,不使用 GPIO 扩展模块。 LCD 的每个数据引脚都需要 ESP 上的专用 GPIO 引脚。这种连接方式提供更快的刷新速度,特别是在与 LCD 菜单配合使用时。

LCD 显示屏 GPIO 引脚定义
# 配置示例
display:
- platform: lcd_gpio
dimensions: 20x4
data_pins:
- GPIOXX
- GPIOXX
- GPIOXX
- GPIOXX
enable_pin: GPIOXX
rs_pin: GPIOXX
lambda: |-
it.print("Hello World!");
  • dimensions (必填, 字符串):显示屏尺寸,格式为 列x行。如果不确定,请给显示屏通电,调高对比度并数一下。

  • data_pins (*必填, 引脚 列表):您连接到 LCD 的数据引脚列表。 列表可以是 4 项(以 4 位模式运行,连接前 4 个或后 4 个数据引脚),或 8 项(当您连接了所有 8 个数据引脚时)。

  • enable_pin (*必填, 引脚):您连接 E06)引脚的引脚。

  • rs_pin (*必填, 引脚):您连接 RS04)引脚的引脚。

  • rw_pin (可选, 引脚):可选设置您连接 R/W05)引脚的引脚。您也可以将该引脚永久连接到 GND

  • lambda (可选, lambda):用于在显示屏上渲染内容的 lambda。 详见渲染 Lambda

  • update_interval (可选, 时间):重新绘制屏幕的间隔。默认为 1s

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

NOTE

如果您在显示屏上看不到任何内容,请确保将 3.3V 施加到开发板的 VEE03)对比度控制引脚。您可以使用电位器使其可调。

LCD 显示屏具有与完整的显示渲染引擎类似的 API,但只是其中的一个子集,因为 LCD 显示屏没有单个像素的概念。在 lambda 中,像所有其他显示屏一样,您会获得一个名为 it 的变量。在这种情况下,itGPIOLCDDisplayPCF8574LCDDisplay 的实例。

LCD 显示屏最基本的操作是在屏幕上写入静态文本,如本页顶部的配置示例所示。

这三种方法(printprintfstrftime)都可以选择在开头接受列和行参数,可用于在特定位置打印文本。这些参数默认设置为 0(列)和 0(行),即左上角的字符。

display:
- platform: lcd_gpio # 或 lcd_pcf8574
# ...
lambda: |-
// 在左上角打印 0
it.print("0");
// 在第二行第二列打印 1
it.print(1, 1, "1");
// 让我们写入一个传感器值(假设是 42.1)
it.printf("%.1f", id(my_sensor).state);
// 结果:"42.1"(点会出现在显示"2"的段上)
// 打印一个右对齐填充的传感器值,小数点后 0 位
it.printf("Sensor value: %8.0f", id(my_sensor).state);
// 结果:"Sensor value: 42"
// 打印当前时间
it.strftime("It is %H:%M on %d.%m.%Y", id(my_time).now());
// 2018年8月21日10:06的结果 -> "It is 10:06 on 21.08.2018"
# (可选)用于显示时间:
time:
- platform: homeassistant
id: my_time

请参阅格式化文本了解 printf 格式规则的快速介绍,参阅显示时间了解 strftime 时间格式的介绍。

LCD 显示屏可以定义最多八个用户自定义字符,占用字符 07,并在 815 处镜像(即可以用 \x08 代替在字符串中可能有问题的 \0)。每个字符有八行,每行五位,第一行在顶部,最高有效位在左侧,这意味着 0b10000 后跟六个零和一个 0b00001 定义了字符左上角和右下角的点。

display:
- platform: lcd_pcf8574
id: mydisplay
# ...
user_characters:
- position: 0
data:
- 0b00000
- 0b01010
- 0b00000
- 0b00100
- 0b00100
- 0b10001
- 0b01110
- 0b00000
- position: 7
data:
- 0b00000
- 0b01010
- 0b00000
- 0b00100
- 0b00100
- 0b00000
- 0b01110
- 0b10001
lambda: |-
it.print("Hello, world \x08 \x07!");

试试这个自定义字符生成器来设计您自己的符号。

使用 lcd_pcf8574 时,可以通过显示 lambda 定义中的 it.backlight() 打开背光,通过 it.no_backlight() 关闭背光。PCF8574 模块上的跳线需要闭合才能使背光控制工作。请记住,显示 lambda 会在每个 update_interval 运行,所以如果在其中打开/关闭背光,就无法从其他部分覆盖它。

使用 lcd_gpio 时,通过向 BLA15)引脚施加 Vcc 并将 BLK16)引脚连接到 GND 来点亮背光。背光可能消耗比微控制器输出引脚所能提供的更多功率,因此建议使用晶体管作为开关来控制背光引脚的电源。

以下是一个典型用例示例,当运动传感器激活时打开背光,并在传感器最后一次激活 90 秒后关闭。

display:
- platform: lcd_pcf8574
id: mydisplay
# ...
binary_sensor:
- platform: gpio
# ...
on_press:
then:
- binary_sensor.template.publish:
id: backlight
state: ON
- binary_sensor.template.publish:
id: backlight
state: OFF
- platform: template
id: backlight
filters:
- delayed_off: 90s
on_press:
then:
- lambda: |-
id(mydisplay).backlight();
on_release:
then:
- lambda: |-
id(mydisplay).no_backlight();