Подключите плату с чипом ATmega32U4 – она эмулирует USB-интерфейс без дополнительных модулей. Leonardo и Micro подойдут лучше Uno из-за встроенной поддержки HID-протокола. Загрузите скетч через Arduino IDE, выбрав соответствующий порт и тип платы.
Используйте библиотеку Keyboard.h для отправки нажатий клавиш. Простейший пример – кнопка, которая печатает текст:
#include <Keyboard.h>
void setup() {
Keyboard.begin();
pinMode(2, INPUT_PULLUP);
}
void loop() {
if (digitalRead(2) == LOW) {
Keyboard.print("Hello");
delay(200);
}
}
Для джойстиков или энкодеров пригодится Joystick.h. Настройте оси, кнопки и диапазоны значений вручную, чтобы избежать дребезга контактов. Добавьте фильтрацию сигнала, если данные поступают с аналоговых датчиков.
Проверьте работу через монитор порта или специализированные утилиты вроде HID Debug. Если система не распознаёт девайс, перезагрузите плату с зажатой кнопкой RESET – это сбросит USB-стек.
Программируем эмулятор клавиатуры на микроконтроллере
Подготовка платы
Используйте Leonardo или Pro Micro – они поддерживают USB-протокол без дополнительных чипов. Убедитесь, что выбрана правильная версия Bootloader:
- Для Leonardo –
AVRISP mkII
- Для Pro Micro –
Caterina
Настройка библиотек
- Установите
Keyboard.h
через менеджер библиотек в IDE. - Проверьте, что в скетче указана корректная раскладка (
KEYMAP_US
илиKEYMAP_RU
).
Пример кода для отправки символа:
#include <Keyboard.h>
void setup() {
Keyboard.begin();
Keyboard.print("A");
delay(100);
Keyboard.end();
}
void loop() {}
- Для имитации нажатий комбинаций (Ctrl+Alt+Del) применяйте
Keyboard.press()
с кодами модификаторов. - Избегайте задержек менее 50 мс – некоторые ОС игнорируют быстрые команды.
При отладке мониторьте порт через Serial.print()
, но отключайте его перед загрузкой финальной версии.
Выбор платы и прошивки
Оптимальный вариант – Leonardo или Pro Micro. Они поддерживают эмуляцию USB-HID из коробки, имеют встроенный контроллер ATmega32U4. Для простых задач хватит Leonardo, если нужна компактность – Pro Micro.
Из прошивок выбирайте QMK или LUFA. QMK гибче, поддерживает слои и макросы. LUFA проще в настройке, но требует ручного описания дескрипторов. Для базового сценария подойдёт стандартная библиотека Keyboard.h.
Платы на чипах CH552G дешевле, но требуют перепрошивки USB-стека. Если бюджет ограничен – рассмотрите их, но будьте готовы к дополнительным настройкам.
Избегайте Uno и Nano – у них нет native USB, потребуется адаптер или перепрошивка с обходными решениями, что усложнит процесс.
Настройка эмуляции клавиатуры или мыши
Подключи плату к ПК через USB, выбрав в Arduino IDE тип «Keyboard» или «Mouse» в меню «Инструменты» → «Тип платы». Это активирует нужные библиотеки.
Для отправки нажатий клавиш используй Keyboard.press()
, указав символ или код из справочника. Например, Keyboard.press(KEY_LEFT_CTRL)
имитирует зажатие Ctrl.
Чтобы переместить курсор, примени Mouse.move(X, Y, колесо)
, где X и Y – смещение в пикселях, а третий параметр управляет скроллом. Отрицательные значения сдвигают влево или вниз.
Проверь задержки между командами – слишком быстрое выполнение приводит к пропуску действий. Добавь delay(50)
после каждого события.
Исправь ошибки с помощью Keyboard.releaseAll()
или Mouse.release()
, если эмуляция зависла. Это сбросит все активные нажатия.
Для сложных сценариев, например, ввода текста, комбинируй методы: Keyboard.write('A')
отправляет одиночный символ, а Keyboard.print("текст")
– строку.