Обычно решение задачи создания самодельных средств ввода (клавиатура, мышь, геймпад) для ПК решается на специально предназначенных для этого платах - Arduino Leonardo. На моем канале есть несколько реализованных проектов на этой платформе: самодельный руль и велотренажёр предназначенные для игры в авто или вело симуляторы.
Arduino Leonardo отличается от всех предыдущих плат тем, что микроконтроллер ATmega32u4 имеет встроенный интерфейс USB. С точки зрения компьютера Arduino Leonardo является HID устройством (вроде клавиатуры или мыши), поэтому сделать на основе Arduino Leonardo новый компьютерный эмулятор проще, чем с другими платами.
Однако вышедшая 6 сентября 2016 плата ESP32, имеет на борту не только Wi-Fi но и Bluetooth. А это означает, что можно "запилить" беспроводные:
- клавиатуру
- мышь
- геймпад (или руль)
В этой статье разберем пример создания беспроводной клавиатуры.
Для начала необходимо скачать и установить библиотеку:
(будет в архиве с примерами из этой статьи)
https://github.com/T-vK/ESP32-BLE-Keyboard
У библиотеки богатый функционал:
- Отправить нажатия клавиш
- Послать текст
- Нажать / отпустить отдельные клавиши
- Поддерживаются медиа-клавиши
- Чтение состояния Numlock / Capslock / Scrolllock
- Отображения уровня заряда (в основном работает, но не отображается в строке состояния Android)
- Совместим с Android
- Совместимость с Windows
- Совместим с Linux
- Совместим с MacOS X (нестабильно, у некоторых возникают проблемы, не работает со старыми устройствами)
- Совместимость с iOS (нестабильна, у некоторых возникают проблемы, не работает со старыми устройствами)
Для тестирования соберем макет и напишем несколько примеров. Потребуется: плата ESP32 WROOM DevKit v1, две кнопки и макетная плата.
Если у вас не ноутбук, а стационарный ПК, то еще и bluetooth адаптер.
Первый пример простой. Если клавиатура подключена к ПК, встроенный светодиод горит, если нет - то не горит. bleKeyboard.isConnected()
После загрузки скетча идем в Windows, и добавляем устройство.
Встроенный в плату ESP32 светодиод светится, можно двигаться дальше.
Все функции библиотеки аналогичны Ардуиновским, так что если у Вас есть готовый проект проводной клавиатуры на Arduino, его легко можно сделать беспроводным переписав только "шапку" программы подменив библиотеку и метод создания объекта.
https://www.arduino.cc/reference/en/language/functions/usb/keyboard/
Разберем несколько примеров работы с библиотекой. Метод press() нажимает клавишу, метод releaseAll() отпускает все клавиши.
Для нажатий Ctrl, Alt, ENTER и других функциональных клавиш существует специальная таблица модификаторов:
https://www.arduino.cc/reference/en/language/functions/usb/keyboard/keyboardmodifiers/
Вот пример нажатия клавиши ENTER
Реализацию нажатий сочетаний клавиш, можно реализовать следующим способом:
Получилось универсальное устройство для написания любых статей, курсовых и дипломных работ:
- кнопка BT1 копирует информацию в буфер обмена
- кнопка BT2 вставляет информацию из буфера обмена
Набор текста осуществляется следующим образом.
Библиотека поддерживает работу с мультимедийными клавишами
- кнопка BT1 открывает Калькулятор
- кнопка BT2 открывает Мой компьютер
Существует также специальная информация Bluetooth, которую вы можно установить при создании объекта клавиатура(необязательно):
- Вместо BleKeyboard bleKeyboard;
- BleKeyboard bleKeyboard("Bluetooth Device Name", "Bluetooth Device Manufacturer", 100); (Максимальная длина - 15 символов, все остальное будет усечено.)
Третий параметр - это начальный уровень заряда батареи вашего устройства. Чтобы отрегулировать уровень заряда батареи позже, вы можете просто отправить команду, например:
- bleKeyboard.setBatteryLevel(50); (установить уровень заряда батареи на 50%).
По умолчанию уровень заряда батареи установлен на 100%, имя устройства ESP32 Bluetooth Keyboard и производитель Espressif.
Также существует setDelayметод установки задержки между каждым ключевым событием. Например:
bleKeyboard.setDelay(10) - 10 миллисекунд. (по умолчанию это 8.)
Эта функция предназначена для компенсации некоторых приложений и устройств, которые не могут обрабатывать быстрый ввод и будут пропускать буквы, если за короткий промежуток времени будет отправлено слишком много ключей.
Все функции библиотеки работают как нужно, а Arduino Leonardo пожалуй можно отправлять на свалку истории, особенно учитывая то, что ESP32 стоит дешевле даже Китайской реплики платы Arduino Leonardo, не говоря уже о фирменных платах Arduino.
Плату ESP32 покупал в этом магазине
В следующих статьях обязательно попробуем ESP32 в качестве беспроводной мышки и геймпада.
Мои самодельные компьютерные рули на Arduino Leonardo:
Полный список всех статей канала доступен по этой ссылке.
Примеры кода и саму библиотеку можно взять тут:
Всем удачи!