跳转到内容

MAX7219 数码管点阵显示屏

max7219 显示平台允许您在 ESPHome 中使用 MAX7219 数码管点阵。请注意,此组件适用于数码管”点阵”显示屏,对于七段数码管显示屏,请参见 Max7219

MAX7219 数码管点阵显示屏。

由于与 MAX7219 数码管的通信使用 SPI,您需要在配置中有 SPI 总线,并设置 mosi_pin(不需要 miso_pin)。 将 VCC 连接到 3.3V(制造商建议 4+ V,但 3.3V 似乎工作正常),DIN 连接到您的 mosi_pin, CS 连接到您设置的 cs_pin,最后将 GND 连接到 GND。

您甚至可以通过将链中前一个芯片的 DOUT 连接到下一个 DIN 来菊花链连接多个 MAX7219。 超过约 3 个芯片时,3.3V 可能不够,因此您可能需要使用逻辑电平转换器。

# 配置示例
spi:
clk_pin: D0
mosi_pin: D1
display:
- platform: max7219digit
cs_pin: D2
num_chips: 4
intensity: 15
lambda: |-
it.print(0, 0, id(digit_font), "HELLO!");
  • cs_pin (*必填, 引脚模式):您连接 CS 线的引脚。

  • num_chips (可选, int):您希望用于菊花链连接的芯片数量。默认为 4

  • rotate_chip (可选):旋转每个 8x8 芯片。有效值为 090180270。 默认为 0

  • scroll_enable (可选, 布尔值):当内容不适合时启用滚动模式。默认为 true

  • scroll_mode (可选):设置滚动模式。可选 CONTINUOUSSTOP。默认为 CONTINUOUS

    • CONTINUOUS:始终滚动,文本连续重复,您可能需要在末尾添加一些分隔。

    • STOP:文本结束后等待 scroll_dwell 时间,然后将滚动重置到起点。

  • scroll_speed (可选, 时间):设置滚动速度。默认为 250ms

  • scroll_delay (可选, 时间):设置滚动开始前的延迟时间。默认为 1s

  • scroll_dwell (可选, 时间):设置滚动结束后的等待时间,然后重新开始。 这仅在 STOP 模式下使用。默认为 1s

  • reverse_enable (可选, 布尔值):对于某些显示屏,显示顺序是反向的(“DCBA”)。此选项将显示再次反转为(“ABCD”)。默认为 false

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

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

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

  • spi_id (可选, ID):如果要使用多个 SPI 总线,手动指定 SPI 组件 的 ID。

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

  • num_chip_lines (可选, int):如果要以多行模式使用显示屏,设置行数。默认为 1 示例:https://github.com/esphome/esphome/pull/1622#issue-836179156

  • chip_lines_style (可选):多行模式下的线路如何连接?可能的值是 zigzagsnake。默认为 snake

  • flip_x (可选, 布尔值):翻转屏幕上的水平轴。默认为 false

以下动作是下一节中显示的 LAMBDA 函数的副本。

max7219digit.invert_on / max7219digit.invert_off 动作

Section titled “max7219digit.invert_on / max7219digit.invert_off 动作”

此动作 max7219digit.invert_on 将反转显示屏。即背景像素亮起,文本像素熄灭。max7219digit.invert_off 将显示屏设置回正常状态。背景像素仅在下次更新时设置,在各种函数如 print、line 等中绘制的像素直接受反转命令影响。

max7219digit.turn_on / max7219digit.turn_off 动作

Section titled “max7219digit.turn_on / max7219digit.turn_off 动作”

可以使用动作 max7219digit.turn_on / max7219digit.turn_off “动态”地开关显示屏。

max7219digit.reverse_on / max7219digit.reverse_off 动作

Section titled “max7219digit.reverse_on / max7219digit.reverse_off 动作”

使用这些动作,您可以将显示方向从从左到右反转为从右到左。

可以使用此动作”动态”设置屏幕强度。

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

MAX7219 数码管基于完整的显示渲染引擎,因为每个 max7219 芯片有 8 X 8 的单个像素概念。在 lambda 中,像所有其他显示屏一样,您会获得一个名为 it 的变量。在基本显示集中添加了一些”特殊”命令。

display:
- platform: max7219digit
cs_pin: D8
num_chips: 4
lambda: |-
it.strftime(0, 0, id(digit_font), "%H:%M", id(hass_time).now());
it.image(24, 0, id(my_image));
it.line(1, 7, 21, 7);
font:
- file: "pixelmix.ttf"
id: digit_font
size: 6
time:
- platform: homeassistant
id: hass_time
image:
- file: "smile.png"
id: my_image

这大致是用于显示图中 MAX7219 的代码。

由于 8x8 点阵显示屏的高度只有 8 像素,不建议使用 TrueType 字体显示文本。渲染单个字符时很容易出现不美观的伪影。bdf 格式的位图字体更合适。例如 5x7.bdf 或 5x8.bdf

默认情况下,MAX7219Digit 显示屏启用滚动。参数可以在 YAML 文件中设置。 也可以在 Lambda 中通过添加以下命令来更改:

it.scroll(<on/off>, <mode>, <speed>, <delay>, <dwell>);
  • on/off -> 开启或关闭滚动,使用 true 或 false
  • mode -> max7219digit::CONTINUOUS 表示连续滚动,max7219digit::STOP = 在末尾停止并重置
  • speed -> 设置滚动速度(每移动一个点的毫秒数)
  • delay -> 滚动开始时的暂停时间
  • dwell -> 滚动结束时的暂停(仅在模式 1 中)
display:
- platform: max7219digit
# ...
lambda: |-
# ...
it.scroll(true, max7219digit::CONTINUOUS, 100, 5000, 1500);
// 或
it.scroll(true, max7219digit::CONTINUOUS);
// 或
it.scroll(true);
  • 如果文本适合屏幕,屏幕不会滚动。
  • printdigit("...")printdigitf("...") 显示文本的替代方式不会滚动
display:
- platform: max7219digit
# ...
lambda: |-
it.invert_on_off(true);
// 在位置 0(左侧)打印 Hello
it.print(0,0, id(digit_font), "Hello!");

函数 it.invert_on_off(true); 将反转显示屏。即背景像素亮起,文本像素熄灭。it.invert_on_off(false); 将显示屏设置回正常状态。如果不使用参数:it.invert_on_off(); 反转将从开切换到关,反之亦然。这将在每次更新显示屏时发生。 因此会创建闪烁效果。背景像素仅在下次更新时设置,在各种函数如 print、line 等中绘制的像素直接受反转命令影响。

display:
- platform: max7219digit
# ...
lambda: |-
it.invert_on_off(true);
// 在位置 0(左侧)打印 Hello
it.print(0,0, id(digit_font), "Hello!");
it.line(0, 0, 31, 7, COLOR_OFF);

此代码只会影响屏幕上绘制的线条。线条将从左上角到右下角擦除像素。 背景不受影响。

可以在 lambda 代码中通过以下命令”动态”设置屏幕强度:it.intensity(0 .. 15)。

display:
- platform: max7219digit
# ...
lambda: |-
it.intensity(10);

可以在 lambda 代码中通过以下命令”动态”开关显示屏:it.turn_on_off(true or false)。

display:
- platform: max7219digit
# ...
lambda: |-
it.turn_on_off(true);

为了快速显示,代码中嵌入了一些附加命令和相关的 8 像素字体。可以使用三种方法(printdigitprintdigitfstrftimedigit)来显示字符。每个 8 X 8 网格用于显示单个字符。所以空间利用率不高。命令格式为:it.printdigit("1234");it.printdigitf("%s","1234");

请参阅格式化文本了解 printf 格式规则的快速介绍,参阅显示时间了解 strftime 时间格式的介绍。