Utiliser votre Arduino Uno pour simuler les touches d’un clavier !

 

Hello Hello jeune Padawan,

 

Je suis récemment tombé sur un article qui permettait de recycler votre précieux Arduino, en Clavier "programmé" ...

 

Tout d'abord, à quoi cela peut-il bien servir ?

Je dirais que vous pourriez faire des blagues à vos amis ...

 

Mais d'un coté pratique ...

Vous pourriez tester la sécurité de votre entreprise, en laissant traîner
votre Arduino (emballé comme un disque externe), voir si des personnes
curieuses, le bancheraient sur leurs ordinateurs professionnels ...

 

Sous entendu :

  • Vous programmez l'arduino
  • Vous le branchez sur un ordinateur
  • L'ordinateur détecte l'arduino comme un clavier
  • L'arduino fait croire à l'ordinateur que vous tapez sur le clavier

Je croyais jusqu'à il n'y a pas si longtemps que ça, que transformer un Arduino en clavier, n'était possible que pour une certaine gamme d'Arduino tel que l'ATMEGA328P :

sku_396797_1

 

Mais non il est visiblement possible de le faire depuis un Arduino Uno

Pour cela :

  • Il vous faudra mettre à jour son "firmware", vous allez donc télécharger cette archive "TurnArduinoToKeyboard"
  • Ubuntu /Debian : Installer les paquets nécessaire
sudo apt-get install dfu-programmer dfu-util

 

Vous allez ensuite extraire les 2 fichiers contenu dans l'archive que je vous ai préalablement fait télécharger.

 

Petite précision, pour les étapes suivantes, il faudra mettre votre Arduino en mode DFU (cf. Google, car cela dépend de la révision de votre Arduino : R1, R2, R3)

Nous allons maintenant vérifier notre environnement est ok, et que nous pouvons "flasher" notre Arduino Uno:

 

sudo dfu-programmer at90usb82 erase
sudo dfu-programmer at90usb82 flash --debug 1 Arduino-usbserial.hex
sudo dfu-programmer at90usb82 reset

Si tout ce passe bien, nous allons ensuite pouvoir procéder au flashage  !

 

sudo dfu-programmer at90usb82 erase
sudo dfu-programmer at90usb82 flash --debug 1 Arduino-keyboard-0.3.hex
sudo dfu-programmer at90usb82 reset

 

ATTENTION :
Lorsque votre Arduino est flashé avec "
Arduino-keyboard-0.3.hex", vous ne pouvez pas développer dessus, c'est reconnu comme un "Clavier".
Si vous souhaiter modifier votre code, il vous faudra le flasher avec
 "Arduino-usbserial.hex" (cf. ci-dessus : erase flash reset)
Puis le
 flasher depuis l'IDE.
Et enfin, dès que vous aurez fini de développer dessus, le reflasher avec "
Arduino-keyboard-0.3.hex(cf. ci-dessus : erase flash reset)

 

Voilà maintenant ce que l'on peut faire coté Développement !
Je ne détaillerais pas plus, je pense avoir suffisamment commenté le code pour que vous puissiez comprendre comment ça marche ;)

 

/* Arduino USB HID Keyboard Demo
 * Random Key/Random Delay
 */

//Keyboard report buffer
uint8_t buf[8] = { 0 }; 	


//Initialisation
void setup() 
{
  Serial.begin(9600);
  randomSeed(analogRead(0));
  delay(200);
}


//programme principale
void loop() 
{
  int randomChar = random(4, 130);
  long randomDelay = random(1000, 10000);

  delay(randomDelay);     // Délais aléatoire
  buf[2] = randomChar;	  // Touche aléatoire
  Serial.write(buf, 8);	  // Appuis sur la touche
  releaseKey();           // Relache la touche 
}


//Relache d'une touche
void releaseKey() 
{
  buf[0] = 0; buf[2] = 0;
  Serial.write(buf, 8);	// signale que l'on relache la touche  
}

 

Partagez ce contenu

14 comments

  • C’est super ca , je vais pouvoir me faire une « box à code » : je met des boutons poussoir sur l’arduino, pour ma session, facebook, gmail, ftp, etc et quand j’appuie sur le bon bouton, ca rempli le champ code automatiquement …

    • Yep l’idée est sympa ;)
      Après à toi de protéger quand même ta box à code :D Si quelqu’un ouvre simplement un bloc note et appuis sur les boutons … il récupérera tes codes :/

  • Suite à quelques test et recherches que j’ai effectuées, je pense qu’ils y a quelques précisions à faire dans votre article.

    Il existe des cartes arduino (Leonardo, Zéro, micro …) qui peuvent simuler un périphérique USB de base, mais ce n’est pas le cas des cartes à base de ATMEGA328P.
    De plus, la carte qui vous sert d’illustration actuellement dans cet article est un Arduino Nano et ce derniers n’est pas comptable avec l’astuce que vous nous présentez.

    Cette astuce fonctionne exclusivement avec soit un arduino UNO, soit un arduino MEGA. En effet, ceux-ci se servent d’un second µcontrolleur (en plus du principal) comme interface USB. Il s’agit du ATMEGA 8U2 ou 16U2, et c’est à ce dernier que l’on modifie le firmware.
    Pour les version « chinoise » des cartes, il faut vérifié au cas par cas si le second µcontrolleur est bien présent.
    Personnellement je possède 2 arduino UNO chinois (en plus d’un officiel), et il y en dont le µcontrolleur a été remplacé par une autre puce (CH340G).

  • Bonjour, j’ai un problème. Le terminal me dit:
    dfu-programmer: no device present
    Je suis sur Mac, j’ai bien brancher l’arduino.
    Merci d’avance

  • Bonjour,
    Super tuto, je suis content de pouvoir faire ça avec mon arduino.
    J’ai des questions sur le code que vous présentez, en particulier le buffer du clavier (variable buf[]).
    Je ne sais pas trop comment le remplir pour simuler l’appui simultanée de plusieurs touches, où puis-je trouver de la doc dessus?
    Pourquoi dans releaseKey() mettez-vous buf[0] à 0, il ne me semble pas qu’il soit modifier ailleurs ?

    Merci d’avance et bonne continuation.

  • Bonjour,
    Merci beaucoup pour votre tutoriel. J’ai besoin d’un peu d’aide pour un projet minecraft : simuler les touches avancer de mon clavier. Je veux que dès que je scanne un tag NFC Rfid ( 1 bloc) , le personnage sur Minecraft avance d’un bloc si je scanne le tag nfc rfid (2 blocs) le personnage avance de 2 blocs et l’arduino simule 2 fois le bouton avancer etc … la reconnaissance d’un tag rfid n’est pas un problème mais je n’arrive pas à trouver un code pour simuler la touche « avancer ».Est-ce possible avec un Arduino Uno ? Ou avec un Arduino Leonardo ?
    Je suis vraiment perdu et c’est vraiment un projet important.
    Merci d’avance

  • Bonjour,

    J’ai un problème avec l’application de ce tuto.

    En effet le caractère entré dans le buffer ne correspond pas à celui retourné par le « clavier ».

    Exemple :

    Si je rentre 97 dans le buffer, soit le caractère ‘a’, le clavier simulé me renvoie le caractère ‘9’ (57 en ASCII).

    Je ne comprends vraiment pas d’où cela peut venir.

     

    Merci d’avance.

    • Bonjour!

      Exactement le même problème pour moi, c’est vraiment embêtant§

      J’essaie de mon côté et vous tient au courant, avez-vous trouvé une solution?

Laisser une réponse

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