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 :
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
- Windows : Suivre la doc officiel et installer la dfu-programmer tool (http://arduino.cc/en/Hacking/DFUProgramming8U2)
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 ;)
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 :/
Personnellement j’avais comme idée d’y combiner un lecteur d’empreinte digitale.
Avec ça, la « box à code » est largement sécurisée (sauf si qqun s’amuse à fouiller dans le code de l’arduino, ou à se prendre pour Les Experts avec mon verre d’eau ^^). 10 doigt = 10 password !
Attention :)
https://dyrk.org/2016/08/17/systeme-embarque-recuperer-des-codes-secrets/
Il faudrait donc que le password soit calculé à partir de mon empreinte (genre un hash MD5) et non stocké… Comme ça même si on arrive à récupérer le code source de l’arduino, tout ce que l’on aura c’est la « recette » du password. Sans l’ingrédient de base (mon doigt), ça sert à rien.
Yep, dans ce cas il ne faudrait aucune vérification de l’empreinte (pour ne pas avoir à la stocker) ^^
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).
Merci Bynaris pour ces précisions :)
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
Salut, il faut que ton arduino soit en mode dfu, sur le tuto suivant ya une image pour s’y retrouver : http://cjdavies.org/?tag=atmega16u2
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?
Bonjour je voudrais aussi émuler un clavier avec des boutons sur une Arduino MEGA pour pouvoir faire bouger des Switch dans un simulateur d’avion j’ai donc dis au switchs de presse des touches qui permettent de faire bouger le Switch dans le cockpit. Est il possible de le faire avec ce que vous avez détaillé ci dessus
Je suis sur Windows 10
Merci par avance de votre réponse
Bonjour, je suis nouveau de le domaine de la programmation plus particulièrement dans l’Arduino et voyez vous je ne comprend pas tout ce tuto notamment le façon dont on doit télécharger le firmware dans l’Arduino Merci de me répondre au plus vite.