跳转到内容

TM1637 7 段显示屏

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

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 (**必填”, 引脚模式):CLK 线连接的引脚。

  • dio_pin (**必填”, 引脚模式):DIO 线连接的引脚。

  • intensity (可选, int):TM1637 驱动输出的强度。范围从 0(最弱)到 7(默认)。

  • inverted (可选, 布尔值):反转 TM1637 的字符渲染,以便您可以物理翻转显示屏。

  • length (可选, int):您的 TM1637 驱动的位数。仅在 inverted: true 时使用。范围从 1 到 6(默认)。

  • lambda (可选, lambda):用于在 TM1637 上渲染内容的 lambda。 详见渲染 Lambda

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

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

TM1637 LED 显示控制器还包括一个特殊的电路,带有键盘扫描接口和增强型抗干扰按键识别电路。 此电路使用也驱动 LED 显示的 8 个段线。但结合 K1 和 K2 引脚,我们可以添加 16 个按键,这些按键可以在 esphome 中用作二进制传感器。

TM1637 显示键盘连接
binary_sensor:
- platform: tm1637
id: key0
name: key1-00
tm1637_id: tm1637_display
key: 0
  • id (可选, ID):设置此传感器的 ID。

  • name (可选, 字符串):二进制传感器的名称。

  • tm1637_id (可选, :ID):如果您使用多个设备,应用于扫描按键的 tm1637 的 id。

  • key (**必填”, 整数):连接按键的键码(Seg0 = 0,Seg1 = 1 等)。范围从 0 到 15。

  • 二进制传感器的所有其他选项。

TM1637 具有与完整的显示渲染引擎类似的 API,但只是一个子集,因为 TM1637 7 段显示屏没有单个像素的概念。在 lambda 中,与其他所有显示屏一样,您会收到一个名为 it 的变量。在这种情况下,it 是一个 TM1637 实例(请参阅 API 参考)。

TM1637 最基本的操作是在屏幕上写入一个简单的数字,如本页面顶部的配置示例所示。但即使您传入一个字符串(这里是 "0123"),ESPHome 也会将其转换为 TM1637 可以理解的表示形式:应该打开的确切像素。当然,并非所有字符都可以表示。您可以在 MAX7219 文档中查看完整的字符列表。

这三种方法(printprintfstrftime)都可选地在开头接受一个位置参数,可用于在特定位置打印文本。此参数默认为 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 时间格式的介绍,请参阅显示时间

以下示例创建一个典型的数字时钟,每秒闪烁 : 冒号。

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());

要连接多个 TM1636 显示屏,您需要与显示屏数量相同的控制线。这通过在显示屏之间共享 clk 和 dio 的控制线来实现。

仅使用 2 条控制线连接两个 TM1637 显示屏

当多次使用引脚时,配置必须反映这一事实:

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 引脚共享。

使用 3 条控制线连接三个 TM1637 显示屏