HID BLE клавиатура для телефона на базе IOS/Android

NapalDed

✩✩✩✩✩✩✩
10 Апр 2024
5
0
Здравствуйте! Прошу помощи!🙏

Разрабатываю такой, казалось бы, простой проект - селфи BLE пульт для телефона на базе IOS/Android.

Необходимо чтобы устройство, при нажатии на кнопку, передавало команду на телефон - снять фото. А при зажатии кнопки- снять видео.
Телефон и устройство должны быть соединены по BLE. И самая загвоздка - всё это должно происходить без дополнительных телодвижений, по типу приложений на телефонах, которые бы обрабатывали сигнал с устройства.

Поизучав данную тему, понял, что данный проект можно сделать на esp32. Я использовал esp32 dev-kit. При помощи библиотеки BleKeyboard.h (https://github.com/T-vK/ESP32-BLE-Keyboard) можно прикинуться bluetooth-клавиатурой для телефона и просто создать с ним пару. А далее - эмулировать нажатие кнопки громкости на телефоне при нажатии кнопки на самом пульте. Такой вариант действительно сработал! Всё подключается и работает как надо.

НО теперь передо мной встал другой вопрос - esp32 слишком много потребляет для устройства, которое должно работать на аккумуляторе.
В моем случае около 70-80 мА...

Решил попробовать с другой стороны и хочу esp32 заменить на , допустим, на какую нибудь arduino + bluetooth модуль. У меня есть arduino nano и модуль Bluetooth HM-10.

Порыв в интернете не нашёл готовых библиотек под это дело или каких нибудь примеров:(
Лишь только вот эту тему https://community.alexgyver.ru/thre...-besprovodnoj-klaviatury-nuzhna-pomosch.8110/

Там человек использует Arduino Nano 33 BLE и библиотеку Nano33BleHID.h для подключения своей клавиатуры к ПК. Но я так понял в моем случае она мне не поможет.

Пожалуйста, подскажите, можно ли как то сделать тоже самое, что я сделал на esp32, только теперь на arduino?😟

Вот мой код для esp32

C++:
#include <BleKeyboard.h>
#include "GyverButton.h"

#define PIN 4 // Пин кнопки
GButton butt1(PIN);
BleKeyboard bleKeyboard;

bool status=true;


void setup() {
  Serial.begin(115200);

  butt1.setDebounce(50);        // настройка антидребезга (по умолчанию 80 мс)
  butt1.setTimeout(300);        // настройка таймаута на удержание (по умолчанию 500 мс)
  butt1.setClickTimeout(600);   // настройка таймаута между кликами (по умолчанию 300 мс)
  butt1.setType(HIGH_PULL);

  Serial.println("Starting BLE work!");
  bleKeyboard.begin();
}

void loop() {
   butt1.tick();  // обязательная функция отработки. Должна постоянно опрашиваться

  if(bleKeyboard.isConnected())
  {
 
    bleKeyboardconnected();
  }


}

void bleKeyboardconnected()
{
   if (butt1.isClick())
  {
    ledcWrite(pwmChannel, motorSpeed); // Вращение мотора
    bleKeyboard.write ( KEY_MEDIA_VOLUME_UP );
    bleKeyboard.setDelay(10);

    
    Serial.println ("Photo detected");
  }

  if (butt1.isPress())
  {
    bleKeyboard.press ( KEY_MEDIA_VOLUME_UP );
    
    
    Serial.println ("Video detected");
    
  }
 
  if (butt1.isRelease())
  {
    bleKeyboard.release(KEY_MEDIA_VOLUME_UP);
    
  }
 

rkit

★★★✩✩✩✩
5 Фев 2021
510
127
То же самое - можно. А вот чтобы мало электричества потребляло - придется все-таки выпаивать с платы лишнее и оптимизировать программу под низкое потребление. И там и там.
 

NapalDed

✩✩✩✩✩✩✩
10 Апр 2024
5
0
@rkit,
Добрый день! А подскажите, пожалуйста, как это сделать? И на чем именно? Какая библиотека мне поможет эмулировать клавиатуру на arduino?

По поводу убрать всё лишнее - да я согласен, это снизит потребление. Но в случае с esp32 я не думаю, что получится сильно его снизить таким образом, поэтому решил перейти на что то другое. Esp32, я так понял, очень прожорливая по питанию, даже её младшие модели,например ESP32-S0WDQ6.
В конечном итоге - я хочу сделать схему своего макета, выкинуть все лишнее и сделать свою платку пульта.
 

NapalDed

✩✩✩✩✩✩✩
10 Апр 2024
5
0
Документацию по esp32-wroom (который у меня стоит на dev-kit) я изучал, там нашёл примерно теже цифры потребления при таком же режиме работы как у меня. Я бы хотел что то менее энергозатратное. Например, тотже HM-10 ест в активном режиме около 10 мА.
1712750055191.png
 

Геннадий П

★★★★★★✩
14 Апр 2021
1,976
635
45
Нормальное потребление в активном режиме.
Судя по инфе (лень в даташит лезть) отключение WiFi сильно погоды не меняет.
Использовать пониженную частоту (первая попавшаяся ссылка: ESP32 practical power saving: manage WiFi and CPU – 1 – Renzo Mischianti )
Использовать спящий режим при неактивности (зачем вам тратить энергию когда не используете устройство?)

И да, какой модуль ESP используете? Может на нем есть прочие энергопотребляющие элементы.
 

NapalDed

✩✩✩✩✩✩✩
10 Апр 2024
5
0
@Геннадий П,
Добрый день!
Я использую модуль esp32-wroom, он у меня стоит на dev-kit.
Тоже подумал об использовании пониженной частоты, смог опустить потребление до 70ма. Это всё равно многовато(
Спящий режим - да, тоже вариант, но я так понял, даже при "лёгком сне" мой ble сервер будет выключен. Хотя конечно телефон и пульт уже состоят в паре, подключение будет автоматическим, если настроить выход из сна на нажатие кнопки "селфи":unsure:. Спасибо за мысль, надо опробовать.
1712751335100.png1712750985769.png