вторник, 13 сентября 2016 г.

USB-Keyboard with Arduino


http://blog.petrockblock.com/2012/05/19/usb-keyboard-with-arduino-and-v-usb-library-an-example/



https://florianfries.me/en/arduino-as-a-keyboard.html




http://www.vladcazan.com/electronics/arduino-keyboard-emulator
http://robocraft.ru/blog/1002.html


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


Необходимо перепрошить mega8u2
















взято с https://vk.com/blynk

Немного предистории:
Посте того, как сгорел мой "ноутбук", я вспомнил про свой старый системник (точнее материнку и блок питания).
Достав его из кучи барахла, заметил что кроме мышки нету никакого устройства ввода, немного посидел,и начал рыть инет. Так как у меня в асоррименте только Arduino UNO R3 смотрел статьи только с ней. Многие делают клавиатуру на Arduino micro (ну там все просто).

В поисках наткнулся на статью где ардуино играет в 2048. Так как для упавления игрой надо нажимать клавиши, нужно превратить ардуино в клавиатуру.То что надо!


Приступим:

Нам понадобится:
  • Arduino UNO R3
  • Перемычка
  • Arduino IDE
  • Фирменная утилита Atmel – Flip
  • Архив с прошивками и примером + библиотека
Цель: написать скетч для Arduino UNO, который будет эмулировать нажатие клавиш стрелок на клавиатуре.
Алгоритм наших действий:
  • Пишем скетч с нужным функционалом и заливаем в МК ATmega328
  • Прошиваем загрузчик Arduino, usb контроллер ATmega16U2
Для эмулирования нажатий клавиш я использовал библиотеку HIDKeyboard.
Что ж теперь переходим к самому интересному – будем превращать Arduino UNO в HID устройство, а конкретней в USB клавиатуру.
Немного теории.
Прошивка загрузчика — для начала нужно перевести Arduino в режим Device Firmware Update или в более часто используемом варианте DFU. Он служит для перепрошивки контроллера выполняющего роль конвертера serial to usb.
Как известно, основное отличие Arduino UNO от предыдущих моделей плат Arduino заключается в наличие второго контроллера ATmega8U2, на смену аппаратному конвертору USB <-> COM (FT232R). Преимуществом данного решения является возможность замены прошивки в интерфейсном контроллере с целью эмуляции произвольного устройства при подключении Arduino к ПК (накопителя, hid-устройства и т.д.). Как это сделать? У интерфейсного контроллера имеется режим DFU – прошивка контроллера ATmega8U2 через подключение через USB. Почти как прошивка центрального контроллера Arduino. Для этого можно воспользоваться фирменной утилитой Flip. Для того чтоб перевести контроллер в этот режим программирования потребуется небольшая аппаратная модернизация Arduino.
Для  Arduino UNO R3 достаточно поставить перемычку.


После этих действий компьютер обнаружит новое устройство и попытается самостоятельно поставить драйвера, но у него ничего не получится. Настало время установить фирменную утилиту Flip от Atmel. Открываем диспетчер задач и видим новое устройство Arduino Uno DFU.

Выберем драйвер из папки недавно установленной утилиты FLIP. В итоге у нас появится новое устройство – ATmega16U2. В дальнейшем при подключении Arduino, устройство будет определять как USB устройство. Теперь нам следует залить HEX файл с инструкциями USB клавиатуры. Чтоб компьютер в дальнейшем распознавал нашу Arduino как usb клавиатуру. Запускаем FLIP.


  • Выбираем в меню Device > Select > ATmega16U2
  • Выбираем в меню Setting > Communication > USB
  • Жмем Open берем прошивку
  • Приступаем к прошивке, жмем Run
По окончании процесса прошивки можно закрыть программу и проверить, как работает устройство. В итоге мой Arduino успешно играл в 2048 почти неделю. Даже на ночь его не выключал. В подтверждение вот мой результат.

Вот так можно превратить Arduino UNO в HID-устройство. Кстати можно не только играться в игры но и разыграть друга, подключив к его компьютеру устройство, которое запустит блокнот и будет писать там анекдоты, либо запускать команды, ведь клавиатура это главный пульт управления компьютером. К сожалению нельзя применить этот метод к плате Arduino Nano. Как уже говорилось ранее – второй контроллер Arduino UNO (ATmega8U2) используется в роли конвертера USB to Serial для определения компьютером Arduino UNO как USB устройство. Можно сделать вывод: реализовать этот метод, без посторонних устройств, возможно лишь при наличии на плате Arduino микроконтроллера запрограммированного как USB-to-serial конвертер. Но что делать, если у вас Arduino Nano или иная плата без конвертера USB to Serial? В таком случае можно купить отдельно конвертер подобный этому.

Чтобы вернуть Arduino UNO к жизни надо перепрошить ATmega16U2
Найти прошивку можно тут:
C:\Program Files\Arduino\hardware\arduino\avr\firmwares\atmegaxxu2
На всякий случай собрал весь софт который использовал в

  - Arduino-HID-Bot-2048.ino - Скетч для Arduino UNO для игры в 2048.
   
  - Arduino-keyboard.hex       - этот hex файл заливаем при помощи FLIP для перевода arduino
в режим USB клавиатуры (но сначала нужно залить основной скетч).

прошиваем вот так!


шьем по isp

делаем клавиатуру

avrdude -p m16 -b 19200 -F -P COM4 -c avrisp -U flash:w:Arduino-keyboard-0.3.hex -U lfuse:w:0xFF:m -U hfuse:w:0xD9:m -U efuse:w:0xF4:m -U lock:w:0x0F:m




"-p m16" это код atmega16u2


делаем копию arduino uno R3

avrdude -p m328p -b 19200 -c avrisp
 -P COM13 -e -U flash:w:ATmegaBOOT_168_atmega328_pro_8MHz.hex

   
  - Arduino-usbserial-uno.hex - этот файл нужен для того чтоб обратно вернуть Arduino UNO
в стандартный режи работы, чтоб она определялась в ПК как виртуальный COM-порт
в котром мы можем загружать скетчи. 
https://vk.com/doc5127466_437873517

http://www.atmel.com/tools/FLIP.aspx


 Дополнительно:

Arduino UNO R3 Mouse HID

 http://pythoneiro.blogspot.ru/2015/04/transformando-seu-arduino-uno-em-um-usb.html