{Arduino} – Simuler un clavier Azerty

 

Coucou à tous et bonne fin d'année !

 

Bientôt les fêtes, le bon vin chaud, les bons bretzels, le retour des vieux manèges et surtout les marchés de Noël ! Rien que de bonnes choses pour notre plus grand plaisir à tous ;)
Alors pour cette fin d'années, j'ai quelques petits articles en stock rien que pour vous et j'espère qu'ils vous plairont.
En attendant, je me suis remis un peu sur l'un de mes Arduino(s), le "Genuino Micro".

Pourquoi ?

Eh bien tout simplement car ce modèle permet d'émuler un clavier et une souris !
Sauf qu'il y a une petite subtilité un peu contraignante si vous souhaitez simuler un clavier ....

Émuler un clavier

Rien de plus simple, si vous souhaitez utiliser un clavier voici quelques infos :

Tout d'abord, vous devrez initialiser l'Arduino en tant que clavier grâce à l'objet "Keyboard" :

void setup(){
	//initialise le mode "clavier"
	Keyboard.begin();
}

Ensuite plusieurs méthodes de l'objet "Keyboard" s'offrent à vous ...
Ces méthodes sont les suivantes  :

  • Keyboard.press()
  • Keyboard.print()
  • Keyboard.println()
  • Keyboard.release()
  • Keyboard.releaseAll()
  • Keyboard.write()

Ces fonctions vous permettent de presser une touche, d'écrire directement du texte, de relacher une touche, de relâcher toutes les touches, etc ...

Vous pouvez presser plusieurs touches en même temps pour effectuer un combo.
Voici par exemple une fonction que j'ai écrite, si vous souhaitez exécuter une commande avec le raccourci clavier "CTRL + R" sur Windows :

void runCmd(String cmd){
  int i = 0;
  Keyboard.begin();
  Keyboard.press(KEY_LEFT_GUI);
  Keyboard.press('r');
  Keyboard.releaseAll();
  delay(1000);
  while (cmd[i] != 0){
    Keyboard.write(cmd[i++]);
    delay(50);
  }
}

Avec ce code, si vous faites un :

runCmd("cmd")

Vous devriez voir une console s'ouvrir !

 

Là où le bât blesse

Le souci avec l'arduino Micro c'est qu'il va considérer que vous écrivez avec un clavier Qwerty !
Donc si vous souhaitez écrire avec votre Arduino :

chrome https://dyrk.org

Celui-ci écrira

chro;e https.>>dyrk<org

C'est légèrement embêtant !

Rassurez-vous, il existe une librairie qui permet d'écrire avec un clavier Azerty !
Sauf que .... cette librairie ne peut être utilisée avec la libraire Keyboard ... il y a comme qui dirait un conflit d’intérêts ;)

Mais le pire, c'est que cette librairie vous permettra en effet d'écrire du texte en Azerty mais ne va pas gérer correctement certaines touches ... inutiles d'essayer de faire un "CTRL + R"

Mon petit script de contournement

J'ai écrit une petite fonction qui permet de transcrire automatiquement votre texte Azerty en Qwerty.
Elle n'est pas parfaite, mais elle est simple et vous pourrez parfaitement l'adapter à vos besoins :

String fr2en(String text){
  int i = 0;
  String _en = " =qwertyuiopasdfghjkl;zxcvbnQWERTYUIOPASDFGHJKL:ZXCVBNm,./M<>?1234567890!@#$%^&*()",
         _fr = " =azertyuiopqsdfghjklmwxcvbnAZERTYUIOPQSDFGHJKLMWXCVBN,;:!?./ & \"'(- _  1234567890",
         str = "";
  while (text[i] != 0){
    str = str + (String)_en[_fr.indexOf((String)text[i++])];
  }
  return str;
}

Que fait cette fonction ?

La fonction "fr2en" reçoit un texte en paramètre et va remplacer chaque lettre Azerty par sa correspondance sur un clavier Qwerty.
Elle vous renverra ainsi le texte en Qwerty !

//Mon text en azerty
String text_azerty = "chrome https://dyrk.org";

//Conversion du texte azerty en qwerty => chro;e https.>>dyrk<org
String text_qwerty = fr2en(text);

//L'arduino simule le clavier et écrit => chrome https://dyrk.org
Keyboard.print(text_qwerty);

 

Exemple complet

Je sais que vous êtes tous complètement dingue du blog, et vu que vous avez tous un arduino Micro, alors je vous communique ce code ultra top confidentiel pour vous ouvrir automatiquement la page de mon blog lorsque vous brancherez votre arduino à votre ordinateur !

#include <Keyboard.h>
#include <stdlib.h>

void loop(){
  delay(15000);  
  runCmd(fr2en("chrome https://dyrk.org")+"\n");
}

String fr2en(String text){
  int i = 0;
  String _en = " =qwertyuiopasdfghjkl;zxcvbnQWERTYUIOPASDFGHJKL:ZXCVBNm,./M<>?1234567890!@#$%^&*()",
         _fr = " =azertyuiopqsdfghjklmwxcvbnAZERTYUIOPQSDFGHJKLMWXCVBN,;:!?./ & \"'(- _  1234567890",
         str = "";
  while (text[i] != 0){
    str = str + (String)_en[_fr.indexOf((String)text[i++])];
  }
  return str;
}

void runCmd(String cmd){
  int i = 0;
  Keyboard.begin();
  Keyboard.press(KEY_LEFT_GUI);
  Keyboard.press('r');
  Keyboard.releaseAll();
  delay(1000);
  while (cmd[i] != 0){
    Keyboard.write(cmd[i++]);
    delay(50);
  }
}


void setup(){
}

 

Petite astuce

Si vous souhaitez que votre Arduino émule un clavier, pensez à mettre quelques secondes de délais avant de démarrer.

delay(15000);

Pourquoi ?

Et bien tout simplement pour pouvoir reprogrammer votre Arduino !
Car si vous le programmez pour qu'il écrive directement, à peine branché sur l'ordinateur, vous ne pourrez plus mettre à jour le code ...

 

Conclusion

Il n'est pas nécessaire de débourser une fortune dans des clefs "Rubber Ducky" à 45 $
Un simple arduino micro vaut à peine 3€ sur AliExpress !

Bien entendu, je vous rappelle les règles :
Le piratage, hacking bref tout ce petit jargon, c'est mal !
Vous n'êtes autorisé à utiliser ces connaissances, que pour faire des blagues à vos amis, collègues ou à votre famille  ;)

NB:

Petite précision, la fonctionnalité "clavier" de l'Arduino ne gère pas tous les caractères, on oublie donc l'utilisation de caractère accentués ;)

 

Partagez ce contenu

One comment

  • Sympa, j’ai été confronté à ce soucis il n’y a pas si longtemps, il y a cependant une variante française à la librairie Keyboard (https://github.com/martin-leo/KeyboardAzertyFr)

    Cependant j’ai eu un soucis que je n’ai à ce jour toujours pas résolu (sauf sur mac, en partie…), je te mets au défi de réussir à taper un pipe « | ».

    Bon courage ! :D

     

Répondre à unknownx Annuler la réponse

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *