MAX7219 Matrix Display met ESPHOME

Ben een tijdje aan het uitvogelen geweest hoe ik 2 aan elkaar gekoppelde MAX7219 matrix LED Displays via een ESP32 en ESPHOME kan aansturen met een drukknop zodat er een tekst op de display verschijnt en na een ingestelde tijd weer uit gaat. De reden was de volgende:

Ik zit op de zolderkamer te werken en de bel gaat. Ik zie via de webcam dat er een koerier voor de deur staat. Ik moet dan in 5 seconden beneden zijn anders zit de koerier al weer in de bestelbus of, als ik geluk heb, staat hij al bij de buren aan te bellen. Door nu op de knop te drukken komt er een melding naast de deur met ‘Kom er aan!’. Dat geeft hopelijk wat meer tijd.

Voor de aansturing van de display heb ik een ESP32 gebruikt waar ik een code via ESPHOME op heb gezet.

Deze afbeelding heeft een leeg alt-attribuut; de bestandsnaam is IMG_20230122_114419s-1024x461.jpg
Bottom of the ESP32
De aansluiting van de ESP32
de aansluiting van de MAX7219

Dus aansluiten van de MAX7219 naar de ESP als volgt:

Oranje VCC naar de 3V3
Grijs van GND naar de GND
Paars van de DIN naar PIN32
Geel van CS naar PIN00
Blauw van CLK naar PIN18

ESPHOME Yaml Code:

# LED MAX7219 display via ESP32 "Kom er aan!"
# This configuration is for the ESP-WROOM-32D board.
# with ESP32_DEVKITC_V4 on the back
#
esphome:
  name: matrix-led

esp32:
#  board: nodemcu-32s #esp32doit-devkit-v1 
  board: esp32dev

wifi:
  ssid: !secret wifi_ssid
  password: !secret wifi_password

  # Enable fallback hotspot (captive portal) in case wifi connection fails
  ap:
    ssid: "Matrix-Led Fallback Hotspot"
    password: !secret fallback_pw

captive_portal:

web_server:

logger:

ota:
  password: "6f336b9008c72edfxxxxxxxxxdb1599e9"

# Enable Home Assistant API
api:
#  encryption:
#    key: "vXGEY20xxxxxxxxxjKpPj+MaXIWasASrpmzz4="

spi:
  clk_pin: GPIO18
  mosi_pin: GPIO23

font:
  - file: "pixelmix.ttf"
    id: pixelmix8
    size: 8
  - file: "Helvetica.ttf"
    id: helvetica_60
    size: 60
  - file: "Helvetica.ttf"
    id: helvetica_48
    size: 48
  - file: "Helvetica.ttf"
    id: helvetica_24
    size: 24
  - file: "Helvetica.ttf"
    id: helvetica_12
    size: 12
 
binary_sensor:    
  - platform: homeassistant
    name: "i-am-coming"
    id: iamcoming
    entity_id: input_boolean.coming
    internal: true
    
display:
  - platform: max7219digit
    cs_pin: GPIO0
    num_chips: 8
    intensity: 8
    lambda: |-
      it.turn_on_off(true); 
      if (id(iamcoming).state) {
        it.print(2, 0, id(pixelmix8), "Kom er aan!");
      } else{
        it.turn_on_off(false);
      }

En de Flow in Node-red is vrij simpel:

Het werkt dan als volgt:

In Home Assistant is een INPUT_BOOLEAN gezet:

##################################################################
##    Trigger van de deurbel zodat esphome display aan gaat     ##
##################################################################

  coming:
    name: melding_komeraan
    initial: off

Zodra ik nu op de knop druk, wordt de INPUT_BOOLEAN op ON gezet. ESPHOME krijgt de wijziging door via een BINARY_SENSOR (‘id: iamcoming’) welke vervolgens de DISPLAY aan zet en de tekst laat zien.
In de Node-Red flow wordt na b.v. 5 seconden de INPUT_BOOLEAN weer op OFF gezet waardoor de DISPLAY weer uit gaat.

Ik kan deze alles ook rechtstreeks laten aansturen door de deurbel, waar ik al een melding krijg in Home Assistant (en op m’n horloge :-)), maar ik ben niet verder gegaan met het project omdat we melkglas naast de deur hebben gekregen en nu de tekst niet goed leesbaar meer is (bummer….).

WordPress Appliance - Powered by TurnKey Linux