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.
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….).
Leave a Reply