ESPHOME max7219点阵时钟

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下载地址
图在下面
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);
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

萌新程序猿~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值