Clavier I2C pour application MicroControleur (Arduino, MicroBit, MicroPython, M5Stack, Pyboard & PYBStick)
Dans les tréfonds de la gamme M5Stack nouvellement ouverte, nous avons déniché cette petite merveille.
CardKB un clavier pour MicroControleur |
Je ne sais pas pour vous mais pour mois, un clavier c'est justement ce qui manque le plus dans le monde microcontrôleur.
Et comme celui-ci expose une interface I2C, nous nous retrouvons avec un module économique en broche. Même s'il est Qwerty... pour moi c'est top! cela manquait trop.
Quel langage de programmation?
Développé par M5Stack, ce module est supporté sous les plateformes Arduino par M5Stack lui même.
Pour ce qui est de MicroPython... et bien, c'est nous qui avons écrit la bibliothèque.
Du coup, ce joujou est compatible avec les plateforme suivantes:
- Arduino support par M5Stack
- Pyboard sous MicroPython, testé
- PYBStick sous MicroPython
- Micro:Bit sous MicroPython
- M5Stack sous MicroPython, testé
Elle est pas belle la vie?
Quelques spécifications
CardKB - Clavier I2C |
En réalisant le pilote MicroPython, de nombreux points sont venu améliorer notre appréciation de ce produit.
- Le fabriquant parle de "Full Featured Keyboard" et il faut avouer que celui-ci est particulièrement complet.
Le clavier produit des minuscules, majuscules, symboles courant et même des touches directionnelle. - La touche "SYM" (symbole) permet d'atteindre une foule de caractères généralement omis sur ce type de produit: @ # } ] $ ....
- La touche ESC, TAB, Retour arrière (backspace) et Retour clavier (Return) sont disponible.
- Des touches directionnelle pour déplacer un curseur sont présents (sous le microcontrôleur).
- Pas assez de touche ou besoin de fonctions spéciale? et bien la touche "Fn" (fonction) permet de créer autant de composition qu'il n'y a de touches.
Dans les bonnes nouvelles, ce produit fonctionne aussi bien sous 3.3V que 5V. Idéal donc pour nos microcontrôleurs favori.
Par contre, il faut aussi rester réaliste, c'est un petit clavier... donc adapté à de petites saisies mais pas question de faire de l'encodage intensif ;-)
Exploiter l'ASCII
Ce module exploite la codification ASCII (8 bits de données), ce qui est idéal pour transporter l'information sur un bus I2C.
Avant l'unicode, il y avait d'autres normes dont la codification ASCII (American Standard Code for Information Interchange) que les plus vieux d'entre-nous ont connu avec les premiers ordinateur familiaux (Commodore 64, Spectrum, etc).
L'ASCII est codée sur 8 bits (soit 255 caractères) dont seuls les 127 premiers caractères sont normalisés pour inclure l'alphabet courant, de nombreux symboles et des caractères de contrôles (ESC, BACKSPACE, RETURN, etc) hérités du monde Telex (télétypes). Les 128 derniers étant plutôt resté libre et permettant de mettre en place des caractères complémentaires.
Dans le cas du présent clavier, ces caractères complémentaires permettent de codifier les touches "FN" (fonction) et les touches de déplacement de curseur.
Connecteur Grove
La plupart des modules proposés par M5Stack sont équipés de connecteurs Grove, ce qui facilite les connexions au possible sur M5Stack.
Brancher un module Grove |
Cas pratique
Passons à la pratique! Voici un des exemples issus de la bibliothèque CardKB pour MicroPython. Le schéma est également disponible pour Pyboard.
Brancher CardKB sur une PYBStick - Source: esp8266-upy/cardkb |
L'exemple ci-dessous utilise la méthode read_key() qui permet de récupérer le KeyCode, le caractère (si disponible) et la touche de fonction activée (si applicable).
from machine import I2C from cardkb import * # Pyboard : X10=sda, X9=scl # PYBStick: S3=sda, S5=scl i2c = I2C(1) # M5Stack : Connecteur Grove - réduire la vitesse est nécessaire # i2c = I2C(freq=100000, sda=21, scl=22) keyb = CardKB( i2c ) MOD_TEXT = { MOD_NONE : 'none', MOD_SYM : 'SYMBOL', MOD_FN : 'FUNCTION'} CTRL_NAME = {0xB5:'UP',0xB4:'LEFT',0xB6:'DOWN',0xB7:'RIGHT',0x1B:'ESC',0x09:'TAB',0x08:'BS',0x7F:'DEL'} print( 'Keycode | Ascii | Modifier' ) print( '---------------------------') while True: keycode,ascii,modifier = keyb.read_key() # Pas de touche pressée = rien a afficher if keycode == None: continue # Les touche de contrôle ne peuvent pas être affichées normalement # Donc remplacer les touches de contrôle par leur libellé (plus facile à lire) if keyb.is_ctrl( keycode ): if keycode in CTRL_NAME: ascii = CTRL_NAME[keycode] else: # On the connait pas le nom pour le KeyCode ascii = 'ctrl' # Donc on remplace avec la chaîne "ctrl" # Afficher code de la touche, le caractère et la touche modifiante (si utilisée) print( " %5s | %5s | %s" %(hex(keycode), ascii, MOD_TEXT[modifier]) )
exemple disponible dans les sources de la bibliothèque sous le nom test_readkey.py .
>>> import test_readkey Keycode | Ascii | Modifier --------------------------- 0xb5 | UP | none 0xb6 | DOWN | none 0xb4 | LEFT | none 0xb7 | RIGHT | none 0xb7 | RIGHT | none 0xb7 | RIGHT | FUNCTION 0xb7 | RIGHT | none 0x71 | q | none 0x77 | w | none 0x65 | e | none 0x85 | None | FUNCTION 0x35 | 5 | none 0x50 | P | none 0x22 | " | SYMBOL 0x1b | ESC | none 0x1b | ESC | none 0x1b | ESC | none 0x80 | None | FUNCTION 0x8 | BS | none 0x7f | DEL | none 0x20 | | none 0xaf | None | FUNCTION
Voici qui termine notre petite introduction.
Envie d'en savoir plus? n'hésitez pas à consulter les liens ci-dessous.
Où acheter
- CardKB - Clavier I2C
- PYBStick (Arduino et MicroPython)
- MicroPython Pyboard
- M5Stack
- Modules Grove
- Micro:bit
Écrire un commentaire