TM1637 7 段显示
tm1637 显示平台允许你在 ESPHome 中使用流行的 TM1637 7 段显示驱动。

模块可以使用 5V 或 3.3V 供电。要显示冒号标点,请在冒号位置使用
.。(参见下面的时钟示例)
# 示例配置条目display: platform: tm1637 id: tm1637_display clk_pin: D6 dio_pin: D5 inverted: true length: 4 lambda: |- it.print("0123");-
clk_pin (必需, Pin Schema): 你连接 CLK 线的引脚。
-
dio_pin (必需, Pin Schema): 你连接 DIO 线的引脚。
-
intensity (可选, int): TM1637 驱动输出的强度。范围从 0(最弱)到 7(默认值)。
-
inverted (可选, bool): 反转字符渲染到 TM1637,以便你可以物理翻转显示。
-
length (可选, int): 你的 TM1637 驱动的位数。仅在
inverted: true时使用。 范围从 1 到 6(默认值)。 -
lambda (可选, lambda): 用于在 TM1637 上渲染内容的 lambda。 更多信息请参见 渲染 Lambda。
-
update_interval (可选, Time): 重新绘制屏幕的间隔。默认为
1s。 -
id (可选, ID): 手动指定用于代码生成的 ID。
二进制传感器
Section titled “二进制传感器”TM1637 LED 显示控制器还包括一个具有键盘扫描接口和增强识别电路(带防干扰按键)的特殊电路。 此电路使用也驱动 LED 显示的 8 段线。但结合 K1 和 K2 引脚,我们可以添加 16 个按键,可在 ESPHome 中用作二进制传感器。

binary_sensor: - platform: tm1637 id: key0 name: key1-00 tm1637_id: tm1637_display key: 0-
id (可选, ID): 设置此传感器的 ID。
-
name (可选, string): 二进制传感器的名称。
-
tm1637_id (可选, ID): tm1637 的 id,在使用多个设备时用于扫描按键。
-
key (必需, integer): 已连接按键的按键码(Seg0 = 0、Seg1 = 1 等)。范围从 0 到 15。
-
所有其他选项参见 二进制传感器。
渲染 Lambda
Section titled “渲染 Lambda”TM1637 与功能齐全的 显示渲染引擎 有类似的 API,但它只是子集,因为 TM1637
7 段显示没有单个像素的概念。在 lambda 中,你收到一个名为 it 的变量,
与其他所有显示一样。不过在这种情况下,it 是 TM1637 实例(参见 API 参考)。
对 TM1637 最基本的操作是将简单的数字写入屏幕,如本页面顶部的配置示例所示。但即使你传入的是一个字符串(这里是 "0123" ),ESPHome 也会将其
转换为 TM1637 能理解的表示:应该打开的确切像素。当然,
并非所有字符都可以表示。你可以在 MAX7219 文档 中看到字符完整列表。
三个方法(print、printf 和 strftime )都在开头
可选地接受一个位置参数,可用于在特定位置打印文本。此参数默认为 0,
意味着第一个 TM1637 的第一个字符。例如,要在 TM1637 末尾
开始文本的第一个字符,你会写 it.print(3, "0");。
还要注意 .(点)字符是特殊的,因为当 ESPHome 在字符串中遇到它时,前一个位置的
点段将被启用。
display: - platform: tm1637 # ... lambda: |- // 在位置 0(左侧)打印 0 it.print("0"); // 结果:"0 "
// 在位置 1(第二个字符)打印 1 it.print(1, "1"); // 结果:"01 "
// 写一个传感器值(假设它是 42.1) it.printf(0, "%.1f", id(my_sensor).state); // 结果:"42.1 "(点将出现在"2"段位上)
// 用空白覆盖先前的内容 it.print(" "); // 打印右填充的传感器值,小数点后 0 位 it.printf("S%3.0f", id(my_sensor).state); // 结果:"S 42"
// 打印当前时间 it.strftime("%H.%M", id(homeassistant_time).now()); // 10:06:42 的结果 -> 带 : 的显示上为 "10:06",带 . 的显示上为 "10.06"请参见 格式化文本 了解 printf 格式化规则的介绍,以及
显示时间 了解 strftime 时间格式化的介绍。
创建数字时钟
Section titled “创建数字时钟”以下示例创建了一个典型的数字时钟,冒号 : 每秒闪烁。
time: - platform: homeassistant id: homeassistant_time
display: platform: tm1637 clk_pin: D6 dio_pin: D5 update_interval: 500ms lambda: |- static int i = 0; i++; if ((i % 2) == 0) it.strftime("%H.%M", id(homeassistant_time).now()); else it.strftime("%H%M", id(homeassistant_time).now());原始段缓冲区
Section titled “原始段缓冲区”如果你已经有段位掩码,可以使用 set_buffer 将原始字节直接写入显示缓冲区。这
绕过字符转换,适用于自定义字形或动画。
void set_buffer(const uint8_t *data, uint8_t length);- data: 指向段字节数组的指针,每位数字一个字节。
- length: 要写入的字节数(不应超过位数)。
TM1637 每位数字使用一个字节,其中每位映射到一个段位(a–g)。小数点是第 7 位(0x80)。
display: - platform: tm1637 # ... lambda: |- // "0123" 的原始段位,第 3 位有点 static const uint8_t buf[] = {0x3f, 0x06, 0x5b, 0x4f | 0x80}; it.set_buffer(buf, sizeof(buf));连接多个显示
Section titled “连接多个显示”要连接多个 TM1636 显示,你需要与显示数量一样多的控制线。这是通过在显示之间共享 clk 和 dio 的控制线来实现的。

当多次使用引脚时,配置必须反映这一点:
display: - platform: tm1637 id: lcd1 clk_pin: number: GPIO3 allow_other_uses: true dio_pin: number: GPIO4 allow_other_uses: true
- platform: tm1637 id: lcd2 clk_pin: number: GPIO4 allow_other_uses: true dio_pin: number: GPIO3 allow_other_uses: true当使用超过 2 个设备(如 3 个或更多)时,为 Dio 引脚添加一条控制线,并与下一个显示的 Clk 引脚共享。 最后一个显示的 Dio 引脚与第一个显示的 Clk 引脚共享。
