跳转到内容

ST7789V TFT LCD

st7789v 显示平台允许您在 ESPHome 中使用 ST7789V(数据手册Tindie) 显示屏。请注意,此组件使用 4 线 SPI 总线

TTGO T-Display 模块上的 ST7789V TFT LCD

所示的 TTGO T-Display 模块将显示屏连接到模块的电路板上,其与 ESP32 的连接无法更改。其他显示模块具有引脚接头或其他连接器,必须适当地连接到 ESP 模块。

WARNING

此组件已变得多余,因为 ST7789V 现在由 MIPI SPI 显示驱动 支持。 此组件可能会在未来版本中移除。

NOTE

大于 TTGO T-Display 上显示的 135x240 像素显示屏需要大量 RAM 才能正常工作。 某些 ESP 设备(如 ESP8266)没有足够的内存来支持此显示屏。 如果您尝试使用此组件并遇到重复崩溃,这可能是问题的原因。 MIPI SPI 显示驱动 组件具有可用于解决此问题的功能。

# 最小配置示例
display:
- platform: st7789v
model: TTGO TDisplay 135x240
backlight_pin: GPIOXX
cs_pin: GPIOXX
dc_pin: GPIOXX
reset_pin: GPIOXX
lambda: |-
it.print(0, 0, id(font), "Hello World!");
font:
- file: "gfonts://Roboto"
id: font
size: 20

NOTE

有关字体选项的更多信息,请参阅:字体渲染组件

下面标记为 必填 的选项可能对某些型号有默认值,不需要设置。 如果您确实指定它们,它们将覆盖任何默认值。

  • model (**必填”, 字符串):要使用的显示型号。以下选项之一:

    • TTGO TDisplay 135x240
    • Adafruit Funhouse 240x240
    • Adafruit RR 280x240(圆角矩形显示屏——一些像素从角落”删除”以形成圆角形状)
    • Adafruit S2 TFT FEATHER 240X135
    • LILYGO T-Embed 170X320
    • Waveshare 1.47in 172X320(圆角矩形显示屏——一些像素从角落”删除”以形成圆角形状)
    • Custom 用于上面未列出的其他显示屏
  • height (**必填”, int):设置显示屏高度(像素)。默认值取决于 model

  • width (**必填”, int):设置显示屏宽度。默认值取决于 model

  • offset_height (**必填”, int):当 model 设置为”Custom”时,使用此项指定显示屏的垂直偏移(像素)。当 model 未设置为”Custom”时,不能指定此选项。默认值取决于 model

  • offset_width (**必填”, int):当 model 设置为”Custom”时,使用此项指定显示屏的水平偏移(像素)。当 model 未设置为”Custom”时,不能指定此选项。默认值取决于 model

  • cs_pin (**必填”, 引脚模式):CS 引脚。默认值取决于 model

  • dc_pin (**必填”, 引脚模式):DC 引脚。默认值取决于 model

  • reset_pin (**必填”, 引脚模式):RESET 引脚。默认值取决于 model

  • eightbitcolor (可选, 布尔值):将支持的颜色深度限制为 8 位。在内存受限的设备上可能有用。默认为 false

  • backlight_pin (可选, 引脚模式):显示屏的背光引脚。根据硬件配置可能需要。要禁用预设的背光引脚(例如,如果由另一个组件控制),请将其设置为 no

  • power_supply (可选, ID):如果硬件需要,连接到此显示屏的电源。电源将在尝试初始化显示屏之前打开。

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

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

  • pages (可选, 列表):显示页面而不是单个 lambda。详见显示页面

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

  • data_rate (可选, 频率):SPI 数据速率(默认 20MHz)。如果需要可以降低,例如补偿长数据线。

  • spi_mode (可选, 0-3):要使用的 SPI 时钟模式(默认:mode0)。ST7789V 数据手册指定模式 0, 但某些显示屏似乎需要模式 3。这应该是 mode0mode1mode2mode3 之一(或只是 0-3 的数字)。

对于特定型号,有一些预设配置将满足某些 必填 除非预设 值。 除 Custom 外的所有型号都预设了 heightwidthoffset_... 值。 下表总结了其他预设。请注意,SPI CLK 和 SDO (mosi) 引脚以及电源引脚必须在 spi:power_supply: 块中单独配置——引脚仅在下面标注以便参考。

标记为 RQ 的项目取决于硬件但必填且未预设。标记为 ? 的项目是可选的,取决于硬件。

型号高度/宽度偏移CSDCResetBack lightPwr supSPI clkSPI mosi
TTGO TDisplay 135x240240/13552/40562341819
Adafruit Funhouse 240x240240/2400/0403941213635
Adafruit RR 280x240240/2400/20RQRQRQ??RQRQ
Adafruit S2 TFT FEATHER 240X135240/13552/407394045213635
LILYGO T-Embed 170X320320/17035/01013915461211
Waveshare 1.47in 172X320320/17234/021222341819
CustomRQRQRQRQRQ??RQRQ

对于所有板,您可以通过指定任何配置选项来覆盖预设。某些板上的引脚分配可能会在版本之间更改,因此如果预设不起作用,请检查板引脚排列并根据需要覆盖选项。

NOTE

在内存受限的设备上,可以通过指定比实际显示屏更小的 height 和/或 width 来使用显示区域的一部分

要在 lambda 中使用颜色:

color:
- id: my_red
red: 100%
green: 3%
blue: 5%
...
display:
...
lambda: |-
it.rectangle(0, 0, it.get_width(), it.get_height(), id(my_red));

要引入彩色图像:

image:
- file: "image.jpg"
id: my_image
resize: 200x200
type: RGB24
...
display:
...
lambda: |-
it.image(0, 0, id(my_image));

以下是一个示例 YAML 配置,您可以添加到您的基础设备配置中。它定义了:

  • 三种字体(嗯,一种字体三种尺寸)

  • 一个 binary_sensor,指示与 API 的连接状态

  • TTGO 模块上两个按钮各一个 binary_sensor

  • 一个 switch,允许从 HA 控制背光

  • 几种颜色

  • 一个要显示在显示屏上的彩色图像

  • 时间,用于显示…在显示屏上

  • 用于与显示屏通信的 SPI 配置

  • 显示组件本身,用于 TTGO 模块

  • 一个 lambda,如图所示绘制屏幕:

    • 蓝色边框,顶部有一个”标题栏”
    • 左上角黄色的”ESPHome”
    • API 连接状态,连接时绿色显示”Online”,断开时红色显示”Offline”
    • 时间和日期,大致在显示屏中央

要使用此示例,您只需要提供字体文件”Helvetica.ttf”(或将其更新为您选择的字体)和图像文件”image.png”(也可以是”.jpg”)。将这些文件放入 YAML 配置文件本身的同一目录中。注释/取消注释/修改 lambda 中相应的 C 代码行,以隐藏或显示图像或文本。

color:
- id: my_red
red: 100%
green: 0%
blue: 0%
- id: my_yellow
red: 100%
green: 100%
blue: 0%
- id: my_green
red: 0%
green: 100%
blue: 0%
- id: my_blue
red: 0%
green: 0%
blue: 100%
- id: my_gray
red: 50%
green: 50%
blue: 50%
font:
- file: "Helvetica.ttf"
id: helvetica_48
size: 48
- file: "Helvetica.ttf"
id: helvetica_24
size: 24
- file: "Helvetica.ttf"
id: helvetica_12
size: 12
binary_sensor:
- platform: status
name: "节点状态"
id: system_status
- platform: gpio
pin:
number: GPIO0
inverted: true
mode:
input: true
pullup: true
name: "T-Display 按钮输入 0"
id: tdisplay_button_input_0
- platform: gpio
pin:
number: GPIO35
inverted: true
name: "T-Display 按钮输入 1"
id: tdisplay_button_input_1
# 允许可调光控制背光(引脚 GPIO4)
output:
- platform: ledc
pin: GPIO4
id: gpio4
light:
- platform: monochromatic
output: gpio4
name: "背光"
image:
- file: "image.png"
id: my_image
resize: 200x200
type: RGB24
time:
- platform: homeassistant
id: esptime
spi:
clk_pin: GPIO18
mosi_pin: GPIO19
display:
- platform: st7789v
cs_pin: GPIO5
dc_pin: GPIO16
reset_pin: GPIO23
rotation: 270
lambda: |-
it.rectangle(0, 0, it.get_width(), it.get_height(), id(my_blue));
it.rectangle(0, 20, it.get_width(), it.get_height(), id(my_blue)); // 标题栏
it.strftime((240 / 2), (140 / 3) * 1 + 5, id(helvetica_24), id(my_gray), TextAlign::CENTER, "%Y-%m-%d", id(esptime).now());
it.strftime((240 / 2), (140 / 3) * 2 + 5, id(helvetica_48), id(my_gray), TextAlign::CENTER, "%H:%M:%S", id(esptime).now());
it.print(5, 5, id(helvetica_12), id(my_yellow), TextAlign::TOP_LEFT, "ESPHome");
// 注释掉上面的行以查看没有文本覆盖的图像
// it.image(0, 0, id(my_image));
if (id(system_status).state) {
it.print(235, 5, id(helvetica_12), id(my_green), TextAlign::TOP_RIGHT, "Online");
}
else {
it.print(235, 5, id(helvetica_12), id(my_red), TextAlign::TOP_RIGHT, "Offline");
}