GPIO-Eingang zur Tastaturtaste

Oft sollen über eine Taste am GPIO-Eingang ein Programm gesteuert werden. Früher musste man das kompliziert mit einem eigenen Programm oder zusätzlicher Hardware realisieren. Doch nun geht das ganz einfach, über Device Tree. Mit nur einem Eintrag in der Konfigurationsdatei “config.txt” wird ein GPIO-Eingang einer Tastatur-Taste zugewiesen.

Umsetzung

Mithilfe der Device Tree Funktion ‘gpio-key’ können ganz einfach GPIO-Eingänge zur Simulation eines Tastaturtastendrucks verwendet werden. Man kann so zum Beispiel einem Steuerkreuz die Pfeiltasten Rechts, Links, Oben und Unten zuweisen. Dazu muss man nur angeben welcher GPIO-Eingang welche Taste bzw. Tastencode entspricht. Die Tastencodes können live mit dem Konsolenprogramm ‘showkey’ ermittelt werden, wenn eine Tastatur angeschlossen ist. Wird 10 Sekunden keine Taste gedrückt, so beendet sich das Programm von selbst.

Taste Scancode
Pfeil oben 103
Pfeil links 105
Pfeil rechts 106
Pfeil unten 108
Esc 1
Backspace 14
Enter 28
Strg links 29
Space 57
a 30
s 31
d 32
w 17
y 44
x 45
c 46
z 21
p 28

Alternativ kann auch das Programm ‘dumpkeys’ mit dem Aufruf sudo dumpkeys -f > dumpkeys.txt verwendet werden um eine ganze (unübersichtliche) Liste zu erstellen.
Eine Liste ist auch im Internet bei den Kernel-Sourcen verfügbar. Hier sind auch einige Spezialtasten bzw. Tasten mit bereits verknüpften Funktionen zu finden.

Name Scancode Funktion
KEY_POWER 166 Shutdown
KEY_RESTART 408
KEY_RFKILL 247

Folgende Device Tree Einträge weisen beispielsweise den angegeben GPIOs die Pfeiltastenfunktionen zu:

dtoverlay=gpio-key,gpio=16,keycode=103,label="KEY_UP",gpio_pull=2
dtoverlay=gpio-key,gpio=26,keycode=105,label="KEY_LEFT",gpio_pull=2
dtoverlay=gpio-key,gpio=20,keycode=106,label="KEY_RIGHT",gpio_pull=2
dtoverlay=gpio-key,gpio=21,keycode=108,label="KEY_DOWN",gpio_pull=2

Parameter für gpio-key Overlay:

Parameter Funktion
gpio GPIO-Nummer (BCM)
keycode Tastencode
label Beliebiger Name
gpio_pull Aktivierung Pull-Up/Pull-Down Widerstand; 0 = keiner; 1 = pull-down; 2 = pull-up
active_low Logikpegel für Tastendruck; 0 = Active High, Schalter verbindet nach 3,3 V; 1 = Active Low (Standard-Einstellung), Schalter verbindet nach GND

Auf der Kommandozeile kann die Funktion durch folgenden Befehl getestet werden:

sudo dtoverlay gpio-key gpio=19 keycode=28 label="KEY_ENTER" gpio_pull=2

Verlinkungen

Weitere Infos bezüglich der Device Tree Funktion ‚gpio-keys‘, erhält man unter https://www.kernel.org/doc/Documentation/devicetree/bindings/input/gpio-keys.txt

Martin Strohmayer Geschrieben von:

Softwareentwickler und Raspberry Pi Enthusiast.