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: 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 (必须, 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-envsensor
friendly_name: max7219_clocks_envsensor
esp8266:
board: esp12e
restore_from_flash: true
# Enable logging
logger:
# Enable Home Assistant API
api:
encryption:
key: "1dM5S+qwiGc2OTUJNaz9SHG5hwWtEHZ4DX2yCcU8RRU="
ota:
password: "fb7eb3f985b670274503be945367b423"
wifi:
id: my_wifi
ssid: !secret wifi_ssid
password: !secret wifi_password
# Enable fallback hotspot (captive portal) in case wifi connection fails
ap:
ssid: "Max7219-Clocks-Envsensor"
password: "unNAKrePPh6G"
captive_portal:
web_server:
port: 80
sensor:
- platform: dht
pin: GPIO5
temperature:
name: "Living Room Temperature"
humidity:
name: "Living Room Humidity"
accuracy_decimals: 1
update_interval: 60s
- platform: adc
id: adc_Voltage
pin: A0
update_interval: 60s
accuracy_decimals: 3
name: "ADC Voltage"
unit_of_measurement: mV
filters:
- lambda: return x * 1000;
number:
- platform: template
name: "Off light brightness"
id: Off_light_brightness
unit_of_measurement: mV
optimistic: true
update_interval: 1s
min_value: 0
max_value: 100
step: 1
initial_value: 0
restore_value: yes
spi:
clk_pin: GPIO14
mosi_pin: GPIO13
display:
- platform: max7219digit
cs_pin: GPIO15
num_chips: 4
scroll_enable: false
intensity: 0
id: my_display
lambda: |-
if (id(sntp_time).now().is_valid()) {
auto time = id(sntp_time).now();
if (id(adc_Voltage).state > id(Off_light_brightness).state) {
it.turn_on_off(true);
} else {
it.turn_on_off(false);
}
it.printf(4, 0, id(my_pixelmix), "%02d:%02d", time.hour, time.minute);
} else {
if (id(my_wifi).is_connected()) {
it.print(0, 0, id(my_pixelmix), "NTP...");
} else {
it.print(0, 0, id(my_pixelmix), "NET...");
}
}
font:
- file: "fonts/pixelmix_8px.ttf"
id: my_pixelmix
size: 8
time:
- platform: sntp
id: sntp_time
timezone: Asia/Shanghai
效果如图
代码中用到的文件:
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);