MAX7219 数码管点阵显示屏
max7219 显示平台允许您在 ESPHome 中使用 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 芯片。有效值为
0、90、180和270。 默认为0。 -
scroll_enable (可选, 布尔值):当内容不适合时启用滚动模式。默认为
true。 -
scroll_mode (可选):设置滚动模式。可选
CONTINUOUS或STOP。默认为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。 -
update_interval (可选, 时间):重新绘制屏幕的间隔。默认为
1s。 -
id (可选, ID):手动指定用于代码生成的 ID。
-
num_chip_lines (可选, int):如果要以多行模式使用显示屏,设置行数。默认为
1示例:https://github.com/esphome/esphome/pull/1622#issue-836179156 -
chip_lines_style (可选):多行模式下的线路如何连接?可能的值是
zigzag和snake。默认为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 动作”使用这些动作,您可以将显示方向从从左到右反转为从右到左。
max7219digit.intensity 动作
Section titled “max7219digit.intensity 动作”可以使用此动作”动态”设置屏幕强度。
- intensity (可选, int):MAX7219 驱动输出的强度。范围从
0(最弱)到15(最亮)。默认为15。
渲染 Lambda
Section titled “渲染 Lambda”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 像素字体。可以使用三种方法(printdigit、printdigitf 和 strftimedigit)来显示字符。每个 8 X 8 网格用于显示单个字符。所以空间利用率不高。命令格式为:it.printdigit("1234"); 或 it.printdigitf("%s","1234");