字符型 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 (必填, 字符串):显示屏尺寸,格式为
列x行。如果不确定,请给显示屏通电并数一下。 -
address (可选, int):PCF8574 芯片的 I²C 地址,默认为
0x3F。 -
update_interval (可选, 时间):重新绘制屏幕的间隔。默认为
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 (必填, 字符串):显示屏尺寸,格式为
列x行。如果不确定,请给显示屏通电,调高对比度并数一下。 -
data_pins (*必填, 引脚 列表):您连接到 LCD 的数据引脚列表。 列表可以是 4 项(以 4 位模式运行,连接前 4 个或后 4 个数据引脚),或 8 项(当您连接了所有 8 个数据引脚时)。
-
enable_pin (*必填, 引脚):您连接
E(06)引脚的引脚。 -
rs_pin (*必填, 引脚):您连接
RS(04)引脚的引脚。 -
rw_pin (可选, 引脚):可选设置您连接
R/W(05)引脚的引脚。您也可以将该引脚永久连接到GND。 -
update_interval (可选, 时间):重新绘制屏幕的间隔。默认为
1s。 -
id (可选, ID):手动指定用于代码生成的 ID。
NOTE
如果您在显示屏上看不到任何内容,请确保将 3.3V 施加到开发板的 VEE(03)对比度控制引脚。您可以使用电位器使其可调。
渲染 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 时,通过向 BLA(15)引脚施加 Vcc 并将 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();