Im letzten Beitrag wurde die Ansteuerung der vier Relais realisiert. Mittlerweile lassen sich also die vier Relais auf dem Board per Home Assistant schalten. Zudem, quasi als Gimmick, lässt sich auch eine LED auf dem Board ein- und ausschalten. In diesem Beitrag wird die Möglichkeit der Steuerung der Platine durch externe echte Schalter umgesetzt, denn es wäre schon wichtig die Rolläden nicht nur per Haussteuerung anzusprechen sondern auch per Schalter direkt an den Fenstern.
Auf der ESP-4fach-Relais-Platine sind die Anschlüsse für alle GPIO-Ports per Stiftleiste erreichbar. Für weitere Experimente wäre es aber gut, eine Beschriftung von der Bestückungsseite zu haben. Leider ist die Beschriftung nämlich nur auf der Lötseite vorhanden. Ich habe zudem noch einige fehlende Bezeichnungen hinzugefügt:

Jetzt ist es schon wesentlich einfacher Anschlüsse zu lokalisieren. Einige Anschlüsse haben gleich mehrere Funktionen bzw. Möglichkeiten der Nutzung. Ein paar Anschlüsse sollten im Normalfall nicht genutzt werden. Einen Überblick findet man in folgender Grafik. Üblicherweise nenne ich immer meine Quellen, sofern ich die Grafik nicht selbst erstellt habe. In diesem Fall weiß ich es schlichtweg nicht mehr, – der Rechteinhaber möge mir verzeihen. Sofern er sich meldet trage ich das nach. Andererseits gibt es von dieser Grafik dermaßen viele Varianten, die sich teilweise nur durch Farbgebung unterscheiden, sodaß eh schwierig ist, den Urheber zu finden. Alles wird wohl auf den Hersteller des ESP32 hinauslaufen: Espressif. Nun aber die versprochene Grafik:

Demnach stehen GPIO06 bis GPIO11 schon mal grundsätzlich nicht zur Verfügung, weil sie für interne Zwecke gebraucht werden. GPIO21 und GPIO22 sollte man auch nicht nutzen, weil dann die Möglichkeit der I2C-Kommunikation wegfällt. Je nach Anwendungsfall können noch andere Anschlüsse gänzlich ungeeignet sein.
Für den Anschluss von 4 Schaltkontakten habe ich mir GPIO12, 13, 14 und 27 ausgesucht, weil sie einfach günstig lagen.

Entweder man baut/crimpt sich den betreffenden Stecker selbst, sucht einen passenden fertigen Stecker mit Kabeln dran oder lötet im schlechtesten Fall direkt an der Stiftleiste bzw. auf der Platine. Ich empfehle sich die passende Crimpausstattung zu besorgen. Wichtig ist aber darauf zu achten, dass man die richtigen Stecker mit den richtigen Abständen und Größen kauft.
Natürlich wieder der Hinweis für alle Links zu amazon in diesem Beitrag:
Als Amazon-Partner verdiene ich an qualifizierten Verkäufen. Für den Käufer ändert sich der Preis dadurch nicht.
Die Stiftleiste ist in keinster Weise dazu geeignet die bei Schaltern üblichen Kabelquerschnitte aufzunehmen. Also muss man nochmal „umklemmen“:

Ich habe eine Lüsterklemme genutzt. Die Kabelenden, die von der Stiftleiste kommen, wurden mit Adernendhülsen aufbereitet. Mein eigentlicher Schaltkontakt wird simuliert durch den blauen Draht, der von GND kommt. Ich schalte also mit GND.
Ich musste schon etwas suchen, bevor ich dann die richtigen Konfigurationsdaten im ESPHome gefunden habe. Man muss unter „Binary Sensor“ suchen. Für meine vier Schalter sieht dann eine mögliche Konfiguration so aus:
# GPIOs als Eingang eines Hardwareschalters
binary_sensor:
- platform: gpio
pin:
number: GPIO27
inverted: true
mode:
input: true
pullup: true
name: "Fen_Up"
filters:
- delayed_off: 10ms
- platform: gpio
pin:
number: GPIO14
inverted: true
mode:
input: true
pullup: true
name: "Fen_Dn"
filters:
- delayed_off: 10ms
- platform: gpio
pin:
number: GPIO13
inverted: true
mode:
input: true
pullup: true
name: "Tuer_Up"
filters:
- delayed_off: 10ms
- platform: gpio
pin:
number: GPIO12
inverted: true
mode:
input: true
pullup: true
name: "Tuer_Dn"
filters:
- delayed_off: 10ms
Natürlich muss der Anschlusspin angegeben werden. Da ich mit GND schalte ergibt sich zwangsläufig, dass ich invertiert schalten will: GND soll „aktiv“ bedeuten. Zudem soll immer dann, wenn mein Schalter nicht geschlossen ist, also nicht auf GND liegt, ein definierter Schaltzustand vorliegen. Dafür wird ein Pullup-Widerstand konfiguriert. Damit ich auch erkennen kann, welcher Schalter betätigt wurde, bekommt der Anschluss einen Namen. Gegen die „zitterige Hand“ bzw. gegen das elektronische Prellen werden Schaltzustände von unter 10ms ausgefiltert.
Dieser kurze Ausschnitt wird in der bewährten Form in den schon vorhandenen yaml-Code eingefügt und wireless übertragen. Nach dem Start dieses Vorgangs wird der Code zunächst compiliert und damit dem ESP32 „schmackhaft“ gemacht. Nach dem erfolgreichen Upload und dem obligatorischen Neustart findet man in der Home Assistant Oberfläche unser Device mit 4 zusätzlichen Entitäten:

Für das Foto habe ich GPIO13 an der Lüsterklemme mit GND versorgt. Dadurch wird „Tuer_Up“ als „Ein“ registriert.
Da ich noch einige BME280 Klimasensoren hier rumliegen habe, bot es sich an, den später aufzubauenden Schaltkasten mit einer Messstation auszustatten. Der BME280 misst Temperatur, Luftdruck und relative Luftfeuchtigkeit und besonders angenehm an der Sache ist, dass er in ESPHome als Sensor mit Konfigurationsvorgaben gelistet ist. Es ist zu beachten, dass es unterschiedliche Anschlussmöglichkeiten eines BME280 an einen ESP gibt. Ich habe die I2C-Kommunikation gewählt, was vorraussetzt, das I2C auch noch in der yaml-Konfiguration eingebaut werden muss.
i2c:
sda: GPIO21
scl: GPIO22
scan: true
sensor:
- platform: bme280_i2c
temperature:
name: "BME280 Temperature"
pressure:
name: "BME280 Pressure"
humidity:
name: "BME280 Humidity"
Nach erfolgreichem Neustart war ich zunächst erstaunt, dass keine Kommunikation mit dem BME280 stattfand. Der Fehler war schnell gefunden: Die ESPHome-Konfiguration setzt als Default I2C-Adresse 0x77. Dafür muss der SDO-Aschluss auf 3V3 gelegt werden.

… und schon funktioniert es und wir bekommen alle 60 Sekunden frische Messwerte:

Jetzt fehlt eigentlich nur noch die Logik im Home Assistant, wie all die Sensoren und Relais benutzt werden sollen, denn noch haben wir alles nur einzeln ohne Beziehung zueinander.