ESP8266 – 4×4 Tastatur an analogen Pin verwenden

In diesem Artikel zeige ich Dir, wie Du eine 4×4 Tastatur an einem analogen Port des ESP8266 verwenden kannst.

Für ein Hardware-Projekt suchte ich nach einer Lösung, wir eine Tastatur mit maximal 16 Tasten Port-sparend an einem Arduino Mikrocontroller angeschlossen werden kann. Im Artikel zeige ich Dir die dabei entstandene Platine, welche mit drei Pins (VIN, GND, A0) an einen Arduino Mikrocontroller angeschlossen werden kann.

Verwende Bauteile

Schaltbild und Platine

Im folgenden Schaltbild zeige ich Dir den Aufbau der Schaltung. Bei der Schaltung handelt es sich um ein Spannungsteilernetz. Mit 7 verschiedenen Widerständen (4,7K und 1K) können hier die Tasten identifiziert werden.

Die Platine kann hier im Shop erworben werden.

Der Aufbau der Schaltung ist hierbei mit der Platine denkbar einfach. Hierzu werden die Pins A0, VIN und GND mit dem Arduino Mikrocontroller verbunden. In meinem Fall verwende ich einen ESP8266 Mikrocontroller.

Sketch und Erklärung

Im Sketch wird mittels der analogRead() Funktion der Wert des analogen Pins A0 gelesen. Der Wert liegt zwischen 0 und 1024. Im nächsten Schritt wird der Wert abgefragt und dadurch die gedrückte Taste der Tastatur identifiziert. Die Werte im Sketch basieren auf einem Versuch mit 3V und können daher bei einer Spannung von 5V abweichen.

String lastKey;

void setup() {
    Serial.begin(9600);

    lastKey = "";
}

void loop() {
 int temp = analogRead(A0);

  if ( temp > 0 ) { 
    String statusNr = "";

    if ( temp > 900 ) {
      statusNr = "1";
    } else if (temp > 500 && temp < 520) {
      statusNr = "2";
    } else if (temp > 320 && temp < 355) {
      statusNr = "3";
    } else if (temp > 175 && temp < 195) {
      statusNr = "4";
    } else if (temp > 160 && temp < 170) {
      statusNr = "5";
    } else if (temp > 135 && temp < 150) {
      statusNr = "6";
    } else if (temp > 100 && temp < 110) {
      statusNr = "7";
    } else if (temp > 95 && temp < 100) {
      statusNr = "8";
    } else if (temp > 85 && temp < 94) {
      statusNr = "9";
    } else if (temp > 65 && temp < 70) {
      statusNr = "0";
    } else if (temp > 260 && temp < 270) {
      statusNr = "A";      
    } else if (temp > 110 && temp < 130) {
      statusNr = "B";  
    } else if (temp > 80 && temp < 90) {
      statusNr = "C";     
    } else if (temp > 60 && temp < 65) {
      statusNr = "D";     
    } else if (temp > 70 && temp < 80) {
      statusNr = "*";                          
    } else if (temp > 65 && temp < 70) {
      statusNr = "#";                          
    }

    if ( statusNr != "" ) {
      if ( lastKey != statusNr ) {
          Serial.print("A0:");      
          Serial.println(temp);
          
          Serial.print("Key pressed: ");      
          Serial.println(statusNr);
          lastKey = statusNr;
      }
    }
  }
}

Ich hoffe euch gefällt dieser Artikel. Über Kommentare unterhalb des Artikels oder per E-Mail freue ich mich wie immer 🙂

Matthias Korte

Hauptberuflich Software-Entwickler und seit einigen Jahren Smart-Home Fan. Angefangen hat alles mit einem RaspberryMatic und einer schaltbaren Steckdose. Mittlerweile habe ich einige Steckdosen, Sensoren, und Thermostate sowie ioBroker zur Visualisierung im Einsatz.

4 Gedanken zu „ESP8266 – 4×4 Tastatur an analogen Pin verwenden

  • 10. April 2021 um 12:32
    Permalink

    Hallo,

    wäre es denn möglich mit der Platin dann den Analog Eingang in Verbindung mit der Tasmota Software auf einem ESP als Template zu definieren. Man könnte doch dann über MQTT und einer Regel den Analogwert weiter schicken und an einer anderen Stelle eine Entwicklungsumgebung auswerten und verarbeiten.

    Das wäre doch möglich oder ?

    Gruß
    Thomas

    Antwort
    • 10. April 2021 um 21:14
      Permalink

      Hallo Thomas,

      ja, grundsätzlich ist das bestimmt möglich. Ich habe das so in der Form aber noch nicht ausprobiert. Was hast Du denn genau vor, wenn es nur um viele Pins geht, dann könntest Du auch einen MCP23017 Port-Expander verwenden. Der funktioniert meines Wissens nach auch mit Tasmota.

      https://tasmota.github.io/docs/MCP230xx/

      LG Matthias

      Antwort
      • 15. April 2021 um 0:38
        Permalink

        Hi,

        heute habe ich die Platinen bekommen, danke für das schnelle liefern.

        Ich habe mit der Tasmota Firmware, mit dem generischen Generic18 Profil, auf dem A0 GPIO den ADC Input gelegt und bekomme damit die Analogwerte als Eingang geliefert.

        Sprich, genau auch deine Sketchauswertung kommen die Analogwerte in der Tasmota Firmware an.

        Von daher ist vom Prinzip alles gleich, hätte mich fast gewundert wenn das anders gewesen wäre.

        Im Sketch kann man zwar auch einen MQTT Client mit einbinden, da ich aber schon so viele Geräte als Tasmota einsetze, nutze ich für den Fall auch die Tasmota Firmware. Die anderen speziellen Arduino Projekte laufen trotzdem weiterhin.

        Gruß

        Antwort
        • 15. April 2021 um 6:10
          Permalink

          Hallo Thomas,

          super, vielen Dank für Dein Feedback 🙂

          LG Matthias

          Antwort

Schreibe einen Kommentar

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