Arduino como USB HID

¿Es posible construir un dispositivo HID (como un teclado) usando un Arduino uno?

En ese momento siendo, tengo entradas de botón en el Arduino que dan salidas en la línea serial. Entonces, ¿cómo puedo transformar mi firmware actual en algo que pueda comportarse como un teclado HID?

  • ¿Debo escribir un nuevo controlador de dispositivo de ventana?
  • ¿Debo crear un software capa que podría tomar mis datos seriales y hacer que Windows los lea como entrada HID?
  • ¿Hay alguna mejor manera de lograr esto, si es que es posible?

Comentarios

  • Puede que me equivoque, pero esto no se trata realmente de Arduino. Se trata del desarrollo del controlador de dispositivo lateral de Windows ' s.
  • Primera respuesta en google: mitchtech.net/arduino -usb-hid-keyboard … pero no especificó qué Arduino. En un Leonardo, está ' incorporado, y el controlador apropiado ya existe (consulte arduino.cc/en/Reference/MouseKeyboard).
  • Yo ' estoy usando un Uno, pero ' veré lo que publicaste porque la última vez consideramos la actualización de DFU, pero ' estamos un poco asustados de las cosas de ladrillos, ya que los componentes no ' t tan fácilmente disponibles y baratos en mi área como en la mayoría de los lugares.
  • @AsheeshR Este problema está en meta ahora: meta.arduino.stackexchange.com/q/102/46
  • Bueno, eso ' es definitivamente posible, ya que Arduino Uno cuenta con un Atmega16u2 como chip de controlador USB, el usuario puede usar DFU o ICSP para inserte en el dispositivo un firmware cercano al leonardo ' s que hará que Arduino se comporte como un teclado HID. No hay ' s sin desarrollo de Windows involucrado, no se reconoce ningún controlador para ser construido como dispositivos USB / HID por defecto. es decir, esa pregunta debe reabrirse.

Responder

¿Es posible construir un dispositivo HID (como un teclado) usando un Arduino uno?

¡Sí, lo es! Y hay un gran tutorial sobre cómo hacerlo en aquí

En el Ahora, tengo entradas de botón en el Arduino que dan salidas en la línea serial. Entonces, ¿cómo puedo transformar mi firmware actual en algo que pueda comportarse como un teclado HID?

Como le muestra el tutorial, necesita transformar su código de firmware para que en lugar de imprimir los eventos, en realidad active eventos. Lo que debe hacer es agregar a su código:

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); } 

Lo que estás haciendo aquí es enviar desde tu principal microcontrolador Arduino eventos a través de la línea serial al microcontrolador más pequeño que maneja la comunicación USB. Ese microcontrolador tomará esos «búferes» clave y los transferirá cuando se presione la tecla del teclado USB HID a través de USB.

Tenga cuidado con el carácter clave (chr en el código aquí ), es en realidad un código de tecla enviado a través de USB que es interpretado por su controlador USB HID, que luego lo traduce a un carácter real utilizando el diseño actual que ha configurado para su teclado.

El mod es una de las teclas modificadoras que tiene en el teclado (shift, control, alt …), 0x00 sin modificador.

  • ¿Debo escribir un nuevo controlador de dispositivo de ventana?

¡No, no es necesario! Con la actualización de DFU, Windows verá su arduino como un teclado USB.

  • ¿Debo crear una capa de software que pueda tomar mi y que Windows los lea como entrada HID?

No es necesario que haga eso, y en realidad es una muy mala idea para muchas razones:

  • su solución no sería portátil y, por lo tanto, necesitaría piratear algo para cada plataforma que pueda usar,
  • su solución implicaría una gran cantidad de nuevo código ; cuanto más código se escribe, es probable que haya más errores en su sistema,
  • su solución sería realmente pirateada, ya que se comportaría como un controlador de dispositivo (es decir, kernel land ) tomando información de un programa de usuario (es decir, tierra de usuario ) y es probable que no funcione, sea un infierno de depurar y propenso a problemas de seguridad … ¡Si eso es posible!

Estoy usando un Uno, pero veré lo que publicaste porque la última vez consideramos la actualización de DFU, pero un poco asustado de las cosas de bricking

Finalmente, en un comentario, estás teniendo preocupaciones acerca de bricking en tu arduino.Créanme a mí y al autor del artículo que usted no puede bloquee su arduino haciendo un flash de firmware:

NOTA: No hay posibilidad de bloquear el dispositivo usando este método. ¡El firmware del cargador de arranque Arduino siempre se puede actualizar usando el protocolo DFU!

En caso de que algo salga realmente mal y se dañe el cargador de arranque en el pequeño AVR (atmega8u2), aún puede volver a flashear usando otro arduino o un programador atmel usando los 6 pines al lado del enchufe USB.

Al final, sepa que la única forma de bloquear un AVR, por lo tanto, un Arduino también , es jugar con los fusibles y resetear los fusibles de programación. E incluso entonces, puede usar HVSP para guardar su dispositivo, aunque a menudo es menos problemático tomar un chip nuevo.

Comentarios

  • Gracias por toda la información útil, terminamos logrando esto.
  • Bueno, la forma correcta de bloquear un AVR es con over current / Luego se tostará …
  • Pero entonces, ' no se le llama bricolaje, sino frito, o como usted dice tostado. Pon 15 amperios a través del MCU, y te apuesto a que ' lo verás saltar por la habitación 😉
  • ¿Cómo liberar una tecla específica? Quiero emular una tecla MANTENGA y luego suelte. Y también en el enlace, el carácter va a la matriz [2] mientras que aquí va a [1]. ¿Por qué?
  • Bueno, como se muestra en mi ejemplo, lo haces en dos pasos, primero presionas la tecla, luego ' s el retraso, luego lo sueltas. Bueno, entonces ' deberías dé una conferencia sobre cómo se implementa el teclado de hardware ntation funciona, ' no es natural, y cada valor de la matriz tiene un significado. Disculpe por no tener un enlace para compartir cajero automático, pero cada vez que encuentre algo en la web, publique un nuevo comentario ☺

Responder

Creé un proyecto que reemplaza por completo al Arduino Bootloader. Puede cargar bocetos y usarlo como HID. Ver Proyecto HID en Github: https://github.com/NicoHood/HID

Comentarios

  • ¡Bienvenido a Arduino SE! ¿Puedes agregar un poco sobre cómo usar tu biblioteca? ¡Gracias!
  • ¿Leer el archivo Léame y probar los ejemplos? Todo está ahí, no hay necesidad de engañar a todo aquí. Todo en Github está actualizado 🙂
  • Lo siento amigo, parece una biblioteca genial, pero tu documentación es una locura. Hasta donde yo sé, no hay ' instrucciones de instalación reales, y los temas completos de tu wiki solo dicen " TODO " (específicamente, el tema del mando está completamente vacío de esta manera). : – /
  • En realidad, es necesario presentar una descripción básica aquí: las respuestas deben ser significativas incluso sin el enlace externo, que podría morir. Y este no lo es.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *