Здравствуйте, в автомобиле используется телефон как источник звука по блютузу, необходимо сделать клавиатуру, чтобы телефон подключался к ней, и она управляла громкостью и переключением треков, чтобы телефон не вытаскивать каждый раз. Собираю прототип на коленке на энкодере(Библиотека Гайвера - с ней проблем нету), а вот с подключением к ESP32 по bluetooth возникла проблема.
Использую библиотеку: https://github.com/T-vK/ESP32-BLE-Keyboard
Телефон Samsung s10e (Android 12) не видит устройство, при этом макбук видит и подключается(причем подключение как то судорожно происходит, Подключено-Отключено-Подключено-Отключено-Подключено-Отключено несколько раз и в итоге подключается и работает)
При использовании библиотеки https://github.com/pschatzmann/ESP32-A2DP телефон видит и подключается нормально, но там я не разобрался как отправлять команды управления воспроизведением и изменением громкости.
Подозреваю, что с первой библиотекой есть нюанс, что используется BLE режим который не отображается в поиске блютуз устройств на телефоне. А вот в программе BLE Scaner устройство отображается
Прикладываю код
Использую библиотеку: https://github.com/T-vK/ESP32-BLE-Keyboard
Телефон Samsung s10e (Android 12) не видит устройство, при этом макбук видит и подключается(причем подключение как то судорожно происходит, Подключено-Отключено-Подключено-Отключено-Подключено-Отключено несколько раз и в итоге подключается и работает)
При использовании библиотеки https://github.com/pschatzmann/ESP32-A2DP телефон видит и подключается нормально, но там я не разобрался как отправлять команды управления воспроизведением и изменением громкости.
Подозреваю, что с первой библиотекой есть нюанс, что используется BLE режим который не отображается в поиске блютуз устройств на телефоне. А вот в программе BLE Scaner устройство отображается
Прикладываю код
Код:
#define CLK 2
#define DT 15
#define SW 4
#include "GyverEncoder.h"
Encoder enc1(CLK, DT, SW);
#include <BleKeyboard.h>
BleKeyboard bleKeyboard("KIA Media key");
#define USE_NIMBLE
void setup() {
Serial.begin(115200);
enc1.setType(TYPE2); // тип энкодера TYPE1 одношаговый, TYPE2 двухшаговый. Если ваш энкодер работает странно, смените тип
bleKeyboard.begin();
}
void loop() {
// обязательная функция отработки. Должна постоянно опрашиваться
enc1.tick();
if (enc1.isRight()){
bleKeyboard.write(KEY_MEDIA_VOLUME_UP);
Serial.println("Right"); // если был поворот
}
if (enc1.isLeft()){
bleKeyboard.write(KEY_MEDIA_VOLUME_DOWN);
Serial.println("Left");
}
if (enc1.isRightH()){
Serial.println("Right holded");
bleKeyboard.write(KEY_MEDIA_NEXT_TRACK);// если было удержание + поворот
}
if (enc1.isLeftH()) {
bleKeyboard.write(KEY_MEDIA_PREVIOUS_TRACK);
Serial.println("Left holded");
}
}