Arduino як USB HID


25

Чи можливо побудувати пристрій HID (наприклад, клавіатуру) за допомогою Arduino uno?

На даний момент у мене є кнопкові входи на Arduino, що дають виходи на послідовному рядку. Отже, як я можу перетворити свою поточну прошивку на щось, що може вести себе як клавіатура HID?

  • Чи потрібно написати новий драйвер пристрою вікон?
  • Чи повинен я створити програмний шар, який міг би приймати мої послідовні дані та матимуть Windows читати їх як вхід HID?
  • Чи є кращий спосіб досягти цього, якщо це взагалі можливо?

1
Я можу помилятися, але це насправді не про Ардуїно. Йдеться про розробку драйверів бічних пристроїв Windows.
asheeshr

1
Перша відповідь у google: mitchtech.net/arduino-usb-hid-keyboard ... але ви не вказали, який Arduino. У Леонардо він вбудований, і відповідний драйвер вже існує (див. Arduino.cc/en/Reference/MouseKeyboard ).
ФредП

Я використовую Uno, але я погляну на те, що ви опублікували, тому що минулого разу ми розглядали оновлення DFU, але нас ніби не лякає гавкання матеріалів, оскільки компоненти не так легко доступні та дешеві в моєму регіоні, як у більшості місця.
Аномалія

3
@AsheeshR Ця проблема наразі мета: Meta.arduino.stackexchange.com/q/102/46
Рікардо

1
Ну, це, безумовно, можливо, оскільки Arduino Uno має Atmega16u2 як чіп драйвера USB, користувач може використовувати мигальну або DFU або ICSP, щоб натиснути на пристрій мікропрограмне забезпечення, близьке до леонардо, яке змусить Arduino вести себе як HID-клавіатура. Немає жодної розробки Windows, жодного драйвера, який не можна побудувати як USB / HID-пристрої, не визнають за замовчуванням. тобто це питання слід знову відкрити.
змо

Відповіді:


14

Чи можливо побудувати пристрій HID (наприклад, клавіатуру) за допомогою Arduino uno?

Так! І тут є чудовий підручник, як це зробити тут

На даний момент у мене є кнопкові входи на 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 Keyboard, що натискає на USB.

Будьте уважні, що ключовий символ ( chrу коді тут) - це фактично код клавіш, надісланий через USB, який інтерпретується вашим драйвером USB HID, який потім переводить його в реальний символ, використовуючи поточний макет, який ви налаштували для вашої клавіатури.

modПерсонаж один з клавіш - модифікаторів у вас є на клавіатурі (Shift, Control, Alt ...), 0x00не будучи НЕ модифікатором.

  • Чи потрібно написати новий драйвер пристрою вікон?

Ні, вам не потрібно! З оновленням DFU ваш ардуїно Windows буде сприйматися як USB клавіатура.

  • Чи повинен я створити програмний шар, який міг би приймати мої послідовні дані та матимуть Windows читати їх як вхід HID?

Вам це не потрібно робити, і це насправді дуже погана ідея з багатьох причин:

  • ваше рішення не буде портативним, і тому вам потрібно буде щось зламати для кожної платформи, яку ви можете використовувати,
  • ваше рішення означало б багато нового коду; чим більше запису коду, тим більше помилок, ймовірно, у вашій системі,
  • ваше рішення було б справді хакерським, оскільки воно поводитиметься як драйвер пристрою (тобто земля ядра ), що приймає дані від користувацької програми (тобто, земля користувача ), і, швидше за все, не спрацює, буде пекло налагодження і схильне до проблем безпеки. .. Якщо це навіть можливо зробити!

Я використовую Uno, але я перегляну те, що ви опублікували, тому що минулого разу ми розглядали оновлення DFU, але нас ніби бояться не робити речі

Нарешті, у коментарі у вас виникають занепокоєння з приводу того, щоб придушити ардуїно. Будь ласка, повірте мені та автору статті, що ви не можете цеглити свій ардуїно, роблячи спалах мікропрограми:

ПРИМІТКА. Немає шансів "пришвидшити" пристрій за допомогою цього методу. Прошивку завантажувача Arduino завжди можна оновити за допомогою протоколу DFU!

Якщо щось стає не так, і ви отримаєте пошкодження завантажувача у маленькому AVR (atmega8u2), ви все одно можете переробити це за допомогою іншого ардуїно або програмувача atmel, використовуючи 6 штифтів поруч із роз'ємом USB.

Зрештою, знайте, що єдиний спосіб замурувати AVR, таким чином, і Arduino - це грати з запобіжниками та скидати програмувальні запобіжники. І навіть тоді ви можете використовувати HVSP, щоб зберегти свій пристрій, хоча часто брати новий чіп часто буває менше.


1
Дякуємо за всю корисну інформацію, ми цього досягли.
Аномалія

Ну, правильним способом цегли AVR є надмірна напруга / над напругою. Тоді його буде
смажити

Але тоді це не називається закваски, а смаження, або, як ви кажете, підсмажування. Поставте 15 ампер через MCU, і я думаю, ви побачите, що він стрибає через кімнату ;-)
zmo

Як випустити певний ключ? Я хочу емуляцію ключа HOLD, а потім відпустіть. А також у посиланні символ переходить до масиву [2], а тут переходить до [1]. Чому?
5аргон

добре, як показано в моєму прикладі, ви робите це в два етапи, спочатку натискаєте клавішу, потім настає затримка, потім ви відпускаєте її. Ну, тоді вам потрібно буде прочитати лекцію про те, як працює реалізація апаратних клавіатур, це неначе природно, і кожне значення масиву має значення. Вибачте, що я не маю посилання на спільний доступ до атма, але коли ви знайдете щось, що шукає в Інтернеті, будь ласка, опублікуйте новий коментар
zmo

6

Я створив проект, який повністю замінює завантажувач Arduino. Ви можете завантажувати ескізи та використовувати їх як HID. Дивіться проект HID на Github: https://github.com/NicoHood/HID


4
Ласкаво просимо в Arduino SE! Ви можете додати трохи про те, як користуватися бібліотекою? Спасибі!
Анонімний пінгвін

2
Прочитайте readme та спробуйте приклади? Тут все є, тут не потрібно обробляти все. Все в Github оновлено :)

Вибачте чувак, це схоже на класну бібліотеку, але вашої документації шалено бракує. Наскільки я не можу сказати, немає справжніх інструкцій щодо встановлення, і цілі теми у вашій вікі просто говорять "TODO" (конкретно, тема геймпада абсолютно порожня, як це). : - /
BrainSlugs83

1
Насправді тут є необхідність представити основний опис: відповіді повинні бути осмисленими навіть без зовнішнього зв’язку, який може загинути. А цього немає.
Кріс Страттон
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.