Adafruit PiTFT: Buttons/Taster mit Python ansteuern

Adafruit PiTFTIch habe mir für mein Sensorprojekt ein PiTFT-Display von Adafruit über EXP-Tech bestellt und vor einigen Tagen erhalten.

Dabei handelt es sich um ein kleines 2,8″ Touchscreen-TFT mit einer Auflösung von 320×240, dass zusätzlich vier Tasten/Buttons besitzt, die direkt auf vier GPIO-Pins geschaltet sind.

Was Adafruit in ihrem ausführlichen HowTo für Montage + Einrichtung vergessen hat, war eine Anleitung, wie man die einzelnen Tasten ansprechen kann.

Im Internet findet man dazu quasi nichts, da das TFT-Display noch relativ neu ist (Dez. 2013). Ich habe mich nun einige Zeit damit beschäftigt und habe einen Lösungsansatz gefunden.Die einzelnen Taster, die separat geordert und aufgelötet werden müssen, sind auf der einen Seite mit einem GPIO-Pin und auf der anderen mit GND verbunden. Es ist also kein Widerstand dazwischen – und das scheint aber in jedem „RPI-Button-HowTo“ der Fall zu sein.

PiTFT montiert auf einem RPiDamit man einen Tastendruck erkennt, muss der interne PullUp-Widerstand für den jeweiligen GPIO-PIN aktiviert werden.

Dabei funktioniert die Logik „negativ„; d.h. wir prüfen, ob ein Button den Wert „False“ zurückliefert (=Tastendruck), da der Pegel standardmäßig HIGH ist und damit True zurückliefert.

Der Sketch in Python3 zum Abfragen sieht wie folgt aus und muss mit „sudo python3 …“ gestartet werden:

Eigentlich sind die GPIO-Pins, die auf der Adafruit-Platine des PiTFT für die Buttons aufgedruckt sind folgende: 23, 22, 21, 18.

Den GPIO 23 nutze ich, wie im Adafruit-HowTo beschrieben, als Shutdown- und Startbutton für den Pi. 22, 21 und 18 hätte ich also frei.

Nur habe ich festgestellt, dass Pin 21 auf einem RPI rev 2.0-Board keinen internen PullUp-Widerstand besitzt, und darüber auch keine 3V Spannung kommen – ergo auch kein Tastendruck erkannt wird. Durch einen Post im Adafruit-Forum wurde ich darauf hingewiesen, statt Pin 21 die Nummer 27 zu verwenden – der GPIO-Pin ist wohl intern doppelt belegt.

Das Script kurz abgeändert, aus 21 die 27 gemacht, und schwupp – funktioniert! Habe 3 Tage nach einer Lösung gesucht… 🙂

Update: Das ist doch ein Witz! 🙂 Auf der mir gelieferten Adafruit-Platine ist tatsächlich 27 als GPIO-Belegung unter dem Taster aufgedruckt! Auf allen Bildern im Internet steht dort statt 27 die 21 – hätte man mal besser bei der Montage aufgepasst 🙂

Bastian
Bastian

Seit 2006 bin ich täglich im IT-Umfeld unterwegs und interessiere mich für technische Lösungen im Hard- und Softwarebereich, die einem den Alltag erleichtern. Zu meinen Hobbies zählt der 3D-Druck, das Tüfteln, Scripten, eine eigene Holzwerkstatt, sowie der unqualifizierte Umgang mit dem Lötkolben.

Artikel: 126

Ein Kommentar

Schreibe einen Kommentar

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