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

Новый подход к использованию 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 устройство

 

Arduino Leonardo HID Device

Кнопка

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

Arduino Leonardo HID Device

Соединительные провода

Arduino Leonardo HID Device

Корпус

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

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

Arduino Leonardo HID Device

Arduino Leonardo HID Device

Свой среди 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 и почитать тут. Переходим к сборке педали.

Схема

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

Arduino Leonardo HID Device

Код

// Подключаем библиотеку для работы с Leonardo как с клавиатурой
#include «Keyboard.h»

// Определяем пин кнопки
#define BUTTON_PIN A0
// Создаем переменную для считывания показаний с кнопки
bool button = 0;

void setup()
{
// Открываем соединение с COM портом
Serial.begin(9600);
// Определяем кнопку как вход с подтягивающим резистором
// Что такое подтягивающий резистор и для чего он нужен можно прочитать здесь:
// https://bestschemes.skilx.cc/%d0%ba%d1%83%d1%80%d1%81-arduino-%d0%b4%d0%b0%d1%82%d1%87%d0%b8%d0%ba%d0%b8/
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 апреля, которая будет нажимать клавиши через определенные интервалы. Такая штучка доставит вашей цели кучу незабываемых эмоций. Только тсс, я этого не говорил.


Прикрепленные файлы:

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

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