Однажды я узнал про существование микроконтроллеров ESP32, обладающих встроенными Bluetooth и Wi-Fi модулями. Тогда я начал всем рассказывать, какая крутая железка, пока мне ее наконец-то не подарили.
На момент создания материала, такой микроконтроллер можно купить в РФ с доставкой менее, чем за 1000 рублей. Ну не чудо ли?
Получив железку в руки, я начал думать, зачем же она мне. В первую очередь пришла мысль реализовать глушилку Bluetooth-колонки, но об этом как-нибудь позже.
Тут я вспомнил времена учебы в институте, где мы имитировали HID-устройство с помощью микроконтроллеров. Поэтому, задался вопросом, можно ли то же самое сделать для Bluetooth-клавиатуры. Оказывается, таких проектов довольно много, и я решил один из них повторить.
На GitHub существует прекрасная библиотека, позволяющая реализовать мою идею.
Итак, начнем.
Настройка окружения
Для написания кода можно использовать буквально что угодно, однако довольно каноничной и удобной средой разработки является Arduino IDE.
Скачиваем IDE и запускаем.
Здесь нам необходимо скачать пакет для поддержки плат ESP32:
Переходим в менеджер плат — нажимаем Ctrl+Shift+B
В открывшемся окне вводим ESP32
Здесь нам необходимо скачать esp32 от Espressif. Замечу, что последняя версия не подходит для используемой библиотеки, и нам нужна версия 2.0.1 – на более поздних не компилируется.
Затем, создаем новый скетч нажатием Ctrl+N
Скачиваем библиотеку и подключаем ее через контекстное меню Скетч->Подключить библиотеку->добавить .ZIP библиотеку
IDE любезно говорит, что библиотека установлена:
Затем, подключаем микроконтроллер к ПК и идем в менеджер устройств – нажимаем WIN+R и вызываем devmgmt.msc
Переходим в Порты (COM и LPT), где видим наше устройство
Если у вас устройство не определяется, необходимо установить драйвер (гуглится по запросу “{Модель чипа} driver”)
Затем, возвращаемся в IDE и конфигурируем настройки платы:
В верхней части рабочего пространства открываем выпадающий список и выбираем пункт “Выберите другую плату и порт”
И настраиваем соответствие названия платы и COM-порта
На этом настройка окружения заканчивается.
Переходим к программированию
В качестве полезной нагрузки будем открывать RickRoll на Youtube.
Берем пример из библиотеки и реализуем следующие функции:
void setup() { Serial.begin(115200); Serial.println("Starting BLE work!"); bleKeyboard.begin(); } void loop() { if(bleKeyboard.isConnected()) { delay(1000); } Serial.println("Waiting 5 seconds..."); delay(5000); }
Далее реализуем открытие web-страницы.
Например, это можно сделать путем вызова powershell с параметрами “-c Start-Process http://example.com”
Напишем простой скрипт, который открывает страницу с видео.
Для этого будем вызывать WIN+R и вводить команду на исполнение.
В библиотеке реализованы следующие функции для ввода текста:
press, release, write, releaseAll, print, поэтому наша функция loop будет выглядеть следующим образом:
void loop() { if(bleKeyboard.isConnected()) { bleKeyboard.press(KEY_LEFT_GUI); bleKeyboard.print("r"); delay(100); bleKeyboard.releaseAll(); delay(100); bleKeyboard.print("powershell.exe -с \"Start-Process https://www. youtube.com/watc h?v=dQw4w9WgXcQ\""); delay(100); bleKeyboard.write(KEY_RETURN); } Serial.println("Waiting 5 seconds..."); delay(5000); }
Однако, по неизвестным мне причинам, ввод длинных строк периодически вызывал залипание клавиши, и вводимая строка превращалась во что-то вроде “powershelllllllllllllll”
Поэтому, путем ручного подбора длины команды, была выработана оптимальная длина, и итоговый скрипт выглядит следующим образом:
#include <BleKeyboard.h> BleKeyboard bleKeyboard; void setup() { Serial.begin(115200); Serial.println("Starting BLE work!"); bleKeyboard.begin(); } void loop() { if(bleKeyboard.isConnected()) { bleKeyboard.press(KEY_LEFT_GUI); bleKeyboard.print("r"); delay(100); bleKeyboard.releaseAll(); delay(100); bleKeyboard.print("powershell.exe"); delay(100); bleKeyboard.print(" -c "); delay(100); bleKeyboard.print("\"Start-Process"); delay(100); bleKeyboard.print(" https://www."); delay(100); bleKeyboard.print("youtube.com/watc"); delay(100); bleKeyboard.print("h?v=dQw4w9WgXcQ\""); delay(100); bleKeyboard.write(KEY_RETURN); delay(1000); } Serial.println("Waiting 5 seconds..."); delay(5000); }
Результат
Загружаем скрипт на микроконтроллер путем нажатия на стрелку вверху рабочего пространства
Немного ждем, пока скетч скомпилируется
И в итоге получаем сообщение об успешной записи кода на плату
Теперь наш микроконтроллер выступает в роли Bluetooth-клавиатуры
Подключаемся к устройству через Bluetooth
И видим, что все работает
GIF
Наверняка, можно использовать имитацию клавиатуры как-нибудь более весело, но как пример вполне сойдет.
Пишите в комментариях, что хотели бы увидеть в реализации на этой платформе. Мне очень интересно разобраться поглубже.
Подписывайтесь на наш telegram-канал AUTHORITY
ссылка на оригинал статьи https://habr.com/ru/articles/838320/
Добавить комментарий