Как лучше реализовать программу, чтобы можно было легко перепрограммировать кнопки esp32?

ambilight

✩✩✩✩✩✩✩
12 Июл 2021
31
0
Чтобы зашёл, выбрал кнопку, нажал сочетание клавиш, например, ctrl+shift+e и всё?
Веб страницу создавать и перепрошивать esp32 по wifi? или можно прошить по bluetooth и GUI сделать на processing?
Вот такой контроллер реализовываю и хочу создать программу/страницу для быстрого и удобного переназначения макросов.
 

ambilight

✩✩✩✩✩✩✩
12 Июл 2021
31
0
@Lumenjer,
windows 7 не поддерживается. А другие реализации используют wifi, но если добавить реализацию сервера в прошивку уже не хватает памяти.
 

ambilight

✩✩✩✩✩✩✩
12 Июл 2021
31
0
@Lumenjer, Хочется, чтобы это было универсальное устройство.
Чтобы работало на любом компьютере без предустановки эмулятора,ide и т.д. Маленький плагин или вебсайт на котором можно переконфигурировать кнопки.
 

kDn

★★★★★✩✩
18 Ноя 2019
1,103
437
но если добавить реализацию сервера в прошивку уже не хватает памяти
???

Судя по вашим вопросам вы не справитесь с данной задачей. Но можете попробовать, поглядев реализацию переназначения кнопок в проекте лампы.
 

Lumenjer

★★★✩✩✩✩
10 Дек 2020
220
112
Хочется, чтобы это было универсальное устройство.
Тогда переназначать/обновлять надо через WiFi. Это проще реализовать, чем играться с блютузом.
Можете попробовать фреймворк EmbUI, если не сможете реализовать настройку кнопок, то хотя бы сможете залить прошивку через любой браузер
 

ambilight

✩✩✩✩✩✩✩
12 Июл 2021
31
0
@Lumenjer,
Сейчас только задумался, а как изменять саму прошивку, чтобы её потом залить...
Простой GUI на python/processing и два поля с выбором кнопки и где можно написать горячую клавишу-> добавить обработчик этих кнопок, в прошивке будет делать find and replace (например BTN 15 -> BTN 2, а как редактировать целый блок case.......записывать в временную переменную то что было, и менять bleKeyboard.press("старая") -> bleKeyboard.press("новая горячая клавиша")
 

bort707

★★★★★★✩
21 Сен 2020
2,899
862

@ambilight,
напомните, кто это писать-то будет? Если нанятый программист - пусть он и разбирается
 

ambilight

✩✩✩✩✩✩✩
12 Июл 2021
31
0
@bort707,
Да я не прошу реализовывать, у меня с логикой проблемы, как это будет происходить всё.
Не уж то нету готовых проектов, просто перезаписать кнопку по bluetooth...по факту stream deck только на esp32, без сенсорного экрана и вообще экранов.
 

Lumenjer

★★★✩✩✩✩
10 Дек 2020
220
112
@ambilight, Вы пока не понимаете, как хотите усложнить себе жизнь с динамическим изменением кнопок
Мой совет, берите фреймворк, сделайте прошивку под свои нужды, отладьте смену кнопок прошивкой, получится - збс, думайте уже над тем, как менять это динамически.
Задайтесь вопросом, что происходит, когда вы жмете кнопку на устройстве? Срабатывает нужный кейс этой кнопки, где указан вызов метода
bleKeyboard.write(KEY_MEDIA_VOLUME_UP);
Отсюда вопрос, что такое KEY_MEDIA_VOLUME_UP и что в себе содержит?
*Я ответ знаю, но хочу услышать его от вас
 

ambilight

✩✩✩✩✩✩✩
12 Июл 2021
31
0
@Lumenjer,
Так у меня уже получилось запрограммировать кнопки на ввод текста или нажатие клавиш.
C++:
#include <BleKeyboard.h>
BleKeyboard bleKeyboard("ZoomBox","Ph");
boolean connected;
#define BTN1 15
#define BTN2 12
#define NUMBUTTONS 2

int buttons[NUMBUTTONS] = {BTN1, BTN2};
unsigned long btntime[NUMBUTTONS];
boolean btnpress[NUMBUTTONS];

char line[80];
unsigned long t;
int n;

void setup() {
  Serial.begin(115200);
  Serial.write("Starting...\n");
 
  for (int i = 0; i < NUMBUTTONS; i++) {
    pinMode(buttons[i], INPUT_PULLUP);
    btntime[i] = 0;
    btnpress[i] = false;
  }
  bleKeyboard.begin();
  connected = false;
}

void loop() {
  for (int i = 0; i < NUMBUTTONS; i++) {
    if (!digitalRead(buttons[i]))
      {
      if (btntime[i] == 0) {
        btntime[i] = millis();
      }
      else {
        // Button is still pressed
        if (millis() - btntime[i] > 20 && !btnpress[i]) {
          btnpress[i] = true;
          Serial.println(i);
          Serial.println("hello");
          switch (i) {

          case 0:
            Serial.println("Test");
            bleKeyboard.press(KEY_LEFT_CTRL);
            bleKeyboard.press(KEY_LEFT_ALT);
            bleKeyboard.press(KEY_DELETE);
            delay(100);
            bleKeyboard.releaseAll();
            break;
          case 1:
            Serial.println("Test");
            bleKeyboard.print("Hello world");
            delay(100);
            break;
            }
        }
      }
    }
    else {
      if (btntime[i] != 0) {
        btntime[i] = 0;
        btnpress[i] = false;
      }
    }
  }
}
Подключаю к повербанку, мгновенно подключается.
Нажимаю 1 кнопку вводится фраза "Hello world"
Нажимаю 2 кнопку нажимается ctrl+alt+delete всё работает быстро и чётко.
Теперь осталось сделать так, чтобы можно было поменять действие при нажатии на эту кнопку. Например подключить esp32 к компьютеру, и в программе было так. Только я не знаю, что должно происходить при нажатии на Update....
1637610808567.png
 

ambilight

✩✩✩✩✩✩✩
12 Июл 2021
31
0
@Lumenjer,
Повышение громкости, esp32 отправляет сигнал, bluetooth адаптер его принимает и операционная система его обрабатывает как-то и повышает громкость?
 

Lumenjer

★★★✩✩✩✩
10 Дек 2020
220
112
@ambilight, Ответ неверный. Что он значит именно в коде? В вызове этого метода
bleKeyboard.write(KEY_MEDIA_VOLUME_UP);

***
KEY_MEDIA_VOLUME_UP я выбрал чисто ради примера, можно заменить на любую "кнопку"
KEY_LEFT_CTRL
KEY_LEFT_SHIFT
KEY_LEFT_ALT
 

Lumenjer

★★★✩✩✩✩
10 Дек 2020
220
112
@ambilight, Верно, константные значения для обработки нажатий.
Чтобы сделать смену конфига динамической вам придется где-то хранить эти значения (принимать при настройке и хранить для последующей обработки при нажатии). Но это часть работы, следующим шагом для вас будет сделать так, чтобы ваш клиентский интерфейс правильно отображал (для вас) и правильно задавал (для конфига в устройство) эти значения, вы уверены, что сможете это сделать прямо сейчас?