USB HID로서의 Arduino

Arduino uno를 사용하여 키보드와 같은 HID 장치를 구축 할 수 있습니까?

당시 즉, Arduino에 직렬 라인에 출력을 제공하는 버튼 입력이 있습니다. 그렇다면 현재 펌웨어를 HID 키보드처럼 작동 할 수있는 것으로 어떻게 변환 할 수 있습니까?

  • 새 윈도우 장치 드라이버를 작성해야합니까?
  • 소프트웨어를 만들어야합니까? 내 직렬 데이터를 가져와 창에서 HID 입력으로 읽도록 할 수있는 레이어입니까?
  • 가능하다면 더 나은 방법이 있습니까?

의견

  • 내가 틀렸을 수도 있지만 이것은 Arduino에 관한 것이 아닙니다. Window '의 사이드 장치 드라이버 개발에 관한 것입니다.
  • Google의 첫 번째 답변 : mitchtech.net/arduino -usb-hid-keyboard …하지만 Arduino를 지정하지 않았습니다. Leonardo에서는 '에 내장되어 있고 적절한 드라이버가 이미 존재합니다 ( arduino.cc/en/Reference/MouseKeyboard ).
  • ' Uno를 사용하고 있지만 ' 게시 한 내용을 살펴볼 것입니다. 지난번에 DFU 업데이트를 고려했지만 ' 구성 요소가 쉽게 구할 수 있고 저렴하지 않기 때문에 ' 대부분의 지역에서와 마찬가지로 내 영역입니다.
  • @AsheeshR이 문제는 현재 메타에 있습니다. meta.arduino.stackexchange.com/q/102/46
  • 글쎄요. ' 확실히 가능합니다. Arduino Uno는 USB 드라이버 칩으로 Atmega16u2를 제공하므로 사용자는 DFU 또는 ICSP 플래시를 사용할 수 있습니다. 아두 이노가 HID 키보드처럼 작동하도록하는 레오나르도 '에 가까운 펌웨어를 기기에 밀어 넣습니다. ' 관련된 Windows 개발이 없으며 USB / 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 문자는 키보드에있는 수정 자 키 (shift, control, alt …) 중 하나이며 0x00는 수정자가 아닙니다.

  • 새 윈도우 장치 드라이버를 작성해야합니까?

아니요, 필요 없습니다! DFU 업그레이드를 사용하면 arduino가 Windows에서 USB 키보드로 표시됩니다.

  • 내 시리얼을 사용할 수있는 소프트웨어 레이어를 만들까요? 데이터를 확인하고 창에서 HID 입력으로 읽도록 하시겠습니까?

그렇게 할 필요도 없으며 실제로는 매우 나쁜 생각입니다. 여러 가지 이유 :

  • 솔루션은 이식성이 없으므로 “사용할 수있는 모든 플랫폼에 대해 뭔가를 해킹해야합니다.
  • 솔루션은 새 코드; 한 번에 더 많은 코드를 작성할수록 시스템에 더 많은 버그가있을 수 있습니다.
  • 솔루션은 장치 드라이버로 작동하므로 (예 : 커널 랜드 ) 사용자 프로그램 (예 : 사용자 영역 )에서 입력을 받고 작동하지 않을 가능성이 높고, 디버그하기가 끔찍하고 보안 문제가 발생하기 쉽습니다 … 가능하다면!

저는 Uno를 사용하고 있지만 지난번에 DFU 업데이트를 고려했지만 게시 한 내용을 살펴 보겠습니다. 벽돌 쌓기 작업이 좀 무서워요.

마지막으로 여러분은 arduino를 벽돌 쌓는 것에 대한 의견이 있습니다.나와 기사 의 작성자는 할 수 없습니다 펌웨어 플래시를 수행하는 arduino 브릭 :

참고 :이 방법을 사용하여 장치를 브릭 킹할 가능성은 없습니다. Arduino 부트 로더 펌웨어는 항상 DFU 프로토콜을 사용하여 업데이트 할 수 있습니다!

무언가 잘못되어 작은 AVR (atmega8u2)에서 부트 로더 손상이 발생하는 경우에도 여전히 다시 플래시 할 수 있습니다. USB 플러그 옆에있는 6 개의 핀을 사용하여 다른 arduino를 사용 하거나 atmel 프로그래머 를 사용합니다.

결국, AVR을 브릭하는 방식으로 아두 이노도 마찬가지입니다. , 퓨즈로 재생하고 프로그래밍 퓨즈를 재설정하는 것입니다. 그런 다음에도 HVSP 를 사용하여 기기를 저장할 수 있지만 새 칩을 가져 오는 것이 문제가 적은 경우가 많습니다.

댓글

  • 유용한 정보를 모두 제공해 주셔서 감사합니다. 결국이를 달성했습니다.
  • AVR을 브릭하는 올바른 방법은 과전류 / 과전압입니다. 그러면 구워집니다 …
  • 하지만 ' 그런 다음에는 브릭 킹이라고 부르지 않고 튀기거나 토스트한다고합니다. MCU를 통해 15amp를 넣으면 ' 방을 통해 점프하는 것을 보게 될 것입니다;-)
  • 특정 키를 해제하는 방법? 에뮬레이트하고 싶습니다 키 HOLD를 누른 다음 해제합니다. 또한 링크에서 문자는 배열 [2]로 이동하고 여기서는 [1]로 이동합니다. 이유는 무엇입니까?
  • 음, 내 예에서 볼 수 있듯이 두 개로 수행합니다. 단계, 먼저 키를 누른 다음 ' 지연이 발생한 다음 해제합니다. 그런 다음 ' 하드웨어 키보드 구현 방법에 대해 강의 ntation은 작동하지만 ' 일종의 자연스럽지 않으며 배열의 각 값에는 의미가 있습니다. ATM을 공유 할 수있는 링크가 없어서 죄송합니다. 웹에서 검색하는 내용을 찾을 때마다 새 댓글을 게시 해주세요. ☺

답변

Arduino Bootloader를 완전히 대체하는 프로젝트를 만들었습니다. 스케치를 업로드하여 HID로 사용할 수 있습니다. Github에서 프로젝트 HID보기 : https://github.com/NicoHood/HID

댓글

  • Arduino SE에 오신 것을 환영합니다! 라이브러리 사용 방법에 대해 조금 추가해 주시겠습니까? 감사합니다!
  • Readme를 읽고 예제를 사용해 보시겠습니까? 여기에 모든 것을 속일 필요가 없습니다. Github의 모든 것이 최신 상태입니다. 🙂
  • 죄송합니다. 멋진 라이브러리처럼 보이지만 문서가 부족합니다. 제가 말할 수있는 한은 ' 실제 설치 지침이 없으며 위키의 전체 주제는 " TODO " (특히 게임 패드 주제는 이와 같이 완전히 비어 있음). :-/
  • 실제로 여기에 기본 설명을 제시 할 필요가 있습니다. 답변은 외부 링크가 없어도 의미가 있어야하므로 죽을 수 있습니다. 그리고 이것은 아닙니다.

답글 남기기

이메일 주소를 발행하지 않을 것입니다. 필수 항목은 *(으)로 표시합니다