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 | FUNCTIONVoici 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