Arduino como USB HID (Português)

É possível construir um dispositivo HID (como um teclado) usando um Arduino uno?

Na época sendo, eu tenho entradas de botão no Arduino dando saídas na linha serial. Então, como posso transformar meu firmware atual em algo que pode se comportar como um teclado HID?

  • Devo escrever um novo driver de dispositivo de janela?
  • Devo criar um software camada que pode pegar meus dados seriais e fazer com que o Windows os leia como entrada HID?
  • Existe alguma maneira melhor de fazer isso, se é que é possível?

Comentários

  • Posso estar errado, mas não se trata realmente do Arduino. É sobre o desenvolvimento de driver de dispositivo do lado do Windows ' s.
  • Primeira resposta no google: mitchtech.net/arduino -usb-hid-keyboard … mas você não especificou qual Arduino. Em um Leonardo, ele ' é integrado e o driver apropriado já existe (consulte arduino.cc/en/Reference/MouseKeyboard).
  • Eu ' estou usando um Uno, mas ' vou olhar o que você postou porque da última vez, consideramos a atualização do DFU, mas ' estamos com medo de tijolos, pois os componentes não estão ' tão disponíveis e baratos em minha área como na maioria dos lugares.
  • @AsheeshR Este problema está em meta agora: meta.arduino.stackexchange.com/q/102/46
  • Bem, isso ' é definitivamente possível, já que o Arduino Uno apresenta um Atmega16u2 como chip de driver USB, o usuário pode usar DFU ou ICSP flashing para empurre no dispositivo um firmware próximo ao leonardo ' s que fará o Arduino se comportar como um teclado HID. Não há ' s nenhum desenvolvimento do Windows envolvido, nenhum driver a ser construído como dispositivos USB / HID são reconhecidos por padrão. ou seja, essa pergunta deve ser reaberta.

Resposta

É possível construir um dispositivo HID (como um teclado) usando um Arduino uno?

Sim, é! E há um ótimo tutorial sobre como fazer isso aqui

No Por enquanto, tenho entradas de botão no Arduino fornecendo saídas na linha serial. Então, como posso transformar meu firmware atual em algo que pode se comportar como um teclado HID?

Como mostra o tutorial, você precisa transformar o código do firmware para que, em vez de imprimir os eventos, você realmente os acione. O que você precisa fazer é adicionar ao seu 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); } 

O que você está fazendo aqui é enviar eventos do microcontrolador Arduino principal pela linha serial para o microcontrolador menor que trata da comunicação USB. Esse microcontrolador pegará esses “buffers” de chave e os transferirá como pressionamentos de tecla do teclado USB HID sobre USB.

Cuidado com o caractere chave (chr no código aqui ), é na verdade um código-chave enviado via USB que é interpretado pelo driver USB HID, que o traduz em um caractere real usando o layout atual que você configurou para o teclado.

O mod caractere é uma das teclas modificadoras que você tem no teclado (shift, control, alt …), 0x00 não sendo modificador.

  • Devo escrever um novo driver de dispositivo de janela?

Não, você não precisa! Com a atualização do DFU, seu arduino será visto como um teclado USB pelo Windows.

  • Devo criar uma camada de software que poderia levar meu serial dados e o Windows os lê como entrada HID?

Você não precisa fazer isso e, na verdade, é uma idéia muito ruim para muitos motivos:

  • sua solução não seria portátil e, portanto, você “precisaria hackear algo para cada plataforma que usar,
  • sua solução implicaria em muitos novo Código ; quanto mais código se escreve, mais bugs provavelmente estarão em seu sistema,
  • sua solução seria realmente hackeada, pois se comportaria como um driver de dispositivo (isto é, kernel do kernel ) recebendo a entrada de um programa do usuário (ou seja, user land ) e provavelmente não funcionará, será um inferno para depurar e estará sujeito a problemas de segurança … Se isso for possível fazer!

Estou usando um Uno, mas vou olhar o que você postou porque da última vez consideramos a atualização do DFU, mas estamos meio que com medo de bloquear coisas

Finalmente, você está se preocupando, em um comentário, sobre como bloquear seu arduino.Acredite em mim e no autor do artigo que você não pode brickar seu arduino fazendo um flash de firmware:

NOTA: Não há chance de brickar o dispositivo usando este método. O firmware do carregador de inicialização do Arduino sempre pode ser atualizado usando o protocolo DFU!

No caso de algo ficar muito errado e você receber uma corrupção do carregador de inicialização no pequeno AVR (atmega8u2), você ainda pode fazer o reflash ele usando outro arduino ou um programador atmel usando os 6 pinos próximos ao plugue USB.

No final, saiba que a apenas maneira de bloquear um AVR, portanto um Arduino também , é brincar com os fusíveis e reiniciar os fusíveis de programação. E mesmo assim, você pode usar HVSP para salvar seu dispositivo, embora “geralmente seja menos problemático apenas pegar um novo chip.

Comentários

  • Obrigado por todas as informações úteis, acabamos conseguindo isso.
  • Bem, a maneira correta de bloquear um AVR é com sobrecarga de sobretensão. Então, será torrado …
  • Mas então, ' não é chamado de bricking, mas de fritar ou, como você diz, torrá-lo. Coloque 15 amperes no MCU e aposto que ' o verá pular pela sala 😉
  • Como liberar uma tecla específica? Quero emular uma tecla HOLD então solta. E também no link, o personagem vai para o array [2] enquanto aqui vai para [1]. Por quê?
  • bem, como mostrado no meu exemplo, você faz isso em dois etapas, primeiro você pressiona a tecla, depois ' o atraso, então você o libera. Bem, então você ' d precisa dê uma palestra sobre como o teclado de hardware impleme ntação funciona, ela ' não é natural e cada valor da matriz tem um significado. Desculpe-me por não ter um link para compartilhar o atm, mas sempre que você encontrar algo pesquisando na web, poste um novo comentário ☺

Resposta

Eu criei um projeto que substitui totalmente o Arduino Bootloader. Você pode fazer upload de esboços e usá-los como HID. Veja o projeto HID no Github: https://github.com/NicoHood/HID

Comentários

  • Bem-vindo ao Arduino SE! Você pode acrescentar um pouco sobre como usar sua biblioteca? Obrigado!
  • Leia o leia-me e experimente os exemplos? Está tudo lá, não há necessidade de enganar tudo aqui. Tudo no Github está atualizado 🙂
  • Desculpe cara, parece uma biblioteca legal, mas sua documentação está faltando loucamente. Não há ' s nenhuma instrução de instalação real, tanto quanto eu posso dizer, e tópicos inteiros em seu wiki apenas diga " TODO " (especificamente o tópico do gamepad está completamente vazio assim). : – /
  • Na verdade, é necessário apresentar uma descrição básica aqui: as respostas devem ser significativas mesmo sem o link externo, que pode morrer. E este não é.

Deixe uma resposta

O seu endereço de email não será publicado. Campos obrigatórios marcados com *