Найти в Дзене
Электроника, ESP32, Arduino

Как сделать беспроводную Bluetooth клавиатуру на ESP32

Обычно решение задачи создания самодельных средств ввода (клавиатура, мышь, геймпад) для ПК решается на специально предназначенных для этого платах - Arduino Leonardo. На моем канале есть несколько реализованных проектов на этой платформе: самодельный руль и велотренажёр предназначенные для игры в авто или вело симуляторы.

Платы на микроконтроллере ATmega32u4 Arduino Leonardo и Arduino MICRO
Платы на микроконтроллере ATmega32u4 Arduino Leonardo и Arduino MICRO

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, две кнопки и макетная плата.

Схема подключения кнопок
Схема подключения кнопок
ESP32 + Bluetooth "свисток" для "компа"
ESP32 + Bluetooth "свисток" для "компа"

Если у вас не ноутбук, а стационарный ПК, то еще и bluetooth адаптер.

Первый пример простой. Если клавиатура подключена к ПК, встроенный светодиод горит, если нет - то не горит. bleKeyboard.isConnected()

Тестирование статуса подключения
Тестирование статуса подключения

После загрузки скетча идем в Windows, и добавляем устройство.

Иконка в системном трее рядом с часами
Иконка в системном трее рядом с часами
Добавляем клавиатуру на ESP32 в Windows
Добавляем клавиатуру на ESP32 в Windows

Встроенный в плату ESP32 светодиод светится, можно двигаться дальше.

ESP32 определилась на компьютере как клавиатура
ESP32 определилась на компьютере как клавиатура

Все функции библиотеки аналогичны Ардуиновским, так что если у Вас есть готовый проект проводной клавиатуры на Arduino, его легко можно сделать беспроводным переписав только "шапку" программы подменив библиотеку и метод создания объекта.

https://www.arduino.cc/reference/en/language/functions/usb/keyboard/

Разберем несколько примеров работы с библиотекой. Метод press() нажимает клавишу, метод releaseAll() отпускает все клавиши.

При нажатии на кнопку 1 будет нажиматься клавиша A(Ф) в зависимости от раскладки клавиатуры
При нажатии на кнопку 1 будет нажиматься клавиша A(Ф) в зависимости от раскладки клавиатуры

Для нажатий 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.

-14

Плату ESP32 покупал в этом магазине

В следующих статьях обязательно попробуем ESP32 в качестве беспроводной мышки и геймпада.

Мои самодельные компьютерные рули на Arduino Leonardo:

Полный список всех статей канала доступен по этой ссылке.

Примеры кода и саму библиотеку можно взять тут:

Всем удачи!