ESP32 bluetooth media keyboard

zenkiller

✩✩✩✩✩✩✩
4 Дек 2022
1
0
Здравствуйте, в автомобиле используется телефон как источник звука по блютузу, необходимо сделать клавиатуру, чтобы телефон подключался к ней, и она управляла громкостью и переключением треков, чтобы телефон не вытаскивать каждый раз. Собираю прототип на коленке на энкодере(Библиотека Гайвера - с ней проблем нету), а вот с подключением к ESP32 по bluetooth возникла проблема.
Использую библиотеку: 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");
  }
}
 

starinakipr

✩✩✩✩✩✩✩
23 Окт 2023
1
0
Такая же история. Windows видит, а телефон на Андроиде не видит клавиатуру... Ответ так и не нашёл. Есть у кого решение?
 

yojig

✩✩✩✩✩✩✩
16 Апр 2024
1
0
интересно, у меня наоборот мак и айфон видят esp32 по блютуз, а комп на винде нет (видит только по кабелю, но какой смысл в этом тогда))
 

Sevan

✩✩✩✩✩✩✩
4 Ноя 2018
2
0
Удалось скрестить ESP32 BLE Keyboard Library и EncButton, работает в Windows 11 и android.
Ble_media_enc:
#define ENC_DT 19
#define ENC_CK 18
#define ENC_SW 5

#include <EncButton.h>
EncButton enc(ENC_DT, ENC_CK, ENC_SW);

#include <BleKeyboard.h>

BleKeyboard bleKeyboard("BT-Encoder", "Sev@n", 100);

void setup() {
  Serial.begin(115200);
  Serial.println("Starting BLE work!");
  bleKeyboard.begin();

}

void loop() {

  enc.tick();               // Тикер энкодера

  /* Отслеживание энкодера и выдача команд */
  if (enc.left())       bleKeyboard.write(KEY_MEDIA_VOLUME_DOWN);
  if (enc.right())      bleKeyboard.write(KEY_MEDIA_VOLUME_UP);
  if (enc.leftH())      bleKeyboard.write(KEY_MEDIA_PREVIOUS_TRACK);
  if (enc.rightH())     bleKeyboard.write(KEY_MEDIA_NEXT_TRACK);
  if (enc.hasClicks(1)) bleKeyboard.write(KEY_MEDIA_PLAY_PAUSE);
  if (enc.hasClicks(2)) bleKeyboard.write(KEY_MEDIA_MUTE);
}