Raspberry Pi Keypad

GPIO

Raspberry Pi Keypad anschließen – Codeschloss

Für den Arduino und Raspberry Pi gibt es einige Keypad Matrizen, welche relativ einfach angeschlossen und ausgelesen werden können. Ähnlich zum Numpad an einer Tastatur besitzen diese Keypads 3×4 oder 4×4 Tasten. Eingesetzt werden können diese Module bspw. als Codeschlösser oder zum Bau eines kleinen Taschenrechners. Mithilfe ein paar kleiner Veränderungen kann sogar eine T9 Tastatur erstellt werden, womit Texte wie auf älteren Handys eingetippt werden können.

In diesem Tutorial zeige ich den Anschluss einer solchen Keypad Matrix und wie man diese mit den GPIOs einfach auslesen kann. Um weniger GPIOs zu benutzen ist auch ein Anschluss über den I2C Port Expander MCP23017 möglich.



 

Zubehör

Wie bereits erwähnt gibt es einige verschiedene Modelle dieser „Membranschalter“, wobei sich hauptsächlich die Größe und Beschriftung unterscheidet. In diesem Tutorial habe ich eine 3×4 Tastatur verwendet, jedoch ist es kein Problem das ganze für ein 4×4 (oder größeres) Keypad anzupassen.
Folgende Modelle stehen zur Auswahl:

Außerdem solltest du noch Male-Female Jumper Kabel zur Hand haben.

Welches Raspberry Pi Model du verwendest spielt keine Rolle, solange du mindestens 7 bzw. 8 freie GPIOs hast.

 

Anschluss und Funktion des Raspberry Pi Keypad

Im Grunde können alle freien und ansteuerbaren GPIOs dafür gewählt werden. Je nachdem ob du eine 3×4 bzw. 4×4 Matrix Membran hast werden 7 bzw. 8 Pins belegt. Am besten eignen sich Male-Female Jumper Kabel, welche in die Anschlüsse des Keypads passen. Der grundsätzliche Aufbau einer solchen Tastatur Matrix ist wie folgt:

Raspberry Pi Keypad schema

Die ersten 4 Pins von links sind hierbei für die Zeilen, die weiteren 3 bzw. 4 Anschlüsse für je eine Spalte. Sobald eine Taste gedrückt wird werden zwei Leitungen miteinander verbunden. Um herauszufinden ob und falls ja, welche Taste gedrückt wurde, wird jeweils durch die ersten vier Leitungen kurz ein Signal gesendet. Die restlichen Pins werden „abgehört“.

Wurde z.B. nur Taste 6 gedrückt, so würden die Leitungen „Zeile 2“ und „Spalte 3“ verbunden sein. Senden wir also an dem GPIO für Zeile 2 einen Strom wird nur am GPIO für Spalte 3 ein HIGH Signal empfangen. Alle anderen GPIOs empfangen kein Signal. Indem wir also durch alle Zeilen ein Signal schicken und daraufhin alle Spalten überprüfen, so können wir feststellen, ob eine Taste gedrückt wurde und natürlich auch welche.

 

Nun, wie bereits erwähnt ist es egal welche 7 bzw. 8 GPIOs man verwendet, jedoch muss dies im Code später ggf. angepasst werden. In diesem Beispiel verwende ich ein 3×4 Keypad, also habe nur 7 GPIOs zu belegen. Von links nach rechts ist die Belegung wie folgt:

3×4 KeypadRaspberry Pi
Pin 1GPIO 7 (Pin 26)
Pin 2GPIO 8 (Pin 24)
Pin 3GPIO 11 (Pin 23)
Pin 4GPIO 25 (Pin 22)
Pin 5GPIO 9 (Pin 21)
Pin 6GPIO 10 (Pin 19)
Pin 7GPIO 15 (Pin 10)

 

Schematisch sieht es dann wie folgt aus:

Raspberry Pi Keypad Numpad 3x4 Steckplatine

 

 

Code zum Ansteuern des Keypads

Um die kleine Tastatur nun benutzen zu können, laden wir uns eine kleine Bibliothek von GitHub. Zuerst erstellen wir einen Ordner.

mkdir keypad-rpi && cd keypad-rpi

Anschließend downloaden wir die Datei:

wget -O keypad.py https://raw.githubusercontent.com/rainierez/MatrixKeypad_Python/master/matrix_keypad/RPi_GPIO.py

Falls du eine 4×4 Tastatur bzw. andere GPIOs als ich verwendest, musst du die GPIO Nummern im Code entsprechend anpassen (sudo nano keypad.py).

 

Nun können wir jene Klasse verwenden. Um die Funktionsweise zu verdeutlichen habe ich ein kleines Beispiel erstellt. Um dieses nachzumachen, erstelle eine neue Datei

sudo nano example.py

mit folgendem Code:

Die Datei kannst du mit STRG+O, STRG+X speichern und beenden.

Führen wir die Datei nun aus, können die Eingaben auslesene werden.

sudo python example.py

 

Im nachfolgenden Video siehst du wie das Auslesen der Zahlen aussehen kann:




16 Kommentare

  1. Taobyebye sagt:

    Hallo!
    Könntest du bitte die Verbindung zu den GPIOs auch mit einem 3×4 aufzeichnen?
    Danke!

    • Felix sagt:

      Hi,
      ich habe doch ein 3×4 Keyboard verwendet 🙂
      Falls du eine 4×4 Matrix hast, kannst du irgendeinen freien weiteren GPIO nehmen. Dann musst du das nur noch im Code angeben und es mit kp = keypad(columnCount = 4) initialisieren.
      LG, Felix

    • Taobyebye sagt:

      Hallo Felix,
      tut mir leider ich meinte 4×4.
      Reicht es nur kp = keypad(columnCount = 4) auf 4 zu ändern?

  2. Ingo sagt:

    Klasse!!!!!!
    Immer, wenn ich auf deine Seite gehe, bin ich gespannt was du uns als nächstes wieder Neues präsentierst…!

  3. latawislqu@gmail.com sagt:

    Hallo,

    bei der Umstellung auf 4×4 ist noch ein kleiner Fehler zu beseitigen:
    In der Keypad.py steht:

    # if colVal is not 0 thru 2 then no button was pressed and we can exit
            if colVal 2:
                self.exit()

    Hierbei werden nur Spalten von 0-2 akzeptiert, die 3 als Wert für die 4. Spalte (A, B, C, D auf dem Keypad) wird damit ignoriert.
    Einfach in colVal >3:
    ändern und schon geht’s 😀

    Gruß
    Cornel

  4. Marcus sagt:

    Ist es möglich zu erkennen ob zwei (und welche) Tasten gleichzeitig gedrückt sind?

    • Felix sagt:

      Ja, dafür müsstest du den Code aber ein wenig verändern. Im Moment wird ja abgebrochen, sobald eine Taste gedrückt wurde und danach nicht mehr geprüft wird, ob ggf. noch eine andere Taste gedrückt ist.

  5. Marcus sagt:

    Also in einer Endlosschleife hab ich es schon drin. Über try: except: kann beendet werden. Mein Ziel ist es Ausgänge zu schalten, Zum Test erstmal LEDs. Das klappt auch schon wenn ich z.B. sage wenn eine 1 gedrückt wurde, schalte Pin x 5sec ein. Ich möchte aber das der PIN (bzw. eben auch 2 gleichzeitig) für die Dauer des Tastendruckes geschaltet wird. da steh ich grad echt aufm Schlauch. Mit sleep() ist es eh schlecht da dann während dieser Zeit gar nix anderes geht.

  6. Matthias sagt:

    Hallo,
    mich würde interessieren, ob es auch „Klingelboards“ für Bastler gibt die man mit dem Raspi kombinieren kann. Ich möchte DoorPI nutzen und benötige dazu passende Klingeltableaus; 16er und 32er. Ich finde aber nur diese Keypads.
    Hat jemand eine Idee?

    VG
    Matthias

  7. Michael S. sagt:

    Hallo Felix,

    hast du zufälligerweise den anschluss des Keypad über den MCP23017 schonmal realisiert und könntest uns den Quellcode zur Verfügung stellen?

    Gruß Micha

    • Felix sagt:

      Hallo Michael,
      nein leider nicht. Allerdings sollte sich die Anpassung dazu in Grenzen halten – da nur jene Stellen umgeschrieben werden müssten, wo die GPIO Bibliothek benutzt wird.

  8. Taobyebye sagt:

    Hallo,
    was mache ich wenn mein Numernpad bloß Löcher in unten in der Platine hat und kein Kabel? z.B: sowas hier: aliexpress.com/item/Free-Shipping-16-4×4-Matrix-Keyboard-Keypad-Use-Key-PIC-AVR-Stamp-Sml/1072484015.html?spm=2114.13010308.0.0.ZLcjBP

Schreibe einen Kommentar

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

Blog abonnieren

Abonniere Tutorials-RaspberryPi, um kein Tutorial mehr zu verpassen!