ST7789V TFT LCD
st7789v 显示平台允许您在 ESPHome 中使用
ST7789V(数据手册,
Tindie)
显示屏。请注意,此组件使用 4 线 SPI 总线。
所示的 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: 20NOTE
有关字体选项的更多信息,请参阅:字体渲染组件。
下面标记为 必填 的选项可能对某些型号有默认值,不需要设置。 如果您确实指定它们,它们将覆盖任何默认值。
-
model (**必填”, 字符串):要使用的显示型号。以下选项之一:
TTGO TDisplay 135x240Adafruit Funhouse 240x240Adafruit RR 280x240(圆角矩形显示屏——一些像素从角落”删除”以形成圆角形状)Adafruit S2 TFT FEATHER 240X135LILYGO T-Embed 170X320Waveshare 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。 -
update_interval (可选, 时间):重新绘制屏幕的间隔。默认为
5s。 -
pages (可选, 列表):显示页面而不是单个 lambda。详见显示页面。
-
id (可选, ID):手动指定用于代码生成的 ID。
-
data_rate (可选, 频率):SPI 数据速率(默认 20MHz)。如果需要可以降低,例如补偿长数据线。
-
spi_mode (可选, 0-3):要使用的 SPI 时钟模式(默认:
mode0)。ST7789V 数据手册指定模式 0, 但某些显示屏似乎需要模式 3。这应该是mode0、mode1、mode2或mode3之一(或只是 0-3 的数字)。
对于特定型号,有一些预设配置将满足某些 必填 除非预设 值。
除 Custom 外的所有型号都预设了 height、width 和 offset_... 值。
下表总结了其他预设。请注意,SPI CLK 和 SDO (mosi) 引脚以及电源引脚必须在 spi: 和 power_supply: 块中单独配置——引脚仅在下面标注以便参考。
标记为 RQ 的项目取决于硬件但必填且未预设。标记为 ? 的项目是可选的,取决于硬件。
| 型号 | 高度/宽度 | 偏移 | CS | DC | Reset | Back light | Pwr sup | SPI clk | SPI mosi |
|---|---|---|---|---|---|---|---|---|---|
| TTGO TDisplay 135x240 | 240/135 | 52/40 | 5 | 6 | 23 | 4 | 18 | 19 | |
| Adafruit Funhouse 240x240 | 240/240 | 0/0 | 40 | 39 | 41 | 21 | 36 | 35 | |
| Adafruit RR 280x240 | 240/240 | 0/20 | RQ | RQ | RQ | ? | ? | RQ | RQ |
| Adafruit S2 TFT FEATHER 240X135 | 240/135 | 52/40 | 7 | 39 | 40 | 45 | 21 | 36 | 35 |
| LILYGO T-Embed 170X320 | 320/170 | 35/0 | 10 | 13 | 9 | 15 | 46 | 12 | 11 |
| Waveshare 1.47in 172X320 | 320/172 | 34/0 | 21 | 22 | 23 | 4 | 18 | 19 | |
| Custom | RQ | RQ | RQ | RQ | RQ | ? | ? | RQ | RQ |
对于所有板,您可以通过指定任何配置选项来覆盖预设。某些板上的引脚分配可能会在版本之间更改,因此如果预设不起作用,请检查板引脚排列并根据需要覆盖选项。
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"); }