Библиотека программного USB клавиатуры и мыши для Arduino Nano/UNO/Mega и прочих

Overview

License: MIT author

EasyHID

Библиотека программного USB клавиатуры и мыши для Arduino Nano/UNO/Mega и прочих

  • Программный USB
  • Работает на любой AVR Arduino 16 МГц
  • Поддержка мультимедийных клавиш
  • Некоторые клавиши и системные сочетания могут не работать, особенность библиотеки VUSB

Совместимость

AVR Arduino 16 МГц

Содержание

Установка

  • БИБЛИОТЕКА НЕДОСТУПНА В МЕНЕДЖЕРЕ БИБЛИОТЕК
  • Скачать библиотеку .zip архивом для ручной установки:
    • Распаковать и положить в C:\Program Files (x86)\Arduino\libraries (Windows x64)
    • Распаковать и положить в C:\Program Files\Arduino\libraries (Windows x32)
    • Распаковать и положить в Документы/Arduino/libraries/
    • (Arduino IDE) автоматическая установка из .zip: Скетч/Подключить библиотеку/Добавить .ZIP библиотеку… и указать скачанный архив
  • Читай более подробную инструкцию по установке библиотек здесь

Подключение

scheme

Использование

HID

HID.begin();        // Инициализация шины USB
HID.tick();         // Поллинг шины (вызывать не реже чем раз в 10мс!)
HID.isConnected();  // (bool) Статус шины
HID.isNumLock();    // (bool) проверка numLock
HID.isCapsLock();   // (bool) проверка capsLock
HID.isScrollLock(); // (bool) проверка scrollLock

Mouse

Mouse.move(int8_t x, int8_t y);         // Двигаем курсор
Mouse.click(uint8_t btn = MOUSE_LEFT);  // Кликаем на клавишу
Mouse.press(uint8_t btn = MOUSE_LEFT);  // Зажимаем клавишу
Mouse.releaseAll();                     // Отпускаем все

// КОНСТАНТЫ КНОПОК
MOUSE_LEFT
MOUSE_RIGHT
MOUSE_MIDDLE

Keyboard

Keyboard.releaseAll(void);                                      // Отпускаем все

Keyboard.press(uint8_t key);                                    // Жмем 1 клавишу
Keyboard.press(uint8_t key_0, uint8_t key_1);                   // Жмем 2 клавиши
Keyboard.press(uint8_t key_0, uint8_t key_1, uint8_t key_2);    // Жмем 3 клавиши

Keyboard.click(uint8_t key);                                    // Кликаем 1 клавишу
Keyboard.click(uint8_t key_0, uint8_t key_1);                   // Кликаем 2 клавиши
Keyboard.click(uint8_t key_0, uint8_t key_1, uint8_t key_2);    // Кликаем 3 клавиши

Keyboard.clickMultimediaKey(uint8_t key);                       // Кликаем мультимедиа клавишу
Keyboard.clickSystemKey(uint8_t key);                           // Кликаем системную клавишу
КОНСТАНТЫ КЛАВИШ
// для сочетаний
KEY_MOD_LEFT_CONTROL
KEY_MOD_LEFT_SHIFT
KEY_MOD_LEFT_ALT
KEY_MOD_LEFT_GUI
KEY_MOD_RIGHT_CONTROL
KEY_MOD_RIGHT_SHIFT
KEY_MOD_RIGHT_ALT
KEY_MOD_RIGHT_GUI

// обычные
KEY_LEFT_CONTROL
KEY_LEFT_SHIFT
KEY_LEFT_ALT
KEY_LEFT_GUI
KEY_RIGHT_CONTROL
KEY_RIGHT_SHIFT
KEY_RIGHT_ALT
KEY_RIGHT_GUI

KEY_1
KEY_2
KEY_3
KEY_4
KEY_5
KEY_6
KEY_7
KEY_8
KEY_9
KEY_0
KEY_A
KEY_B
KEY_C
KEY_D
KEY_E
KEY_F
KEY_G
KEY_H
KEY_I
KEY_J
KEY_K
KEY_L
KEY_M
KEY_N
KEY_O
KEY_P
KEY_Q
KEY_R
KEY_S
KEY_T
KEY_U
KEY_V
KEY_W
KEY_X
KEY_Y
KEY_Z
KEY_COMMA
KEY_PERIOD
KEY_MINUS
KEY_EQUAL
KEY_BACKSLASH
KEY_SQBRAK_LEFT
KEY_SQBRAK_RIGHT
KEY_SLASH
KEY_F1
KEY_F2
KEY_F3
KEY_F4
KEY_F5
KEY_F6
KEY_F7
KEY_F8
KEY_F9
KEY_F10
KEY_F11
KEY_F12
KEY_APP
KEY_ENTER
KEY_BACKSPACE
KEY_ESC
KEY_TAB
KEY_SPACE
KEY_INSERT
KEY_HOME
KEY_PAGE_UP
KEY_DELETE
KEY_END
KEY_PAGE_DOWN
KEY_PRINTSCREEN
KEY_ARROW_RIGHT
KEY_ARROW_LEFT
KEY_ARROW_DOWN
KEY_ARROW_UP

// multimedia
KEY_VOL_UP
KEY_VOL_DOWN
KEY_SCAN_NEXT_TRACK
KEY_SCAN_PREV_TRACK
KEY_STOP
KEY_PLAYPAUSE
KEY_MUTE
KEY_BASSBOOST
KEY_LOUDNESS
KEY_KB_EXECUTE
KEY_KB_HELP
KEY_KB_MENU
KEY_KB_SELECT
KEY_KB_STOP
KEY_KB_AGAIN
KEY_KB_UNDO
KEY_KB_CUT
KEY_KB_COPY
KEY_KB_PASTE
KEY_KB_FIND

// system
KEY_POWER
KEY_SLEEP
KEY_WAKE

Пример

Клавиатура

void setup() {
  HID.begin();                          // Инициализация USB
}

void loop() {
  static uint32_t timer = millis();     // Миллис - таймер (НЕ DELAY!!!)
  if (millis() - timer >= 1000) {       // Каждые 1000 мс
    timer = millis();

    Keyboard.press(KEY_1);              // Зажимаем клавишу '1'
    Keyboard.releaseAll();              // Отпускаем все клавиши
    Keyboard.click(KEY_SPACE);          // Кликаем пробел (press + releaseAll)
    Keyboard.write('-');                // Выводим тире
    Keyboard.println(" Hello world!");  // Печать в println
  }

  HID.tick();   // Вызываем тикер не реже чем каждые 10 мс!
}

Мышь

void setup() {
  HID.begin();                          // Инициализация USB
}

void loop() {
  static uint8_t count = 0;             // Направление
  static uint32_t timer = millis();     // Миллис - таймер (НЕ DELAY!!!)
  if (millis() - timer >= 1000) {       // Каждые 1000 мс
    timer = millis();
    switch (count) {
      case 0: Mouse.move(100, 0);  break; // Двигаем мышкой на X-Y пикс.
      case 1: Mouse.move(0, 100);  break;
      case 2: Mouse.move(-100, 0); break;
      case 3: Mouse.move(0, -100); break;
    }
    // Mouse.click();                   // Можно кликнуть ЛКМ
    // Mouse.click(MOUSE_MIDDLE);       // Или RIGHT, LEFT, MIDDLE
    if (++count > 3) count = 0;         // Циклический сдвиг от 0 до 3
  }

  HID.tick();   // Вызываем тикер не реже чем каждые 10 мс!
}

Версии

  • v1.0

Баги и обратная связь

При нахождении багов создавайте Issue, а лучше сразу пишите на почту [email protected]
Библиотека открыта для доработки и ваших Pull Request'ов!

Comments
  • Ошибка #define EASYHID_SOFT_DETACH

    Ошибка #define EASYHID_SOFT_DETACH

    С версией библиотеки v1.0 данной проблемы не наблюдается

    In file included from /Users/aruytehno/Documents/Arduino/libraries/EasyHID/HIDPrivate.h:8:0,
                     from /Users/aruytehno/Documents/Arduino/libraries/EasyHID/EasyHID.h:23,
                     from /Users/aruytehno/Documents/Arduino/sketch_apr08a/sketch_apr08a.ino:13:
    /Users/aruytehno/Documents/Arduino/libraries/EasyHID/usbconfig.h:29:24: error: missing expression between '(' and ')'
     #if(EASYHID_SOFT_DETACH)     // PULLUP по желанию
                            ^
    Несколько библиотек найдено для "EasyHID.h"
     Используется: /Users/aruytehno/Documents/Arduino/libraries/EasyHID
    Не используется: /Users/aruytehno/Documents/Arduino/libraries/EasyHID 2
    exit status 1
    Ошибка компиляции для платы Arduino Uno.
    
    opened by aruytehno 5
  • Не собирается под ATmega8 и ядром miniCore.

    Не собирается под ATmega8 и ядром miniCore.

    Вроде в описании указана поддержка ATmega8. Но по факту ее нет. Попробовал добавить соответствующий define в usbconfig.h в секцию для голых камней. Начало собираться, но только при использовании внешнего кварца. Если выбрать внутренний на 8МГц, то при компиляции вот такая ошибка:

    H:\arduinoPortable\portable\packages\arduino\tools\avr-gcc\7.3.0-atmel3.6.1-arduino7/bin/avr-gcc" -c -g -x assembler-with-cpp -mmcu=atmega8 -DF_CPU=8000000L -DARDUINO=10819 -DARDUINO_AVR_ATmega8 -DARDUINO_ARCH_AVR "-IH:\arduinoPortable\portable\packages\MiniCore\hardware\avr\2.1.3\cores\MCUdude_corefiles" "-IH:\arduinoPortable\portable\packages\MiniCore\hardware\avr\2.1.3\variants\standard" "-IH:\arduinoPortable\libraries\EasyHID-main" "H:\arduinoPortable\libraries\EasyHID-main\usbdrvasm_includer.S" -o ..\AppData\Local\Temp\arduino_build_567725\libraries\EasyHID-main\usbdrvasm_includer.S.o" In file included from H:\arduinoPortable\libraries\EasyHID-main\usbdrvasm_includer.S:2:0: H:\arduinoPortable\libraries\EasyHID-main\usbdrv/usbdrvasm.S:390:9: error: #error "USB_CFG_CLOCK_KHZ is not one of the supported non-crc-rates!"

    error "USB_CFG_CLOCK_KHZ is not one of the supported non-crc-rates!"

         ^~~~~
    

    Используем библиотеку EasyHID-main в папке: H:\arduinoPortable\libraries\EasyHID-main (legacy) exit status 1 Ошибка компиляции для платы ATmega8.

    Возможна ли работа данного камня от внутреннго кварца с этой либой?

    opened by DmitryTatarinov 4
  • Ошибка дескритора. HID не отправляет Handshake

    Ошибка дескритора. HID не отправляет Handshake

    В моём HID устройстве есть нужда работать от аккумулятора и отключаться от usb при это оставаясь в работе. Виходит так что при первом подключении к usb HID определяется а после переподключения уже появляется ошибка дескриптора, с помощью логического анализатора увидел что после переподключения HID не отправляет пакет Handshake. Вот кусок кода: https://pastebin.com/PdJRAhVd

    Использую микроконтролер Atmega8 16mhz и среду разработки PlatformIO

    Первое подключение: image

    Второе подключение: image

    opened by Kiprus 3
  • Alt+Tab = Переход в гибернацию

    Alt+Tab = Переход в гибернацию

    При нажатии на энкодер и прокрутке должно срабатывать нажатие Alt+Tab, но почему-то происходит отправка девайса в гибернацию(комп/ноут, на Android просто блокировка). Может я делаю что-то не так?

    void loop() { if (enc.tick()) { if (enc.isClick()) Keyboard.clickMultimediaKey(KEY_PLAYPAUSE); // Клик по кнопке else if (enc.isLeft()) Keyboard.clickMultimediaKey(KEY_VOL_UP); // Вращение вправо else if (enc.isRight()) Keyboard.clickMultimediaKey(KEY_VOL_DOWN); // Вращение влево else if (enc.isLeftH()){ // Вращение вправо с нажатием Keyboard.clickSystemKey(KEY_LEFT_ALT); Keyboard.click(KEY_TAB); } else if (enc.isRightH()){ // Вращение влево с нажатием Keyboard.clickSystemKey(KEY_LEFT_ALT); Keyboard.clickSystemKey(KEY_LEFT_SHIFT); Keyboard.click(KEY_TAB); } }

    ATTiny88(MH-Tiny), не знаю какая версия библиотеки(скачал с пункта "Установка"), Arduino IDE 1.8.19, стандартные примеры работают хорошо.

    UPD: А так же, возможно добавление скролла мыши?

    opened by TRRAXT 2
  • Ошибка при компиляции для Digispark

    Ошибка при компиляции для Digispark

    
    In file included from D:\Documents\Arduino\libraries\EasyHID-main\usbdrvasm_includer.S:2:0:
    D:\Documents\Arduino\libraries\EasyHID-main\usbdrv/usbdrvasm.S:386:35: fatal error: usbdrvasm165.inc: No such file or directory
     #       include "usbdrvasm165.inc"
                                       ^
    compilation terminated.
    exit status 1
    Ошибка компиляции для платы Digispark (Default - 16.5mhz).
    
    

    . Еще у Вас в описании есть пример, в этом примере не указан #include.

    opened by korenevskiy 37
Releases(2.2)
Owner
Alex
Alex
Remote Arduino Uno-based TFT graphical display for VSR Mini Mega Alternator Regulator

VSMMAR_Remote_Display Remote Arduino Uno-based TFT graphical display for VSR Mini Mega Alternator Regulator This project is an optional accessory for

null 1 Nov 6, 2021
🧑‍🎓 hack-sstu-prog — библиотека на C для ускорения написания кода. Содержит множество функций из разных языков, которых нет в языке C.

??‍?? hack-sstu-prog. C тебя логика — с нас всё остальное. Установка Скачать файлы hack-sstu-prog.c и hack-sstu-prog.h. Поместить в корневой файл свое

null 2 May 15, 2022
Лёгкая библиотека для INA219 и INA226

GyverINA Лёгкая библиотека для модулей power-monitor'ов INA219 и INA226 Совместимость Совместима со всеми Arduino платформами (используются Arduino-фу

Alex 10 Oct 10, 2022
USB serial TTY for the Arduino Uno with ILI9341 LCD screen shield

ILI9341TTY USB serial TTY for the Arduino Uno with ILI9341 LCD screen shield [video] Semigraphics, ANSI, unicode, and an Arduino LCD-screen terminal I

M Rule 72 Sep 30, 2022
A Fingerprint Door Lock using a microprocessor named Arduino UNO and programming through Arduino IDE

INSTRUCTIONS - The codes for the Fingerprint Door lock are present in the Code For Fingerprint Door Lock folder The instructions of how to operate the

Akhil Sahukaru 15 Mar 3, 2022
Physical Tic-Tac-Toe smart board with PvP mode and two levels of AI. Built atop a custom PCB connected to an Arduino Mega 2560.

TicTacToe_SmartBoard The files in TicTacToe_SmartBoard are based on the files in https://wiki.illinois.edu/wiki/display/ECE110HLSF15/Tic-Tac-Toe+Smart

Hyrum Dickinson 2 Jul 22, 2022
4 channel servo controller code for Arduino Mega 2560 for AASD-15A and similar motor driver

eh-msc-4dof 4 channel servo controller code for Arduino Mega 2560 for AASD-15A and similar motor driver Arduino sketch for generating pulses needed to

null 6 Sep 9, 2022
Library of useful C++ snippets and reusable classes I've created as I build out Arduino Uno and ESP32 projects.

Arduino Snippets Library of useful C++ snippets and reusable classes I've created as I build out Arduino Uno and ESP32 projects. Button A simple butto

Max Lynch 7 Feb 5, 2022
a pc heat verifier using arduino uno and oled screen(ssd1306)

pc-heat-check a pc heat verifier using arduino uno and oled screen(ssd1306) to this application works needs this other application running: https://gi

Helder Lourenço de Abreu Marques 1 Oct 5, 2022
Play Nintendo Switch using an original N64 controller via an Arduino Uno!

N64 -> Arduino Uno -> Nintendo Switch Description By connecting an original N64 controller to an Arduino UNO R3 running this code, and plugging the US

null 19 Oct 24, 2022
Arduino Sketch and a Web Bluetooth API for loading models and running inference on the Nano Sense 33 BLE device.

TF4Micro Motion Kit This repo contains the Arduino Sketch and a Web Bluetooth API for loading models and running inference on the device. Install and

Google Creative Lab 52 Nov 24, 2022
The ultimate battery tester with ESR measurement and discharge graph. Based on an Arduino Nano and a 1602 LCD.

Ultimate-Battery-Tester Version 1.0.0 Features Measures the ESR (equivalent series resistance) of the battery. This is an idicator of the health of th

Armin 10 Nov 1, 2022
ESP32 software USB host through general IO pins. We can connect up to 4 USB-LS HID (keyboard mouse joystick) devices simultaneously.

esp32_usb_soft_host esp32 USB-LS pure software host thru general IO pins. Up to 4 HID devices simultaneously. board ~$3 :https://www.aliexpress.com/pr

Samsonov Dima 304 Nov 25, 2022
ESP8266 software USB host through general IO pins. We can connect up to 2 USB-LS HID (keyboard mouse joystick) devices simultaneously.

esp8266_usb_soft_host Test for esp8266 usb host . Works with ESP-IDF v3.4 80MHz and 160MHz. WorkInProgress Test run with mouse & combined mouse & keyb

Samsonov Dima 28 Sep 1, 2022
Tiny and portable usb host and device stack for mcu with usb ip

Tiny and portable usb host and device stack for mcu with usb ip

sakumisu 514 Nov 29, 2022
USB-C_PCB_experiments - USB-C ports made from a flex PCB and an ATtiny84A

USB-C PCB Experiments This is part of an ongoing series of projects involving creative interpretations of the USB mechanical standards. You've probabl

Sam Ettinger 23 Sep 5, 2022
Anotter USB temperature logger that can record up to four channels with thermocouple or NTCs connected via CDC directly or SCPI to USB.

temperature-logger Anotter USB temperature logger that can record up to four channels with thermocouple or NTCs connected via CDC directly or SCPI to

Jana Marie Hemsing 50 Nov 24, 2022
Proyecto indie retro game: para SEGA Mega Drive/Genesis, creado con SGDK

Penguin-World Proyecto indie retro en desarrollo: Plataforma: SEGA Mega Drive/Genesis Que está desarrollado: +Logos + Titulo + Música +Primera Zona de

Alice Sim1 14 Nov 4, 2022
A Sega Mega Drive/Sega Genesis emulator

Overview This is clownmdemu, a Sega Mega Drive (a.k.a. Sega Genesis) emulator. It is currently in the very early stages of development: it can run som

null 27 Nov 3, 2022