Arduino comme USB HID

Est-il possible de construire un appareil HID (comme un clavier) à laide dun Arduino uno?

À lépoque étant, jai des entrées de bouton sur lArduino 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?

  • Dois-je écrire un nouveau pilote de périphérique Windows?
  • Dois-je créer un logiciel couche qui pourrait prendre mes données de série et faire en sorte que Windows les lise comme une entrée HID?
  • Y a-t-il un meilleur moyen dy parvenir, si cest possible?

Commentaires

  • Je me trompe peut-être, mais ce nest pas vraiment à propos dArduino. Il s’agit du développement du pilote de périphérique côté Window '.
  • Première réponse dans Google: mitchtech.net/arduino -usb-hid-keyboard … mais vous navez pas spécifié quel Arduino. Sur un Leonardo, il ' est intégré et le pilote approprié existe déjà (voir arduino.cc/en/Reference/MouseKeyboard).
  • Je ' m en utilisant un Uno, mais je ' regarder ce que vous avez publié parce que la dernière fois que nous avons envisagé la mise à jour DFU, mais ' nous avons un peu peur des briques car les composants ne sont pas ' aussi facilement disponibles et bon marché en ma région comme dans la plupart des endroits.
  • @AsheeshR Ce numéro est sur meta now: meta.arduino.stackexchange.com/q/102/46
  • Eh bien, cela ' est tout à fait possible, car lArduino Uno dispose dun Atmega16u2 comme puce de pilote USB, lutilisateur peut utiliser DFU ou ICSP clignotant pour pousser sur lappareil un firmware proche du leonardo ' s qui fera se comporter lArduino comme un clavier HID. Il ny a ' aucun développement Windows impliqué, aucun pilote à construire en tant que périphériques USB / HID nest reconnu par défaut. cest-à-dire que cette question doit être rouverte.

Réponse

Est-il possible de construire un appareil HID (comme un clavier) en utilisant un Arduino uno?

oui cest! Et voici « un excellent tutoriel sur la façon de faire cela sur ici

À la à lheure actuelle, jai des entrées de bouton sur lArduino 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 le code de votre micrologiciel afin quau lieu dimprimer les événements, vous déclenchiez en fait des événements. Ce que vous devez faire, cest 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, cest denvoyer les événements de votre microcontrôleur Arduino principal via la ligne série vers le plus petit microcontrôleur qui gère la communication USB. Ce microcontrôleur prendra ces « tampons » clés et les transférera en tant que touches du clavier USB HID pressées via USB.

Attention au caractère clé (chr dans le code ici ), est en fait un code clé envoyé via USB qui est interprété par votre pilote USB HID, qui le traduit ensuite en un caractère réel en utilisant la disposition actuelle que vous avez configurée pour votre clavier.

Le mod est lune des touches de modification que vous avez sur le clavier (shift, control, alt …), 0x00 nétant aucun modificateur.

  • Dois-je écrire un nouveau pilote de périphérique Windows?

Non, vous nen avez pas besoin! Avec la mise à niveau DFU, votre arduino sera vu comme un clavier USB par Windows.

  • Dois-je créer une couche logicielle qui pourrait prendre mon série données et que Windows les lit en tant qu’entrée HID?

Vous n’avez pas besoin de faire cela, et c’est en fait une très mauvaise idée pour de nombreuses raisons:

  • votre solution ne serait pas portable, et vous auriez donc besoin de pirater quelque chose pour chaque plate-forme que vous pouvez utiliser,
  • votre solution impliquerait beaucoup de nouveau code; plus on écrit de code, plus il y aura de bogues dans votre système,
  • votre solution serait vraiment hackish, car elle se comporterait comme un pilote de périphérique (cest-à-dire kernel land ) prenant les entrées dun programme utilisateur (cest-à-dire user land ) et est susceptible de ne pas fonctionner, être un enfer à déboguer, et sujette à des problèmes de sécurité … Si cela est même possible!

Jutilise un Uno, mais je vais regarder ce que vous avez publié car la dernière fois, nous avons envisagé la mise à jour DFU, mais nous « re un peu peur des trucs de briques

Enfin, vous avez des inquiétudes, dans un commentaire, à propos de la brique de votre arduino.Sil vous plaît, croyez moi et lauteur de l article que vous ne pouvez pas briquez votre arduino en faisant un firmware flash:

REMARQUE: Il ny a aucune chance de «briser» lappareil en utilisant cette méthode. Le firmware du chargeur de démarrage Arduino peut toujours être mis à jour en utilisant le protocole DFU!

Si quelque chose ne va vraiment pas, et que vous obtenez une corruption du chargeur de démarrage dans le petit AVR (atmega8u2), vous pouvez toujours reflasher il en utilisant un autre arduino ou un programmeur atmel en utilisant les 6 broches à côté de la prise USB.

En fin de compte, sachez que la uniquement façon de bricker un AVR, donc un Arduino aussi , 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 quil soit souvent moins difficile de simplement prendre une nouvelle puce.

Commentaires

  • Merci pour toutes les informations utiles, nous avons fini par y parvenir.
  • Eh bien, la bonne façon de brique un AVR est avec over current / Surtension. Ensuite, il sera grillé …
  • Mais alors, cela ' ne sappelle pas de la brique, mais le fait frire, ou comme vous dites le griller. Mettez 15 ampères dans le MCU et je parie que vous ' le verrez sauter à travers la pièce 😉
  • Comment libérer une clé spécifique? Je veux émuler une touche HOLD puis relâchez. Et aussi dans le lien, le caractère va au tableau [2] alors quici va à [1]. Pourquoi?
  • eh bien, comme le montre mon exemple, vous le faites en deux étapes, vous appuyez dabord sur la touche, puis ' s le délai, puis vous le relâchez. Eh bien, alors vous ' devez vous expliquer comment implémentent le clavier matériel ntation fonctionne, elle ' nest pas naturelle, et chaque valeur du tableau a une signification. Pardonnez-moi de ne pas avoir de lien pour partager un guichet automatique, mais chaque fois que vous trouvez quelque chose en train de rechercher sur le Web, veuillez publier un nouveau commentaire ☺

Réponse

Jai créé un projet qui remplace complètement le chargeur de démarrage Arduino. Vous pouvez télécharger des croquis et les utiliser comme HID. Voir Project HID sur Github: https://github.com/NicoHood/HID

Commentaires

  • Bienvenue dans Arduino SE! Pouvez-vous ajouter un peu comment utiliser votre bibliothèque? Merci!
  • Lire le readme et essayer les exemples? Tout est là, pas besoin de tout duper ici. Tout sur Github est à jour 🙂
  • Désolé mec, cela ressemble à une bibliothèque sympa, mais votre documentation manque complètement. Il ny a ' aucune véritable instruction dinstallation pour autant que je sache, et des sujets entiers dans votre wiki disent simplement " TODO " (spécifiquement le sujet de la manette de jeu est complètement vide comme ça). : – /
  • En fait, il est nécessaire de présenter une description de base ici: les réponses doivent être significatives même sans le lien externe, qui pourrait mourir. Et celui-ci ne lest pas.

Laisser un commentaire

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