Est-il possible de construire un appareil HID (comme un clavier) en utilisant un Arduino uno?
Oui, ça l'est! Et il y a un excellent tutoriel sur la façon de le faire ici
À l'heure actuelle, j'ai des entrées de bouton sur l'Arduino donnant des sorties sur la ligne série. Alors, comment puis-je transformer mon firmware actuel en quelque chose qui peut se comporter comme un clavier HID?
Comme le didacticiel vous le montre, vous devez transformer votre code de micrologiciel afin qu'au lieu d'imprimer les événements, vous déclenchiez réellement des événements. Ce que vous devez faire, c'est ajouter à votre code:
void triggerKey(uint8_t mod, uint8_t chr) {
uint8_t buf[8] = {mod, chr, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
// press key
Serial.write(buf, 8);
// emulate key press delay
delay(10);
buf[1] = 0x00;
// release key
Serial.write(buf, 8);
}
Ce que vous faites ici, c'est envoyer de vos principaux événements de microcontrôleur Arduino sur la ligne série au plus petit microcontrôleur qui gère la communication USB. Ce microcontrôleur prendra ces "tampons" de touches et les transférera lorsque les touches du clavier USB HID seront pressées via USB.
Attention, le caractère clé ( chr
dans le code ici) est en fait un code clé envoyé via USB qui est interprété par votre pilote HID USB, qui le traduit ensuite en un vrai caractère en utilisant la disposition actuelle que vous avez configurée pour votre clavier.
Le mod
personnage est l'une des touches de modification que vous avez sur le clavier (shift, control, alt ...), 0x00
étant aucun modificateur.
- Dois-je écrire un nouveau pilote de périphérique de fenêtre?
Non, tu n'as pas besoin! Avec la mise à niveau DFU, votre Arduino sera considéré comme un clavier USB par Windows.
- Dois-je créer une couche logicielle qui pourrait prendre mes données série et demander à Windows de les lire comme entrée HID?
Vous n'avez pas besoin de le faire, et c'est en fait une très mauvaise idée pour plusieurs raisons:
- votre solution ne serait pas portable, et donc vous auriez besoin de pirater quelque chose pour chaque plate-forme que vous pourriez utiliser,
- votre solution impliquerait beaucoup de nouveau code; plus il y a de code à écrire, plus il y aura probablement de bogues dans votre système,
- votre solution serait vraiment piratée, car elle se comporterait comme un pilote de périphérique (c.-à-d. la terre du noyau ) qui prend les données d'un programme utilisateur (c.-à-d. la terre des utilisateurs ) et ne fonctionnera probablement pas, sera un enfer à déboguer et sujet à des problèmes de sécurité. .. Si c'est même possible de le faire!
J'utilise un Uno, mais je vais regarder ce que vous avez publié parce que la dernière fois que nous avons envisagé la mise à jour de DFU, mais nous avons un peu peur des briques
Enfin, vous avez des inquiétudes, dans un commentaire, à propos de la brique de votre arduino. S'il vous plaît, croyez-moi et l'auteur de l' article que vous ne pouvez pas briquer votre arduino en faisant un flash de firmware:
REMARQUE: il n'y a aucune chance de «bricker» l'appareil à l'aide de cette méthode. Le firmware du chargeur de démarrage Arduino peut toujours être mis à jour en utilisant le protocole DFU!
Dans le cas où quelque chose se passe vraiment mal et que vous obtenez une corruption du chargeur de démarrage dans le petit AVR (atmega8u2), vous pouvez toujours le reflasher en utilisant un autre arduino ou un
programmeur atmel en utilisant les 6 broches à côté de la prise USB.
Au final, sachez que le seul moyen de briquer un AVR, donc un Arduino également, est de jouer avec les fusibles et de réinitialiser les fusibles de programmation. Et même dans ce cas, vous pouvez utiliser
HVSP pour enregistrer votre appareil, bien qu'il soit souvent moins difficile de simplement prendre une nouvelle puce.