Skip to content

Technik Blog

Programmieren | Arduino | ESP32 | MicroPython | Python | Raspberry Pi | Raspberry Pi Pico

Menu
  • Smarthome
  • Arduino
  • ESP32 & Co.
  • Raspberry Pi & Pico
  • Solo Mining
  • Über mich
  • Deutsch
  • English
Menu

Einführung in das OLED Display und Tastenfeld Modul für Arduino mit Beispielprojekt

Posted on 15. April 202414. April 2024 by Stefan Draeger

Wie du das OLED Display mit 4×4 Tastenfeld am Arduino programmierst, möchte ich dir hier in meinem neuen Beitrag zeigen.

OLED-Display mit 4x4 Tastenfeld für den Arduino, ESP oder Raspberry Pi
Dieses Video auf YouTube ansehen.

Das Modul habe ich auf aliexpress.com gefunden und fand dieses gleich sehr praktisch, da man damit recht einfach zum Beispiel einfache Passwort abfragen, generieren oder Daten Seitenweise anzeigen lassen kann.

Modul - OLED Display mit 4x4 Tastenfeld
Modul – OLED Display mit 4×4 Tastenfeld
4x4 Tastenfeld
4×4 Tastenfeld

Inhaltsverzeichnis

  • Aufbau des Moduls – OLED Display mit 4×4 Tastenfeld
    • Technische Daten
    • Pinout des Moduls
  • Anschluss an den Arduino UNO R3
  • Programmieren des Moduls in der Arduino IDE
    • Beispiel – Passwortabfrage programmieren

Aufbau des Moduls – OLED Display mit 4×4 Tastenfeld

Das Modul verfügt wie erwähnt über ein OLED Display von 0,96″ sowie über ein 4×4 Tastenfeld, welches die Zahlen von 0 bis 9 und die Buchstaben A bis D, sowie die Sonderzeichen * und # darstellt.

Technische Daten

Bevor wir in das Beispielprojekt eintauchen, lohnt sich ein Blick auf die technischen Spezifikationen des OLED Displays. Das Tastenfeld verfügt über keine spezifischen Daten, daher werden diese nicht aufgeführt.

Abmessung80 mm x 37 mm
Lochdurchmesser3 mm
OLED Display
TreiberchipSSD1315
SchnittstelleI2C
Auflösung128×64
Displaygröße0,96 Zoll (2,44 cm)
Farbe
Abmessungen24,7 mm x 27 mm

Pinout des Moduls

Das Modul hat 12 Pins, welche auf der Rückseite beschriftet sind. Diese sind aufgeteilt in OLED für die Pins des OLED-Displays sowie in Hang & Lie. Wobei ich denke das dieses in chinesisch für Zeile & Spalte steht.

Stiftleiste für den Anschluß an den Mikrocontroller
Stiftleiste für den Anschluß an den Mikrocontroller

Eine 4×4 Matrix Tastatur habe ich dir bereits im Beitrag Arduino Lektion 68: 4×4 Matrix Tastatur vorgestellt. Diese hier verbaute Tastatur ist sehr ähnlich.

Anschluss an den Arduino UNO R3

Für den Aufbau benötigst du:

  • einen Arduino UNO R3*,
  • ein passendes Datenkabel*,
  • ein 400 Pin Breadboard*,
  • 12 Breadboardkabel, männlich – männlich*

Hinweis von mir: Die mit einem Sternchen (*) markierten Links sind Affiliate-Links. Wenn du über diese Links einkaufst, erhalte ich eine kleine Provision, die dazu beiträgt, diesen Blog zu unterstützen. Der Preis für dich bleibt dabei unverändert. Vielen Dank für deine Unterstützung!

Wenn du noch weitere Komponenten an deinen Mikrocontroller anschließen möchtest (oder musst) dann empfehle ich dir den Arduino Mega 2560 R3 dieser hat deutlich mehr Pins als der UNO R3 und somit vielseitiger.

Funduino MEGA 2560 R3 - Buchsenleisten mit Pinbeschriftungen
Funduino MEGA 2560 R3 – Buchsenleisten mit Pinbeschriftungen

Das Modul habe ich wie folgt an den Arduino UNO R3 angeschlossen:

Pin BeschriftungArduino UNO R3
Zeilen
R4digitaler Pin D9
R3digitaler Pin D8
R2digitaler Pin D7
R1digitaler Pin D6
Spalten
C4digitaler Pin D2
C3digitaler Pin D3
C2digitaler Pin D4
C1digitaler Pin D5
OLED Display
SDASDA oder analoger Pin A4
SCLSCL oder analoger Pin A5
VCC3.3 V
GNDGND

Programmieren des Moduls in der Arduino IDE

Zum Programmieren des Arduino UNOs verwende ich die Arduino IDE 2.3.2 welche du unter https://www.arduino.cc/en/software kostenfrei herunterladen kannst. Zusätzlich benötigst du noch zwei Bibliotheken, um mit dem Display und dem 4×4 Tastenfeld arbeiten zu können.

Im oben verlinkten YouTube-Video wird ausführlich erklärt, wie das Modul korrekt angeschlossen und in der Arduino IDE programmiert wird. Alternativ kannst du den Programmcode auch direkt hier herunterladen.

Programm – Arduino UNO R3 mit OLED-Display & 4×4 TastenfeldHerunterladen

Beispiel – Passwortabfrage programmieren

Das Modul lässt sich super einfach als Eingabefeld für eine Passwortabfrage nutzen. Die Komplexität ist durch die möglichen Eingaben von 0 bis 9 und A bis D beschränkt, jedoch reicht dieses ja auch für eine geringe Sicherheit aus.

Zusätzlich verbaue ich noch:

  • einen Piezo Buzzer*,
  • zwei 5 mm LED*s (inkl. 220 Ohm Vorwiderstand),
  • sechs Breadboardkabel*, männlich – männlich, 10 cm

Da ich durch die LEDs sowie dem Piezo Buzzer etwas mehr Platz benötige, habe ich vom 400 Pin Breadboard zu einem 830 Pin Breadboard* gewechselt.

BauteilArduino UNO R3
LED, rot
Anodedigitaler Pin D11
KathodeGND
LED, grün
Anodedigitaler Pin D12
KathodeGND
Piezo Buzzer
Pin 1digitaler Pin D10
Pin 2GND

Das Programm zum abfragen des Passwortes am Arduino UNO R3 kannst du dir nachfolgend als ZIP-Datei herunterladen.

Programm zumabfragen eines Passwortes mit dem 4×4 Tastenfeld und OLED-Display am Arduino UNO R3Herunterladen

Nachfolgend der Code:

//Bibliothek zum interagieren mit dem 4x4 Tastenfeld
#include <Keypad.h>

//Bibliotheken zum kommunizieren mit dem Display
#include <SPI.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>

//Auflösung des Displays mit 128 x 64 Pixel
#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64

//kein RESET Pin angeschlossen
#define OLED_RESET -1

//Adresse des Displays (default)
#define SCREEN_ADDRESS 0x3C

//Instanz des Displays mit der Konfiguration erzeugen
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);

//Keypad hat 4 Zeilen & 4 Spalten
const byte COLS = 4;
const byte ROWS = 4;

//Definieren der Pins, über welche die Matrix Tastatur
//mit dem Microcontroller verbunden wurde.
const byte COL_PINS[COLS] = { 5, 4, 3, 2 };
const byte ROW_PINS[ROWS] = { 6, 7, 8, 9 };

//Da der Datentyp char nur ein Zeichen aufnehmen kann,
//verwende ich ab der Zahl 10 die Buchstaben A bis G.
const char KEYS[ROWS][COLS] = {
  { '1', '2', '3', 'A' },
  { '4', '5', '6', 'B' },
  { '7', '8', '9', 'C' },
  { '*', '0', '#', 'D' }
};

Keypad myKeypad = Keypad(makeKeymap(KEYS), ROW_PINS, COL_PINS, ROWS, COLS);

//Das Passwort welches abgefragt werden soll.
const String PASSWORD = "A1B6C4";
//Die aktuelle Eingabe.
String currentInput = "";

//Pins für den Piezo Buzzer under der LEDs
#define buzzer 10
#define ledGruen 11
#define ledRot 12

//Feld zum speichern ob der Login erfolgreich war
bool isLoggedIn = false;

void setup() {
  //beginn der seriellen Kommunikation mit 9600 baud
  Serial.begin(9600);

  //definieren das die Pins der Komponenten als Ausgang dienen
  pinMode(ledRot, OUTPUT);
  pinMode(ledGruen, OUTPUT);
  pinMode(buzzer, OUTPUT);

  //initial soll die rote LED leuchten
  digitalWrite(ledRot, HIGH);
  digitalWrite(ledGruen, LOW);

  //beginn der Kommunikation mit dem Display
  //am Anfang wird zunächst das Logo von Adafruit angezeigt
  display.begin(SSD1306_SWITCHCAPVCC, SCREEN_ADDRESS);
  display.display();
  delay(15);
  //starten mit der Abfrage des Passwortes
  paintPasswordDialog();
}

//Funktion zum anzeigen des Passwortdialogs
void paintPasswordDialog() {
  //Bildschirm leeren
  display.clearDisplay();
  //ein Rechteck zeichnen
  display.drawRect(10, 0, 100, 30, SSD1306_WHITE);

  //ein gefülltes Rechteck zeichnen
  display.fillRect(10, 40, 40, 18, SSD1306_WHITE);
  //Schriftgröße 1
  display.setTextSize(1);
  //Textfarbe schwarz
  display.setTextColor(SSD1306_BLACK);
  display.setCursor(15, 45);
  display.println("OK (*)");

  //ein gefülltes Rechteck zeichnen
  display.fillRect(60, 40, 50, 18, SSD1306_WHITE);
  //Schriftgröße 1
  display.setTextSize(1);
  //Textfarbe schwarz
  display.setTextColor(SSD1306_BLACK);
  display.setCursor(65, 45);
  display.println("DEL (#)");

  repaintPasswordText();
  display.display();
}

//Funktion zum schreiben der aktuellen Eingabe in das
//Passwortfeld.
//Zusätzlich wird zuvor die alte Eingabe gelöscht.
void repaintPasswordText() {
  //zeichnen eines schwarzen rechtecks in das Passwortfeld
  //damit wird die alte Eingabe gelöscht / überschrieben
  display.fillRect(11, 2, 96, 24, SSD1306_BLACK);
  display.setTextSize(1);
  display.setTextColor(SSD1306_BLACK);

  //schreiben der aktuellen Eingabe in das Passwortfeld
  display.setTextSize(2);
  display.setTextColor(SSD1306_WHITE);
  display.setCursor(18, 8);
  display.println(currentInput);

  display.display();
}

//Funktion zum anzeigen des Textes "Correct!" auf dem Display
void passwordCorrect() {
  display.clearDisplay();
  display.setTextSize(2);
  display.setTextColor(SSD1306_WHITE);
  display.setCursor(18, 20);
  display.println("Correct!");
  display.display();
}

//Zeichnen eines Buttons mit der Beschriftung "LOGOFF (#)"
void logoffButton() {
  display.fillRect(55, 45, 65, 18, SSD1306_WHITE);
  display.setTextSize(1);
  display.setTextColor(SSD1306_BLACK);
  display.setCursor(60, 50);
  display.println("LOGOFF (#)");
}

void loop() {
  //lesen ob eine Taste gedrückt wurde
  char key = myKeypad.getKey();
  //Wenn eine Taste gedrückt wurde,
  //dann den Wert auf der seriellen Konsole
  //Ausgeben.
  if (key) {
    //Ausgeben der Taste auf der seriellen Schnittstelle
    Serial.print("Die Taste ");
    Serial.print(key);
    Serial.println(" wurde gedrueckt");

    //ausgeben eines Tones am Piezo Buzzer
    tone(buzzer, 1000, 100);

    //Wenn das Feld iLoggedIn gleich False ist, dann...
    if (!isLoggedIn) {
      //Wenn die gedrückte Taste keine der Funktionstaten ist, dann...
      if (key != '*' && key != '#') {
        //Nur wenn die länge der aktuellen Eingabe kleiner als 7 ist
        //dann soll das gedrückte Zeichen der Eingabe hinzugefügt werden.
        if (currentInput.length() < 7) {
          currentInput = currentInput + key;
          //Neuzeichnen der Eingabe
          repaintPasswordText();
        }
      }
      //Wenn die Taste mit dem Stern betätigt wird, dann...
      if (key == '*') {
        //prüfen ob die Eingabe mit dem Wert aus dem Feld
        //PASSWORD gleich ist.
        if (currentInput == PASSWORD) {
          //leeren der Eingabe
          currentInput = "";
          //rote LED deaktivieren, grüne LED aktivieren
          digitalWrite(ledRot, LOW);
          digitalWrite(ledGruen, HIGH);
          //anzeigen des Textes "Correct!"
          passwordCorrect();
          //ausgeben einer kleinen Tonfolge
          tone(buzzer, 800, 275);
          tone(buzzer, 1200, 175);
          tone(buzzer, 800, 275);
          //das Feld isLoggedIn auf true setzen
          isLoggedIn = true;
          //eine kleine Pause
          delay(1000);
          //leeren des Displays
          display.clearDisplay();
          //zeichnen des Logoff Buttons
          logoffButton();
          //absenden der Daten
          display.display();
        } else {
          //Wenn die aktuelle Eingabe ungleich des Passwortes ist,
          //dann soll eine andere Tonfolge erfolgen.
          tone(buzzer, 200, 275);
          tone(buzzer, 500, 175);
          tone(buzzer, 200, 275);
        }
      } else if (key == '#') { 
        //beim drücken der Taste # soll das letzte Zeichen gelöscht werden
        deleteLastSymbol();
      }
    } else {
      //Wenn der Loginvorgang erfolgreich war, dann soll die #-Taste für den
      //Logoff genutzt werden.
      if (key == '#') {
        //Feld isLoggedIn auf false setzen
        isLoggedIn = false;
        //rote LED aktivieren, grüne LED deaktivieren
        digitalWrite(ledRot, HIGH);
        digitalWrite(ledGruen, LOW);
        //zeichnen des Passwortdialoges
        paintPasswordDialog();
      }
    }
  }
}

//Funktion zum löschen des letzten Zeichens aus der aktuellen Eingabe.
void deleteLastSymbol() {
  //Nur wenn die Länge der Eingabe größer als 0 ist.
  if (currentInput.length() > 0) {
    //überschreiben des Wertes des Feldes "currentInput" mit einem 
    //ausschnitt aus dem Feld "currentInput",
    //Start - 0
    //Ende - länge der Eingabe - 1
    currentInput = currentInput.substring(0, currentInput.length() - 1);
    //neuzeichnen der Eingabe
    repaintPasswordText();
  }
}

3 thoughts on “Einführung in das OLED Display und Tastenfeld Modul für Arduino mit Beispielprojekt”

  1. Uwe H. sagt:
    13. Juni 2024 um 20:59 Uhr

    Hallo Stefan Draeger,
    tolle Sache ist das. Gut gemacht auch die Info/Video.
    Ich hätte zwei Fragen:
    -Das Keypad finde ich bei aliexpress nicht. Unter welcher Bezeichnung muss man das suchen?
    -Hat damit nur indirekt zu tun: In welcher prinzipiellen Weise lassen sich mehrere ESP32 „zusammenschalten“? Aber immer verdrahtet, nicht per Funk. D.h. ein Tastendruck (also Pin High) an einem soll die jeweils gleiche Funktion an mehreren anderen auslösen. Ich denke mir das so, dass ein Output-Signal des Masters auf die Input-Pins der Clients geht und die (identische) Software entsprechend reagiert. Kann das so funktionieren? Wäre ein Relais da besser wegen der galvanischen Trennung oder anderem?

    Danke und würde mich freuen, von Ihnen zu hören.
    Uwe

    Antworten
    1. Stefan Draeger sagt:
      14. Juni 2024 um 08:15 Uhr

      Hi,

      wenn du mehrere ESP32 über einen Master steuern möchtest, dann könntest du auch eine serielle Verbindung aufbauen, dazu kannst du mit SoftwareSerial theoretisch alle GPIOs des Masters jeweils mit den anderen ESP32 verbinden und über einen Taster dann alle aktivieren.

      Gruß, Stefan Draeger

      Antworten
      1. Uwe H. sagt:
        14. Juni 2024 um 15:58 Uhr

        Hallo,
        das ist ja fast so wie von mir gedacht. Leider sind die Module erst bestellt, kann es daher nicht gleich testen. Aber ich denke, ich habs verstanden, was tun ist.
        Diese Kombination Tasten und Display scheint es nur bei Aliexpress zu geben, die Suche liefert mir allerdings unterschiedliche Ergebnisse. Mal war es da und mal nicht. getrennt würde es auch gehen.

        Danke und weiterhin viel Erfolg!
        Gruß
        Uwe

        Antworten

Schreibe einen Kommentar Antworten abbrechen

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

Fragen oder Feedback?

Du hast eine Idee, brauchst Hilfe oder möchtest Feedback loswerden?
Support-Ticket erstellen

Newsletter abonnieren

Bleib auf dem Laufenden: Erhalte regelmäßig Updates zu neuen Projekten, Tutorials und Tipps rund um Arduino, ESP32 und mehr – direkt in dein Postfach.

Jetzt Newsletter abonnieren

Unterstütze meinen Blog

Wenn dir meine Inhalte gefallen, freue ich mich über deine Unterstützung auf Tipeee.
So hilfst du mit, den Blog am Leben zu halten und neue Beiträge zu ermöglichen.

draeger-it.blog auf Tipeee unterstützen

Vielen Dank für deinen Support!
– Stefan Draeger

Kategorien

Tools

  • Unix-Zeitstempel-Rechner
  • ASCII Tabelle
  • Spannung, Strom, Widerstand und Leistung berechnen
  • Widerstandsrechner
  • 8×8 LED Matrix Tool
  • 8×16 LED Matrix Modul von Keyestudio
  • 16×16 LED Matrix – Generator

Links

Blogverzeichnis Bloggerei.de TopBlogs.de das Original - Blogverzeichnis | Blog Top Liste Blogverzeichnis trusted-blogs.com

Stefan Draeger
Königsberger Str. 13
38364 Schöningen

Tel.: 01778501273
E-Mail: info@draeger-it.blog

Folge mir auf

  • Impressum
  • Datenschutzerklärung
  • Disclaimer
  • Cookie-Richtlinie (EU)
©2025 Technik Blog | Built using WordPress and Responsive Blogily theme by Superb
Cookie-Zustimmung verwalten
Wir verwenden Technologien wie Cookies, um Geräteinformationen zu speichern und/oder darauf zuzugreifen. Wir tun dies, um das Surferlebnis zu verbessern und um personalisierte Werbung anzuzeigen. Wenn Sie diesen Technologien zustimmen, können wir Daten wie das Surfverhalten oder eindeutige IDs auf dieser Website verarbeiten. Wenn Sie Ihre Zustimmung nicht erteilen oder zurückziehen, können bestimmte Funktionen beeinträchtigt werden.
Funktional Immer aktiv
Die technische Speicherung oder der Zugang ist unbedingt erforderlich für den rechtmäßigen Zweck, die Nutzung eines bestimmten Dienstes zu ermöglichen, der vom Teilnehmer oder Nutzer ausdrücklich gewünscht wird, oder für den alleinigen Zweck, die Übertragung einer Nachricht über ein elektronisches Kommunikationsnetz durchzuführen.
Vorlieben
Die technische Speicherung oder der Zugriff ist für den rechtmäßigen Zweck der Speicherung von Präferenzen erforderlich, die nicht vom Abonnenten oder Benutzer angefordert wurden.
Statistiken
Die technische Speicherung oder der Zugriff, der ausschließlich zu statistischen Zwecken erfolgt. Die technische Speicherung oder der Zugriff, der ausschließlich zu anonymen statistischen Zwecken verwendet wird. Ohne eine Vorladung, die freiwillige Zustimmung deines Internetdienstanbieters oder zusätzliche Aufzeichnungen von Dritten können die zu diesem Zweck gespeicherten oder abgerufenen Informationen allein in der Regel nicht dazu verwendet werden, dich zu identifizieren.
Marketing
Die technische Speicherung oder der Zugriff ist erforderlich, um Nutzerprofile zu erstellen, um Werbung zu versenden oder um den Nutzer auf einer Website oder über mehrere Websites hinweg zu ähnlichen Marketingzwecken zu verfolgen.
Optionen verwalten Dienste verwalten Verwalten von {vendor_count}-Lieferanten Lese mehr über diese Zwecke
Einstellungen anzeigen
{title} {title} {title}