Espressif IDF – GPIOs

Last Updated on 20. Januar 2021 by sfambach

Die meisten GPIO Pins des ESP32 sind, bis auf ein paar Ausnahmen, sowohl Eingänge als auch Ausgänge (Siehe hierzu auch das entsprechende Datenblatt). Wie diese Digital angesteuert werden, zeigen die nächsten Beispiele.

Grundsätzliches

Sind die Pins als Digital konfiguriert können sie jeweil den Wert 1= true oder 0= false annehmen.

Ausgang

Hier das Blinkbeispiele mit dem periodischen Timern aus der vorangegangenen Übung. Nur wird jetzt eine LED geschaltet.

Als binären Ausgang konfigurieren

gpio_set_direction(<LED_PIN>, GPIO_MODE_OUTPUT);

Wert setzten

gpio_set_level(<LED_PIN>, <0|1>);

Eingang

Mein Code hierzu orientiert sich sehr stark am Beispiel Projekt "examples/peripherals/gpio/generic_gpio" der IDF.

Das Beispiel ist leider etwas umfangreicher geworden, da es mit zwei esentiellen Mechanismen arbeitet. Zum einen den Interrupts und zum andren einen Task. Die Tasks habe ich kurz zuvor eingeführt.

Als binären Eingang konfigurieren

gpio_set_direction(<LED_PIN>, GPIO_MODE_INPUT);

Wert abfragen

bool gpio_get_level(<PIN>);

Interupt aktivieren

//Interupt Typ setzten
gpio_set_intr_type(
     <PIN>, 
     <
      GPIO_INTR_DISABLE // deaktiviert
      GPIO_INTR_POSEDGE
 // Steigende Flanke
      GPIO_INTR_NEGEDGE
 // Fallender Flanke

      GPIO_INTR_ANYEDGE
 // Beider Flanken
      GPIO_INTR_LOW_LEVEL
 // Eingang Low
      GPIO_INTR_HIGH_LEVEL // Eingang High
     >
);

// Interupt für Pin aktivieren
gpio_intr_enable(<PIN>);

Beispielprogramm

Vor der Verwendung des Beispielprogramms menuconfig nicht vergessen, die Schalter können einzel aktiviert werden. Zusätzlich kann die Kurz/Lang Unterscheidung eingeschaltet werden. Diese prüft ob ein Knopf lange oder kurz gedrückt wurde.:

Aktivierung / Konfiguration der Schalter

Fazit

GPIOs sind einfach zu bedienen. Die Handhabung ähnelt der Arduino GUI. Kommen Interupte dazu wird der Code schnell komplexer.

Verwandte Beiträge

Hauptbeitrag

Quellen

IDF - Programming Guide

IDF - GPIO & RTC GPIO

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert