¿Es posible construir un dispositivo HID (como un teclado) usando un Arduino uno?
¡sí lo es! Y hay un gran tutorial sobre cómo hacer eso aquí
Por el momento, tengo entradas de botón en el Arduino que dan salidas en la línea serie. Entonces, ¿cómo puedo transformar mi firmware actual en algo que pueda comportarse como un teclado HID?
Como muestra el tutorial, debe transformar su código de firmware para que, en lugar de imprimir los eventos, desencadene 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á haciendo aquí es enviar desde sus eventos principales del microcontrolador Arduino a través de la línea serie al microcontrolador más pequeño que maneja la comunicación USB. Ese microcontrolador tomará esas "memorias intermedias" de teclas y las transferirá a medida que se presione la tecla del teclado USB HID sobre USB.
Tenga en cuenta que el carácter clave ( chr
en el código aquí), es en realidad un código clave enviado a través de USB que es interpretado por su controlador HID USB, que luego se traduce en un carácter real utilizando el diseño actual que ha configurado para su teclado.
El mod
personaje es una de las teclas modificadoras que tiene en el teclado (shift, control, alt ...), 0x00
no siendo modificador.
- ¿Debo escribir un nuevo controlador de dispositivo de Windows?
¡No, no necesitas! Con la actualización de DFU, su arduino será visto como un teclado USB por Windows.
- ¿Debo crear una capa de software que pueda tomar mis datos en serie y hacer que Windows los lea como entrada HID?
Tampoco necesita hacer eso, y en realidad es una muy mala idea por 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 mucho código nuevo; cuanto más código escriba uno, es probable que haya más errores en su sistema,
- su solución sería realmente hostil, ya que se comportaría como un controlador de dispositivo (es decir, tierra del kernel ) que recibe información de un programa de usuario (es decir, tierra del usuario ) y es probable que no funcione, sea un infierno de depuración y propenso a problemas de seguridad. .. Si eso es posible!
Estoy usando un Uno, pero miraré lo que publicaste porque la última vez que consideramos la actualización de DFU pero tenemos un poco de miedo a las cosas de ladrillo
Finalmente, tiene dudas, en un comentario, sobre bloquear su arduino. Por favor, créame y al autor del artículo que no puede bloquear su arduino haciendo un flash de firmware:
NOTA: No hay posibilidad de "bloquear" el dispositivo con este método. ¡El firmware del cargador de arranque Arduino siempre se puede actualizar utilizando el protocolo DFU!
En caso de que algo salga muy mal y se dañe el cargador de arranque en el pequeño AVR (atmega8u2), aún puede volver a flashearlo 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 también un Arduino, es jugar con los fusibles y restablecer los fusibles de programación. E incluso entonces, puede usar
HVSP para guardar su dispositivo, aunque a menudo es menos problemático simplemente tomar un nuevo chip.