conectando un keypad con ESP8266


matriz 4 × 4 con el ESP8266



El objetivo de esta publicación es explicar cómo utilizar un teclado de matriz 4 × 4 con el ESP8266. Para simplificar, asumiremos el uso del ESP8266 integrado en una placa NodeMCU



4x4 Matrix Keypad.png


Figura 1 - Teclado de matriz 4 × 4 de membrana. Adaptado de [1]

Utilizaremos la biblioteca del teclado Arduino que se puede encontrar aquí. Si lo prefiere, también puede encontrarlo en GitHub aquí. La forma más fácil de instalar la biblioteca es a través del administrador de la biblioteca Arduino IDE, como se muestra a continuación en la figura 2



Arduino Keypad Library


Figura 2 - Instalación de la biblioteca a través del administrador de la biblioteca.

Aunque no hay una mención explícita para el soporte en el ESP8266, funciona bien, como veremos a continuación.



El hardware.

Como podemos ver en la figura 1, una matriz de 4 × 4 solo tiene 8 pines de interfaz, que corresponden a las columnas y filas de la matriz. Explicar cómo podemos usar solo 8 pines para verificar cuál de las 16 teclas está presionada está fuera del alcance de esta publicación, pero le recomiendo que lea este artículo que explica el principio de funcionamiento.

Aunque la biblioteca que vamos a utilizar oculta nuestros detalles de implementación, si desea verificar cómo funciona, el artículo mencionado brinda una ayuda útil.

Entonces, para interactuar con el teclado de la matriz, simplemente necesitamos conectar sus columnas y filas a los pines del NodeMCU. Esto se muestra en la figura 3.

NodeMCU 4x4 Matrix Keypad diagram



Figura 3 - Diagrama de conexión para el NodeMCU y la matriz del teclado.

Tenga en cuenta que no necesitamos conectar ninguna fuente de alimentación al teclado porque la mitad de los pines digitales funcionarán como salidas y la otra mitad como entradas, como se puede ver en este método privado de la biblioteca, que es responsable de escanear para teclas presionadas De nuevo, esto es solo un detalle de implementación del que no debemos preocuparnos cuando usamos la biblioteca


código de conexión. 
#include <Keypad.h> //llama a la librería Keypad.h

char contrasena[]="2222";  //aquí escribimos la contraseña de 4 dígitos
char codigo[4];            //Cadena donde se guardaran los caracteres de las teclas presionadas
int cont=0;          //variable que se incrementara al presionar las teclas

const byte ROWS = 4; //Numero de filas del teclado que se esta usando
const byte COLS = 4; //Numero de columnas del teclado que se esta usando

char hexaKeys[ROWS][COLS] =  //Aquí pondremos la disposición de los caracteres tal cual están en nuestro teclado
{
  {'1','2','3','A'},
  {'4','5','6','B'},
  {'7','8','9','C'},
  {'*','0','#','D'}
};

byte rowPins[ROWS] = {9, 8, 7, 6}; //Seleccionamos los pines en el arduino donde iran conectadas las filas
byte colPins[COLS] = {5, 4, 3, 2}; //Seleccionamos los pines en el arduino donde iran conectadas las filas

Keypad customKeypad = Keypad(makeKeymap(hexaKeys), rowPins, colPins, ROWS, COLS); //inicializa el teclado

void setup()
{
  pinMode(13, OUTPUT); //Pin 13 como salida
  Serial.begin(9600); //inicializar puerto serie
}

void loop()
{
  char customKey = customKeypad.getKey(); //se guarda en la variable customKey el caracter de la tecla presionada
  if (customKey != NO_KEY)         //se evalúa si se presionó una tecla
  {
    codigo[cont]=customKey;          //se guarda caracter por caracter en el arreglo codigo[]
    Serial.println(codigo[cont]);    //se imprime en el puerto serie la tecla presionada
    cont=cont+1;              //incrementamos la variable cont
    if(cont==4)          //si ya fueron presionadas 4 teclas se evalúa si la contraseña es correcta
    {
      if(codigo[0]==contrasena[0]&&codigo[1]==contrasena[1]&&codigo[2]==contrasena[2]&&codigo[3]==contrasena[3])
      {
        digitalWrite(13,!digitalRead(13));        //si la contraseña fué correcta se enciende o se apaga el led del pin13
      }
      cont=0;  //resetear a 0 la variable cont
    }
  }
}


Comentarios