Objetivos
Material requerido.
Un M5STACK |
|
Un módulo FACES II | |
La expansión de teclado para FACES II |
Ampliacion Faces II para M5stack
Es sobradamente conocido, que en esta humilde casa somos entusiastas con el M5Stack, un modulo integrado con un ESP32, pantalla a color, batería y conexión a módulos GROVE estándar. Hemos hablado largo y tendido de ello, pero quizás no nos hemos detenido nunca a presentar un módulo opcional que nos ofrece M5 llamado Faces II expansión, y vamos a ver si corregimos este defecto.
El Faces II es un sencillo módulo ampliación del M5Stack que nos permite conectar el M5 a una placa externa que incluye conectores para él y además varios módulos diferentes intercambiables, de quita y pon, que nos permiten facilitar mucho el uso a todos, pero en especial a los más pequeños, al aumentar notablemente sus capacidades a la vez que lo convierte en un dispositivo móvil de mano.
En esta ocasión vamos a ver el uso del módulo de teclado QWERTY que nos permite añadir un teclado completo a nuestro M5 mediante el uso del Faces II
El Faces II nos permite encajar el M5 en el conector estándar que incorpora en la parte superior y colocar el modulo de teclado debajo de modo que permite la comunicación entre ellos vía I2C en una estructura sólida que incluye batería, lo que le convierte en un dispositivo portátil completo.
El ejemplo que proporciona el fabricante nos permite simplemente leer el teclado, pero no parece muy difícil usar la conexión WIFI para convertir el conjunto en un mecanismo de mensajería entre similares que harían las delicias de los más pequeños. Existe toda una línea de productos para este módulo de ampliación, como joystick, joypad para juegos, lectores RFID y de huellas dactilares entre otros.
En esta sesión veremos como usar el teclado qwerty con Arduino C, y en otras sesiones aprovecharemos para revisar otros de los módulos disponibles y tal vez usemos los bloques de programación del M5 para que sea mas accesible a los más pequeños.
El programa para leer el teclado
Ya comentamos mas arriba que el teclado QWERTY se comunica con el M5Stack mediante I2C por lo que empezaremos con las definiciones, y la dirección I2C del teclado:
#include <M5Stack.h> #define KEYBOARD_I2C_ADDR 0X08 #define KEYBOARD_INT 5
El setup no puede ser más sencillo:
void setup() { M5.begin(); M5.Power.begin(); Wire.begin(); M5.Lcd.setTextFont(4); M5.Lcd.println("FACES Keyboard I2C Read Example"); pinMode(KEYBOARD_INT, INPUT_PULLUP); }
Con las primeras líneas iniciamos el M5 y la gestión de energía y luego iniciamos el Wire para comunicar vía I2C. Establecemos el tamaño de letra (Para que se vea bien, que cada día veo menos) En cuanto al Loop(), tampoco da para mucho:
if(digitalRead(KEYBOARD_INT) == LOW) { Wire.requestFrom(KEYBOARD_I2C_ADDR, 1); // request 1 byte from keyboard while (Wire.available()) { uint8_t key_val = Wire.read(); // receive a byte as character if(key_val != 0) { if(key_val >= 0x20 && key_val < 0x7F) { // ASCII String Serial.print((char)key_val); M5.Lcd.print((char)key_val); } else if (key_val = 0x0D) // Si es intro no lo imprimas, haz cambio de linea { Serial.println(); M5.Lcd.println(); } else { Serial.printf("0x%02X ",key_val); M5.Lcd.printf("0x%02X ",key_val); } } }
La primera línea comprueba si hay algo pendiente en el teclado y en caso afirmativo, hacemos una petición de lectura a la dirección del teclado. Hacemos un ciclo para leer tantos caracteres como haya disponibles y si son caracteres ASCII los imprimimos a la pantalla para ver la letra pulsada. En cambio, sí hemos pulsado el intro en lugar de imprimir el carácter ASCII que sería no visible, le pedimos que imprima un intro para cambiar de lineal (Que es lo que normalmente esperas al pulsar intro) y para cualquier otra cosa simplemente imprimes en carácter en pantalla y listo.
Me ha parecido interesante modificar un poco el programa del fabricante para interceptar un carácter en concreto (EL intro en este caso) para que veas cómo puedes usar cualquiera de las teclas para cambiar el estado del teclado. Por ejemplo, la tecla inferior izquierda rotulada “aA” pasa a mayúsculas un solo carácter, pero sería muy sencillo crear una variable Toggle (Que se invierte con cada pulsación) y con ella decides si cuando pulsas esta tecla todo lo que escribas a continuación sea en mayúsculas.
En el futuro iremos viendo que hay disponibles varios módulos adicionales para el FACES II con el M5 que son muy fáciles de usar y que amplían grandemente las posibilidades de uso del M5
Por ejemplo, tenemos teclados tipo calculadora con su programa correspondiente, un joypad con un programa de emulador de la gameboy antigua, así como lectores de huella digital o tarjetas RFID. Aunque en prometec solemos usar los programas en C++ el M5 perite programarlo en Python y en lenguaje de bloques lo que aumenta de forma importante su uso con fines educativos en los centros escolares.
Aquí os dejo un mini video con el resultado: