Qwiic Keypad 12 boutons sous MicroPython
Bonjours à tous,
Toujours occupé à poursuivre les découvertes du MicroMod-RP2040 de SparkFun avec le Machine Learning Carrier Board, c'est le module "Qwiic Keypad 12 Buttons" qui est à l'honneur.
Keypad 12 touches - interface Qwiic - Sparkfun |
L'interface Qwiic de Sparkfun transporte un bus I2C et une alimentation 3.3V sur une connectique JSTSH-4 pôles permettant de brancher rapidement des modules sur un microcontrôleur.
Dans l'exemple ci-dessous, le module est branché sur un MicroMod-RP2040 sous MicroPython.
Source: qwiic-keypad-i2c (GitHub, MCHobby) |
Comme il s'agit d'un bus I2C, il est possible de chaîner plusieurs modules sur un même bus (pour autant que chaque module dispose de sa propre adresse).
Mais rien n'empêche de le brancher sur un Raspberry-Pi Pico (ou un PYBStick-RP2040)
Source: qwiic-keypad-i2c (GitHub, MCHobby) |
Note: cette connectique est par ailleurs connue chez Adafruit sous le nom StemmaQT.
Bibliothèque MicroPython
Avant de pouvoir utiliser le KeyPad I2C sur votre plateforme MicroPython, il faudra y copier la bibliothèque kpadi2c.py sur le microcontrôleur.
Cette bibliothèque est disponible sur le dépôt GitHub.
Du code... pour le peuple
Voici comment utiliser la bibliothèque kpadi2c :from machine import I2C, Pin from kpadi2c import Keypad_I2C import time # MicroMod-RP2040 - SparkFun i2c = I2C( 0, sda=Pin(4), scl=Pin(5) ) # Raspberry-Pi Pico # i2c = I2C( 1 ) # sda=GP6, scl=GP7 kpad = Keypad_I2C( i2c ) print( 'KeyPad connected:', 'Yes' if kpad.is_connected else 'NO' ) print( 'Version:', kpad.version ) print( 'Press buttons: * to exit reading loop') while True: kpad.update_fifo() _btn = kpad.button # Return ASCII code while _btn != 0: print( "ASCII: %s, Char: %s" % (_btn, chr(_btn) ) ) if _btn == 42: raise Exception( 'User Exit!' ) kpad.update_fifo() _btn = kpad.button # read next time.sleep_ms( 200 )
Le code est assez transparent en soi. Il faut faire un appel à update_fifo() pour réaliser la mise-à-jour des registres du clavier (pour acquérir, la prochaine touche pressée). La dernière touche pressée est acquise avec un appel à button() .
L'éxécution du script d'exemple produit le résultat suivant.
>>> import test KeyPad connected: Yes Version: v1.0 Press buttons: * to exit reading loop ASCII: 49, Char: 1 ASCII: 50, Char: 2 ASCII: 51, Char: 3 ASCII: 52, Char: 4 ASCII: 53, Char: 5 ASCII: 54, Char: 6 ASCII: 55, Char: 7 ASCII: 56, Char: 8 ASCII: 57, Char: 9 ASCII: 48, Char: 0 ASCII: 35, Char: # ASCII: 35, Char: # ASCII: 35, Char: # ASCII: 42, Char: * Traceback (most recent call last): File "&tl;stdin>", line 1, in &tl;module> File "test.py", line 34, in &tl;module> Exception: User Exit!
Réaliser un DigiCode
Le bibliothèque contient un deuxième fichier nommé kpadcode.py . Ce dernier contient la classe CodeChecker .from machine import I2C, Pin from kpadcode import CodeChecker import time # MicroMod-RP2040 - SparkFun i2c = I2C( 0, sda=Pin(4), scl=Pin(5) ) # Raspberry-Pi Pico # i2c = I2C( 1 ) # sda=GP6, scl=GP7 # Fonction de rappel utilisée par CodeChecker pour tenir informé # de l'encodage utilisateur def update_display( user_entry, timeout ): # user_entry : chaîne de caractères # timeout : True lorsque l'utilisateur n'encode plus rien (et RAZ user_entry) if timeout: print( 'Callback: timeout!' ) print( 'Callback: "%s"' % user_entry ) locker = CodeChecker( i2c, address=0x4B, code='1234*' ) # Code secret = '1234*' locker.on_update = update_display # Associe la fonction de rappel print( 'KeyPad connected:', 'Yes' if locker.is_connected else 'NO' ) print( 'Version:', locker.version ) locked = True while locked: print( '==== Enter KeyCode to Unlock ====' ) # execute() demande un code sur le clavier. Retourne True s'il est correct. # Retourne False si l'utilisateur n'encode rien et délai d'attente dépassé (timeout) locked = not( locker.execute() ) if locked: print( 'Execute() timeout! Try again' ) # La boucle se termine lorsque le code est correct print( 'Yes! Unlocked!' )
Ce qui produit le résultat suivant où les différents messages montre le fonctionnement interne de la classe CodeChecker .
MicroPython v1.17 on 2021-09-02; Raspberry Pi Pico with RP2040 Type "help()" for more information. >>> import checkcode KeyPad connected: Yes Version: v1.0 ==== Enter KeyCode to Unlock ==== Callback: " " Callback: "5 " Callback: "55 " Callback: "555 " Callback: "5555 " Callback: "55555" Callback: " " Callback: " " Callback: "4 " Callback: "44 " Callback: timeout! Callback: " " Callback: "4 " Callback: "44 " Callback: "444 " Callback: timeout! Callback: " " Execute() timeout! Try again ==== Enter KeyCode to Unlock ==== Callback: " " Execute() timeout! Try again ==== Enter KeyCode to Unlock ==== Callback: " " Execute() timeout! Try again ==== Enter KeyCode to Unlock ==== Callback: " " Callback: "6 " Callback: "66 " Callback: "666 " Callback: "6666 " Callback: "66666" Callback: " " Callback: timeout! Callback: " " Execute() timeout! Try again ==== Enter KeyCode to Unlock ==== Callback: " " Callback: "1 " Callback: "12 " Callback: "123 " Callback: "1234 " Callback: "12345" Callback: " " Callback: "1 " Callback: "12 " Callback: "123 " Callback: "1234 " Callback: "1234*" Yes! Unlocked!
Ressources
Envie d'en savoir plus?
- qwiic-keypad-i2c (GitHub, MC Hobby)
Bibliothèque, branchement, code d'exemple. - Raspberry-Pi Pico @ MCHobby
- PYBStick-RP2040 @ MCHobby
Écrire un commentaire