Перейти к содержимому

Arduino как hid устройство

  • автор:

Как создать USB HID из Arduino?

У меня есть Arduino Mega, и появилось желание, сделать usb-устройство, которое будет легко распознаваться компьютером. Например, как USB HID — клавиатура, мышь и т. д.
Где можно узнать, про то как работать с USB, как компьютер распознаёт устройство?

  • Вопрос задан более трёх лет назад
  • 22964 просмотра

Комментировать
Решения вопроса 2
Михаил @Inkvizitor66

Брать ардуино на Atmega32u4 (leonardo большая, pro micro компактная) она умеет в железный HID и требует всего пары строк инициализации.
А если строить на атмера32, atmega328 (большинство ардуин) то как в ответе от Александр v-usb в помощь.

Upd. Сперва ответил на вопрос шапки, потом прочитал уточнение. Но все равно пускай будет

Ответ написан более трёх лет назад
Комментировать
Нравится 4 Комментировать
vanyamba-electronics @vanyamba-electronics

Самому пытаться программировать USB можно, конечно, но приготовьтесь, что на решение только одной этой задачи у Вас уйдут следующие несколько лет. Проще воспользоваться готовой библиотекой.
В случае, если в микроконтроллере нет встроенного USB-порта, то можно попробовать использовать библиотеку V-USB (виртуальный USB), но как и все чисто софтовые решения, это скорее эмулятор, чем полноценный порт. Требует много процессорного времени, и к тому же качество её работы оставляет желать лучшего. Например, если погрузить компьютер в спящий режим, то V-USB вряд ли это распознает, и придётся каждый раз переподключать микроконтроллер, или нажимать на кнопку сброса.
Так что попробовать стоит, но лично я рекомендую использовать микроконтроллер ATmega32U4, на котором построена плата Arduino Leonardo. Для него поддержка USB HID реализована в самом программном обеспечении Arduino IDE, так что для того, чтобы превратить микроконтроллер в «мышь» и «клавиатуру» (одновременно), достаточно просто загрузить скетч примера.
И наконец, третий вариант. В современных Arduino вместо чипа USB-RS232 используется микроконтроллер ATmega16U2. Это практически тот же Arduino Leonardo, только памяти у него в 2 раза меньше. Можно перепрограммировать в USB HID его, разве что потребуется программатор, потому что он программируется через интерфейс ICSP.

Ответ написан более трёх лет назад
Комментировать
Нравится 4 Комментировать
Ответы на вопрос 1

NeiroNx

Программист

гуглите по «V-USB HID Arduino»
вот один из примеров rukodelie-ds.ru/forum/viewtopic.php?t=804

Также есть от Digispark для Attiny85 — его основа V-USB
Также вам придется узнать что такое «HID дескриптор» и о правилах его написания(в инете есть документация и проги для этого).

Arduino.ru

Помогите вернуть ардуинку в прежний вид. Вообщем подключил я ардуино и поставил прошивку mmjoy что бы она определялась как игровое устройство. А сейчас надо вернуть в прежний вид что бы определялась как раньше.

  • Войдите на сайт для отправки комментариев

Сб, 04/07/2020 — 13:48

DetSimen аватар

Зарегистрирован: 25.01.2017

значить, надо поставить другую прошивку.

  • Войдите на сайт для отправки комментариев

Сб, 04/07/2020 — 15:29
Зарегистрирован: 04.07.2020

в этом и дело, как ее поставить если она определяется как hid, ide ее не видит из-за этого. Через что мне залить новую прошивку если онп опредекляется не как ардуино, а как hid

  • Войдите на сайт для отправки комментариев

Сб, 04/07/2020 — 15:48
Зарегистрирован: 19.10.2016

Через другую ардуино и скетч ArduinoISP.

  • Войдите на сайт для отправки комментариев

Сб, 04/07/2020 — 15:50

BOOM аватар

Зарегистрирован: 14.11.2018

Ну хоть бы писали что уже делали, что не помогло, что — что-то поменяло.

Я бы для начала удалил это HID-устройство в диспетчере устройств и перетыкнул дуню. Ресет задействовать можно попробовать, а вообще у меня давно куплен USB-свисток (программатор) с али за 90р, он точно с проблемой поможет справиться.

  • Войдите на сайт для отправки комментариев

Сб, 04/07/2020 — 15:52

BOOM аватар

Зарегистрирован: 14.11.2018
sadman41 пишет:
Через другую ардуино и скетч ArduinoISP.

Вот, даже «свистка» не нужно. Правда вторая дуня нужна.

  • Войдите на сайт для отправки комментариев

Сб, 04/07/2020 — 16:51
Зарегистрирован: 04.07.2020

Я получается перетыкал, ресетал, пытался драйвер аруиновский установить, но винда не даёт с другого пк пытался драйвера поставить, потом первое время она работает в режима bootliadera работает и определяется как надо и в этот момент пытался загрузить новый скетч, потом через mmjoy пытался файл прошивки загрузить, но все равно отображается так

  • Войдите на сайт для отправки комментариев

Arduino как HID устройство

До сих пор мы работали только с Arduino UNO. Да вот только то, что я сегодня покажу не работает с Arduino UNO. На самом деле можно, конечно, но в таком случае нужно кое-чего подшаманить, а это кое-чего не так-то и просто. Что же тогда делать? А вот что. Кроме Arduino UNO существует множество других версий Arduino. Это и Arduino Nano или Mini, когда размер имеет значение, и Arduino Mega, когда пинов и ресурсов на UNO уже не хватает, а еще нужно подключить килограмм датчиков. А если форм-фактор UNO уж больно нравится, а аналоговых пинов не хватает, то на помощь придет Leonardo. На Leonardo мы сегодня и остановимся. Отличие Leonardo от UNO не только в дополнительных аналоговых пинах, но и в архитектуре. На Leonardo доступен виртуальный Serial port. Что это нам дает? Как минимум то, что 1 и 0 пины, которые отвечают за соединение с компьютером на UNO остаются свободными, а при открытии Serial соединения плата не перезагружается. Примите это во внимание. И главный козырь – компьютер считает Leonardo за HID устройство (Human interface device), а это говорит о том, что Leonardo может притвориться клавиатурой или мышью. Это свойство то мы и будем использовать. Предыстория Я люблю играть на электрогитаре. Часто играю в программе Guitar rig. Эта программа является виртуальным гитарным процессором, то есть обрабатывает звук с гитары. К чему все это. При игре нужно переключаться между пресетами, а руки то заняты. Есть решение – приобрести контроллер для этой программы, вот только он больше не выпускается, да и стоит прилично. А что если соорудить педаль самому? Вот что из этого получилось. Нам понадобятся Arduino Leonardo или его аналоги Главное – чтобы плата определялась как HID устройство Кнопка Тут уж по вашему вкусу Соединительные провода Корпус Тут есть где разгуляться дизайнерской мысли. Я решил не заморачиваться особо и соорудил подобие педали из двух фанерок, обильно смазанных термоклеем. Побаловаться – в самый раз. Пол царства за термоклей.

Свой среди HID Как я уже и говорил, Leonardo может притворяться клавиатурой или мышью. Это осуществляется с помощью встроенной библиотеки. Ниже приведен пример кода. Попробуйте запустить его у себя на компьютере. Должна произойти странная вещь.

// Подключаем библиотеку для управления клавиатурой #include «Keyboard.h» void setup() < // Стартуем Keyboard.begin(); delay(3000); // Выделяем весь документ Keyboard.press(KEY_LEFT_CTRL); Keyboard.press('a'); delay(500); Keyboard.releaseAll(); // Стираем текст Keyboard.write(KEY_BACKSPACE); delay(500); // Пишем сообщение Keyboard.println("Te he.I am controlling your keyboard"); delay(1000); // Выделяем весь документ Keyboard.press(KEY_LEFT_CTRL); Keyboard.press('a'); delay(500); Keyboard.releaseAll(); // Пишем сообщение Keyboard.println("Goodbye!"); delay(1000); // Выделяем весь документ Keyboard.press(KEY_LEFT_CTRL); Keyboard.press('a'); delay(500); Keyboard.releaseAll(); // Стираем текст Keyboard.write(KEY_BACKSPACE); delay(500); Keyboard.releaseAll(); // Сохраняем документ Keyboard.press(KEY_LEFT_CTRL); Keyboard.press('s'); delay(500); Keyboard.releaseAll(); // Чтобы откатить все назад, нажмите ctrl + z несколько раз >void loop()

Не спешите бежать и рассказывать о восстании машин. Так и было задумано. Теперь разберемся как это работает. Keyboard.press(button) – эта команда говорит Leonardo о том, что нужно нажать кнопку на клавиатуре. Аргументом принимает букву или специальное обозначение клавиши. KEY_LEFT_CTRL – это левый Ctrl, например. Все обозначения можно посмотреть тут. Можно нажимать комбинации клавиш. Для этого пропишите несколько строк кода с нужными клавишами. Например, чтобы сохранить текст есть комбинация Ctrl + s, Leonardo тоже сможет сохранить текст если выполнить такой код:

Keyboard.press(“s”); Keyboard.press(KEY_LEFT_CTRL);

Keyboard.releaseAll() – команда говорит Leonardo отпустить клавиши. Заметьте, что предыдущая команда говорит Leonardo только о нажатии клавиши. Если не прописать Keyboard.releaseAll(), то клавиша будет зажата и дальше. Прямо как в реальности. Попробуйте открыть текстовый редактор и зажать клавишу. Keyboard.println(«Some text«) – эта команда отвечает за печать текста. Тут все предельно ясно. Работает как Serial.println. Там есть и другие функции, но эти – самые основные. Их нам хватит, чтобы сделать педаль для гитары. Если кому интересно, что еще есть в этой библиотеке или в похожей для мыши, то можно открыть примеры/USB и почитать тут. Переходим к сборке педали. Схема С конструкцией можно подумать, а схема устройства крайне проста. Ниже приведена схема на макетке. Код

// Подключаем библиотеку для работы с Leonardo как с клавиатурой #include "Keyboard.h" // Определяем пин кнопки #define BUTTON_PIN A0 // Создаем переменную для считывания показаний с кнопки bool button = 0; void setup() < // Открываем соединение с COM портом Serial.begin(9600); // Определяем кнопку как вход с подтягивающим резистором // Что такое подтягивающий резистор и для чего он нужен можно прочитать здесь: // http://cxem.net/arduino/arduino185.php pinMode(BUTTON_PIN, INPUT_PULLUP); >void loop() < // Считываем показания с кнопки button = digitalRead(BUTTON_PIN); // Помним, что в отпущеном состоянии значение на кнопке равно 1 if(!button) < // Отправляем клавишу в Serial. Я решил отправлять n // Для некоторых клавиш есть специальные обозначения. // Например, чтобы отправить левый Shift, вы должны написать такую команду - Keyboard.press(KEY_LEFT_SHIFT ); // Коды для других клавиш приведены здесь // https://www.arduino.cc/en/Reference/KeyboardModifiers Keyboard.press('n'); // Ждем немного delay(10); >else < // Когда кнопка отпущена - отправляем команду остановить все нажатия Keyboard.releaseAll(); >>

Видео На видео показан тест устройства в Microsoft Word и использование в качестве педали для переключения пресетов в guitar Rig 5. Для этого я создал новый контроллер, запомнил клавишу и задал действие. Итог Оказывается, существуют и другие Arduino, не менее полезные, а где-то и более полезные чем UNO. Используя Leonardo в качестве клавиатуры или мыши можно создавать интересные вещи. Например, флешку-розыгрыш на 1 апреля, которая будет нажимать клавиши через определенные интервалы. Такая штучка доставит вашей цели кучу незабываемых эмоций. Только тсс, я этого не говорил.

Прикрепленные файлы:
  • Guitar.rar (2 Кб)

Arduino.ru

knack аватар

Встала задача в авто крутить планшетом, неудобно тянутся отвлекатся, на ардуине собрать свой джойстик, что бы не мудрить со стороны планшета, проще представить аодуину как HID устройство, перепрошить ATmega8U2.

По этой статье скачал Flip, прошивку, затык, не могу установить дрова вместо Ардуины, в папке с флипом не встают, ругается что несовместим с устройством. У кого есть опыт по прошивке ATmega8U2 на уне, как поставить драйвер? х86 х64 там и там вин7.

  • Войдите на сайт для отправки комментариев

Сб, 23/11/2013 — 23:53
Зарегистрирован: 25.10.2013

Да, есть опыт. Правильно, нормальная статья. Скачали Вы Flip, а дальше почему статью не читаете? Контроллер ATmega8U2 нужно перевести в DFU режим. В статье показано где нужно припаять резистор и какие контакты замкнуть. У меня Arduino UNO rev.3 не SMD, припаивать ничего не надо, подключаю ардуину к компьютеру, кратковременно замыкаю контакты (как в статье), Ардуина пропадает в списке устройств на компьютере, но появляется новое USB устройство. Вот к нему и надо уже устанавливать драйвера из папки Flip.

  • Войдите на сайт для отправки комментариев

Вс, 24/11/2013 — 00:05

knack аватар

Зарегистрирован: 27.03.2012

Прошу прощения, но поиск гугла не показал эту статью, потом тупо решил заглянуть в статьи :))

  • Войдите на сайт для отправки комментариев

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *