L'ère des propagations
(Permalink)
Bonjour à tous,
J'ai eu l'occasion, de récupérer une ancienne tablette Galaxy Tab 6 (2019) et son clavier Bluetooth. Un système Android malheureusement plus tenu à jour en 2025 donc à l'utilisation déconseillée.
| Clavier Galaxy Tab S6 (Bluetooth) |
Contre toute attente, il m'a été impossible d'appairer ce clavier avec un autre système. Ceci dit, cela n'est pas très étonnant d'être confronté à un système fermé.
Si je n'ai pas encore trouvé comment reconvertir la tablette (n'hésitez pas à commenter), je me suis lancé dans la reconversion du clavier pour une future application MicroPython.
Cela commence forcement par l'ouverture du clavier qui n'est pas bien difficile (il y a 4 vis sous chacun des anti-dérapant.
| Clavier Galaxy Tab S6 |
| Clavier Galaxy Tab S6 |
Loin moi l'idée de reprogrammer le microcontrôleur Bt de la carte (ses protections matérielles sont certainement active), je me suis dit qu'il serait plus facile de réutiliser directement la membrane avec un Pico.
C'est que l'on imagine cette membrane comme un clavier de KeyPad dont le fonctionnement est sommaire.
Malheureusement, les choses ne furent pas si simples!
Je commence donc par souder des fils vernis 0.2mm sur le connecteur en vue de réaliser des tests. Les fils sont maintenus bien en place à l'aide de colle chaude (pour éviter de casser les fragiles soudures des fils).
| Quelques fils soudés sur le connecteur (pin 1 à droite). |
| report des connexions sur une plaque de prototypage offrant un accès via connecteur 2.54mm |
J'ai utilisé 2x MCP23017 (GPIO expander 16 bits) pouvant être contrôlé via bus I2C, donc avec seulement deux lignes connectés sur le Pico.
| Matrice clavier branché sur des MCP23017 |
| Brochage du MCP23017 |
| Correspondance broche clavier (1..26) vers MCP (0..15) + MCP (0..9) |
Après un premier échec sur l'identification des colonnes et des lignes de la matrice, un second script a été écrit pour tester une à une chaque ligne comme une colonne considérant alors les 25 autres lignes pour détecter une touche.
Le script tester2.py publié sur le dépôt agit comme suit:
Après avoir testé toutes les touches et répertorié les combinaisons dans une feuille calcul. Nous avons enfin un description de la matrice du clavier.
| feuille calcul des détection de touches |
Puisque le contact électrique se fait dans les deux sens entre drive_pin--et--read_pin alors il est possible d'écrire la relation de détection de F12 comme 7,13 ou 13,7 (d'ailleurs, les deux options sont indiquées par tester2.py ).
Par souci de simplicité, la relation est écrite avec le plus petit numéro de broche d'abord (donc 7,13 pour la touche F12).
Maintenant que nous disposons d'une description de la matrice, il serait opportun d'identifier les driver_pin et les read_pin utilisés dans la matrice.... cela revient à identifier les lignes et les colonnes du keypad présenté plus haut dans l'article.
C''est justement l'objectif du script tester2-driver-pin-detect.py disponible dans le dépôt.
Ce dernier permet d'identifier:
Il y a un recouvrement des broches driver_pin et read_pin. Suivant les circonstances, une broche de la matrice clavier agit tantôt comme broche driver_pin tantôt comme broche de read_pin (de lecture).
Sur base des informations obtenue, le script tester3.py disponible dans le dépôt effectue une détection optimisée des touches du clavier.
La détection s'étend aux combinaisons de touches avec Shift,Ctrl,Alt.
Il reste encore un peu de travail mais le plus gros est fait :-)