Hoofdstuk 6 van 14

Een drukknop uitlezen en lokaal laten werken

Sluit een drukknop aan en laat je ESP32 lokaal reageren met ESPHome. Controleer de werking zonder tussenkomst van Home Assistant.

Tot nu toe vertelde de ESP32 aan de buitenwereld wat er moest gebeuren: de led ging aan of uit. Met een drukknop draaien we dat om. De ESP32 moet nu vaststellen wat er buiten het bord gebeurt.

Wat doet een drukknop elektrisch?

Een gewone drukknop maakt contact wanneer je hem indrukt. De ESP32 kan die verandering zien op een digitale ingang: een GPIO die we gebruiken om een hoog of laag signaal te lezen.

Een losse ingang kan onbedoelde signalen oppikken. We noemen zo'n ingang zwevend. Daarom gebruiken we een pull-upweerstand. Die houdt de ingang standaard hoog. Zodra we de knop indrukken, verbinden we de ingang met GND en wordt het signaal laag.

De knop aansluiten

Koppel eerst de voeding los. Sluit de knop tussen GPIO18 en GND aan. Controleer bij vierpotige breadboardknoppen welke pootjes al onderling verbonden zijn. Plaats de knop zo dat indrukken daadwerkelijk contact maakt tussen de twee gebruikte aansluitingen.

Voeg vervolgens deze sectie toe, naast de bestaande switch:-sectie:

binary_sensor:
  - platform: gpio
    name: "Werkplaats drukknop"
    pin:
      number: GPIO18
      mode:
        input: true
        pullup: true
      inverted: true
    filters:
      - delayed_on: 20ms
      - delayed_off: 20ms
    on_press:
      then:
        - switch.toggle: werkplaats_testled

Een binary sensor heeft twee toestanden, bijvoorbeeld ingedrukt en losgelaten. pullup: true zet de interne pull-up aan. inverted: true zorgt dat indrukken als de actieve toestand wordt behandeld. De filters van 20 milliseconden helpen korte contacttrillingen van de knop te onderdrukken. Dit heet debouncing.

De actie on_press schakelt de led lokaal om. Daarmee koppelen we een ingang rechtstreeks aan een uitgang, zonder een Home Assistant-automatisering.

Eerst een voorspelling

Wat verwacht je wanneer je de knop eenmaal indrukt? En wanneer je hem langer ingedrukt houdt? Met on_press verwachten we één omschakeling wanneer de ingang actief wordt. De led moet niet voortdurend blijven wisselen zolang je de knop vasthoudt.

Installeer de firmware, druk eenmaal, kijk naar de led en controleer het log. Werkt de knop niet, kijk dan eerst of de binaire sensor van toestand verandert. Zo niet, onderzoek de bedrading en de ingang. Verandert de sensor wel maar niet de led, richt je op de actie en uitgang.

Test of het echt lokaal werkt

Laat de ESP32 ingeschakeld en verbreek tijdelijk alleen de verbinding met Home Assistant. Druk opnieuw op de knop. De led moet nog steeds omschakelen. Dat komt doordat de actie onderdeel is van de firmware.

Dat is een belangrijk ontwerpprincipe. Een lokale functie die altijd nodig is, bouwen we bij voorkeur zo dat een ander systeem er niet onnodig tussen zit.

Wat je uit dit hoofdstuk kunt meenemen

Je begrijpt waarom een ingang een duidelijke standaardtoestand nodig heeft, wat binary_sensor, pullup, inverted en on_press doen en hoe je een eenvoudige lokale bediening maakt. In het volgende hoofdstuk gaan we van twee toestanden naar echte meetwaarden.