Arduino UNO를 사용하여 키보드와 같은 HID 장치를 만들 수 있습니까?
현재 Arduino의 버튼 입력이 직렬 라인에 출력됩니다. 그렇다면 현재 펌웨어를 HID 키보드처럼 작동 할 수있는 것으로 어떻게 변환 할 수 있습니까?
- 새 윈도우 장치 드라이버를 작성해야합니까?
- 직렬 데이터를 가져 와서 창에서 HID 입력으로 읽을 수있는 소프트웨어 계층을 만들어야합니까?
- 가능하다면 이것을 달성하는 더 좋은 방법이 있습니까?
Arduino UNO를 사용하여 키보드와 같은 HID 장치를 만들 수 있습니까?
현재 Arduino의 버튼 입력이 직렬 라인에 출력됩니다. 그렇다면 현재 펌웨어를 HID 키보드처럼 작동 할 수있는 것으로 어떻게 변환 할 수 있습니까?
답변:
Arduino UNO를 사용하여 키보드와 같은 HID 장치를 만들 수 있습니까?
네! 그리고 여기에 그것을하는 방법에 대한 훌륭한 튜토리얼이 있습니다.
현재 Arduino의 버튼 입력이 직렬 라인에 출력됩니다. 그렇다면 현재 펌웨어를 HID 키보드처럼 작동 할 수있는 것으로 어떻게 변환 할 수 있습니까?
튜토리얼에서 알 수 있듯이 이벤트를 인쇄하는 대신 펌웨어 코드를 변환해야 실제로 이벤트가 트리거됩니다. 당신이해야 할 일은 코드에 추가하는 것입니다.
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);
}
여기서하는 일은 직렬 회선을 통해 메인 Arduino 마이크로 컨트롤러 이벤트에서 USB 통신을 처리하는 더 작은 마이크로 컨트롤러로 전송하는 것입니다. 해당 마이크로 컨트롤러는 이러한 키 "버퍼"를 가져와 USB HID 키보드 키를 USB로 누를 때 전송합니다.
키 문자 ( chr
여기 코드에서)는 실제로 USB를 통해 전송 된 키 코드이며 USB HID 드라이버가 해석 한 다음 키보드에 대해 설정 한 현재 레이아웃을 사용하여 실제 문자로 변환합니다.
mod
문자, 키보드 (교대, 제어, 고도 ...)에있는 수정 키 중 하나입니다 0x00
아무 수정되는 없습니다.
- 새 윈도우 장치 드라이버를 작성해야합니까?
아니요, 필요 없습니다! DFU 업그레이드를 사용하면 arduino가 Windows에서 USB 키보드로 표시됩니다.
- 직렬 데이터를 가져 와서 창에서 HID 입력으로 읽을 수있는 소프트웨어 계층을 만들어야합니까?
그렇게 할 필요는 없으며 여러 가지 이유로 실제로 매우 나쁜 생각입니다.
Uno를 사용하고 있지만 지난번에 DFU 업데이트를 고려했기 때문에 게시 한 내용을 살펴볼 것입니다.
마지막으로, 아두 이노를 브릭 킹하는 것에 대한 의견이 있습니다. 저와 기사 의 저자가 펌웨어 플래시를 수행하는 arduino를 벽돌로 만들 수 없다고 생각 하십시오.
참고 :이 방법을 사용하여 장치를 '브레이킹'할 가능성은 없습니다. Arduino 부트 로더 펌웨어는 항상 DFU 프로토콜을 사용하여 업데이트 할 수 있습니다!
무언가가 심하게 잘못되어 작은 AVR (atmega8u2)에서 부트 로더 손상이 발생하더라도 다른 arduino 또는 atmel 프로그래머를 사용하여 USB 플러그 옆에있는 6 핀을 사용 하여 다시 부팅 할 수 있습니다 .
결국 Arduino와 마찬가지로 AVR을 브릭 킹 하는 유일한 방법은 퓨즈를 사용하여 프로그래밍 퓨즈를 재설정하는 것입니다. 그럼에도 불구하고 HVSP 를 사용하여 장치를 절약 할 수 있지만 새로운 칩을 가져 오는 데 어려움이없는 경우가 많습니다.
Arduino Bootloader를 완전히 대체하는 프로젝트를 만들었습니다. 스케치를 업로드하여 HID로 사용할 수 있습니다. Github의 Project HID를 참조하십시오 : https://github.com/NicoHood/HID