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.:
Fazit
GPIOs sind einfach zu bedienen. Die Handhabung ähnelt der Arduino GUI. Kommen Interupte dazu wird der Code schnell komplexer.