Note
ESPHome中max7219digit驱动仅支持驱动点阵显示,对于7段数码管,请参考官方原文MAX7219 7-Segment Display。
本文参考自官方文档MAX7219 Digit Display
硬件连接
- 由于与MAX7219Digit的通信是使用SPI进行此集成的,因此您需要在配置中使用带有mosi_pin的SPI总线(不需要miso_pin)。将VCC连接到3.3V(制造商建议4V以上,但3.3V似乎也可以正常工作),DIN连接到mosi_pin, CS连接到cs_pin,最后将GND连接到GND。
- 您甚至可以通过将链中前一个芯片的DOUT连接到下一个DIN来连接多个max7219。有超过3个芯片,3.3V可能不够。
example
# Example configuration entry
spi:clk_pin: D0mosi_pin: D1display:- platform: max7219digitcs_pin: D2num_chips: 4intensity: 15lambda: |-it.print(0, 0, id(digit_font), "HELLO!");
参数说明
- cs_pin (必须, Pin Schema): CS线连着的引脚。
- num_chips (可选, int): 您希望用于菊花链的芯片数量。默认为4。
- rotate_chip (可选): 旋转每个8x8芯片。有效值为0、90、180和270。默认为0。
- scroll_enable (可选, boolean): 当内容不合适时,打开滚动模式。默认为true。
- scroll_mode (可选): 设置滚动模式. CONTINUOUS or STOP 之一. 默认 为 CONTINUOUS。
-
- CONTINUOUS: 总是滚动并且文本连续重复,您可能需要在末尾添加一些分隔。
-
- STOP: 当文本结束时,它等待scroll_dwell时间,并将滚动设置回开始。
- scroll_speed (可选, Time): 设置滚动速度。默认为250ms。
- scroll_delay (可选, Time): 设置滚动开始前的延迟时间。默认为1秒。
- scroll_dwell (可选, Time): 设置滚动结束后重新开始前的等待时间。这只在STOP模式下使用。默认为1秒。
- reverse_enable (可选, boolean): 对于某些显示器,显示的顺序是颠倒的(“DCBA”)。此选项将再次将显示反转为(" ABCD ")。默认为false。
- intensity (可选, int): MAX7219驱动输出的强度。范围从最弱的0到最亮的15。默认为15。
- lambda (可选, lambda): 用于在MAX7219上呈现内容的lambda。有关更多信息,详情请参阅Rendering Lambda。
- update_interval (可选, Time): 重新绘制屏幕的间隔时间。默认为1秒。
- spi_id (可选, ID): 如果需要使用多个SPI总线,则需要手动指定SPI组件的ID。
- id (可选, ID): 手动指定用于代码生成的ID。
- num_chip_lines (可选, int): 如果要在多行模式下使用显示器,则设置行数,默认为1。Example.
- chip_lines_style (可选): 多线路模式下的线路如何连接?可能的值是zigzag和snake。默认为snake。
- flip_x (可选, boolean): 翻转屏幕上的水平轴。默认为false。
YAML文件
esphome:name: max7219-clocks-envsensorfriendly_name: max7219_clocks_envsensoresp8266:board: esp12e# Enable logging
logger:# Enable Home Assistant API
api:encryption:key: "*************************"ota:password: "****************"wifi:ssid: !secret wifi_ssidpassword: !secret wifi_password# Enable fallback hotspot (captive portal) in case wifi connection failsap:ssid: "Max7219-Clocks-Envsensor"password: "************"captive_portal:web_server:port: 80spi:clk_pin: GPIO14mosi_pin: GPIO13display:- platform: max7219digitcs_pin: GPIO15num_chips: 4scroll_enable: falseintensity: 2lambda: |-if (id(sntp_time).now().is_valid()) {auto time = id(sntp_time).now();it.printf(0, 0, id(my_pixelmix6), "%02d:%02d", time.hour, time.minute);} else {it.print(0, 0, id(my_pixelmix6), "NTP..");}it.image(24, 0, id(my_image));it.line(1, 7, 23, 7);font:- file: "fonts/pixelmix_8px.ttf"id: my_pixelmix6size: 6time:- platform: sntpid: sntp_timetimezone: Asia/Shanghaiimage:- file: "smile.png"id: my_image
效果如图
代码中用到的文件:
smile.png下载地址
图在下面
图在上面
字体文件:
参考ESPHOME Fonts字体组件下载。
其他参数
反显(Screen inversion)
display:- platform: max7219digit# ...lambda: |-it.invert_on_off(true);// Print Hello at position 0 (left)it.print(0,0, id(digit_font), "Hello!");
函数it.invert_on_off(true)
;将反转显示。背景像素是开启的,文本像素是关闭的。it.invert_on_off(false)
;将显示恢复正常。在没有使用参数的情况下, it.invert_on_off();
将切换从开到关或反之亦然。这将在每次更新显示时发生。这样就产生了一个闪烁的效果。背景像素仅在下一次更新时设置,在print, line等各种功能中绘制的像素直接受到invert命令的影响。
display:- platform: max7219digit# ...lambda: |-it.invert_on_off(true);// Print Hello at position 0 (left)it.print(0,0, id(digit_font), "Hello!");it.line(0, 0, 31, 7, COLOR_OFF);
这段代码只会影响在屏幕上绘制的线条。这条线将从左上到右下擦拭像素。背景不受影响。
动态亮度(Screen intensity)
可以使用以下命令在lambda代码中“动态”设置屏幕的强度, it.intensity(0 .. 15)
。
display:- platform: max7219digit# ...lambda: |-it.intensity(10);
屏幕开关 (Screen ON/OFF)
可以使用以下命令在lambda代码中“动态”地打开和关闭显示:it.turn_on_off(true or false)
。
display:- platform: max7219digit# ...lambda: |-it.turn_on_off(true);