基于字符的 LCD 显示
lcd_pcf8574 和 lcd_gpio 显示组件允许你在 ESPHome 中使用与 HD44780 兼容的基于字符的 LCD。此组件仅适用于在屏幕上显示单个字符的 LCD
(通常是 8-40 列和 2-4 行),而不适用于可以单独控制每个像素的 LCD。
NOTE
显示器存在多个版本,支持不同的字符集:
- HD44780UA00 英文-日文,包括片假名字符、一些希腊字母和数学符号
- HD44780UA02 英文-欧洲文,包括希腊文、西里尔文和西欧字符(带一些变音符号)
- HD44780UBxx 自定义、制造商特定的字符集
也可以添加八个用户定义的字符。
lcd_pcf8574 组件
Section titled “lcd_pcf8574 组件”lcd_pcf8574 适用于带有 PCF8574 GPIO 扩展模块连接到所有数据引脚的 LCD 显示器。这样的好处是
你只需要连接到 ESP 两根数据线,而不是像 lcd_gpio 组件 那样的六根或十根。
通信通过 I²C 总线 进行,你需要在配置中有一个 i2c: 部分。

# 示例配置条目i2c: sda: D0 scl: D1
display: - platform: lcd_pcf8574 dimensions: 20x4 address: 0x27 lambda: |- it.print("Hello World!");-
dimensions (必需, string): 以
COLUMNSxROWS格式指定的显示尺寸。如果你不确定, 给显示器上电并数一数即可。 -
address (可选, int): PCF8574 芯片的 I²C 地址,默认为
0x3F。 -
update_interval (可选, Time): 重新绘制屏幕的间隔。默认为
1s。 -
id (可选, ID): 手动指定用于代码生成的 ID。
NOTE
如果你在显示器上什么也看不到,尝试调整 PCF8574 板上的对比度电位器。
lcd_gpio 组件
Section titled “lcd_gpio 组件”此组件的 lcd_gpio 版本直接寻址屏幕,不使用 GPIO 扩展模块。
LCD 的每个数据引脚需要在 ESP 上有专用的 GPIO 引脚。以这种方式连接屏幕提供
更快的刷新,尤其是结合 LCD 菜单 使用时。
# 示例配置条目display: - platform: lcd_gpio dimensions: 20x4 data_pins: - GPIOXX - GPIOXX - GPIOXX - GPIOXX enable_pin: GPIOXX rs_pin: GPIOXX lambda: |- it.print("Hello World!");-
dimensions (必需, string): 以
COLUMNSxROWS格式指定的显示尺寸。如果你不确定, 给显示器上电,将对比度调到最高,然后数一数。 -
data_pins (必需, pins 列表): 你 连接到 LCD 的数据引脚列表。列表可以有 4 项(以 4 位模式运行, 连接前 4 个或后 4 个数据引脚),或 8 项(连接所有 8 个数据引脚)。
-
enable_pin (必需, pin): 你连接
E(06)的引脚。 -
rs_pin (必需, pin): 你连接
RS(04)的引脚。 -
rw_pin (可选, pin): 可选设置你连接
R/W(05)的引脚。你也可以将该引脚永久连接到GND。 -
update_interval (可选, Time): 重新绘制屏幕的间隔。默认为
1s。 -
id (可选, ID): 手动指定用于代码生成的 ID。
NOTE
如果你在显示器上什么也看不到,请确保向板的 VEE(03 )对比度控制
引脚施加 3.3V。你可以使用电位器使其可调。
渲染 Lambda
Section titled “渲染 Lambda”LCD 显示与功能齐全的 显示渲染引擎 有类似的 API,但它只是子集,因为 LCD 显示
没有单个像素的概念。在 lambda 中,你收到一个名为 it 的变量,
与其他所有显示一样。不过在这种情况下,it 是 GPIOLCDDisplay 或 PCF8574LCDDisplay 的实例。
对 LCD 显示最基本的操作是将静态文本写入屏幕,如本页面顶部的配置示例所示。
三个方法(print、printf 和 strftime )都在开头
可选地接受列和行参数,可用于在特定位置打印文本。这些参数默认为
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 时间格式化的介绍。
用户定义字符
Section titled “用户定义字符”LCD 显示可以定义最多八个用户定义字符,占用字符
0 到 7,并在 8 到 15 处镜像(即 \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,背光通过将 Vcc 施加到 BLA(15 )引脚并将 BLK(16 )
引脚连接到 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();