From a3a3498bc38c44b0172456e2dfd6a298e1b90936 Mon Sep 17 00:00:00 2001 From: Razvalyaev Date: Wed, 21 May 2025 02:41:42 +0300 Subject: [PATCH] =?UTF-8?q?=D0=92=D1=80=D0=BE=D0=B4=D0=B5=20=D0=B4=D0=B8?= =?UTF-8?q?=D0=BE=D0=B4=D1=8B=20=D0=B8=20=D1=81=D0=B8=D0=BC=D1=83=D0=BB?= =?UTF-8?q?=D1=8F=D1=86=D0=B8=D1=8F=20=D0=BC=D1=8B=D1=88=D0=BA=D0=B8=20?= =?UTF-8?q?=D1=80=D0=B0=D0=B1=D0=BE=D1=82=D0=B0=D0=B5=D1=82,=20=D0=BD?= =?UTF-8?q?=D0=BE=20=D0=BF=D0=BE=20usb=20=D1=87=D0=B5=D1=82=20=D0=BF=D0=BE?= =?UTF-8?q?=D0=BA=D0=B0=20=D0=BD=D0=B8=D1=87=D0=B5=D0=B3=D0=BE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- mouse/ESP32-BLE-Mouse-master.zip | Bin 8568 -> 8524 bytes mouse/LedControl.cpp | 21 +++++++++--------- mouse/LedControl.h | 18 ++++++++++++++- mouse/mouse.ino | 37 ++++++++++++++++++++++--------- 4 files changed, 54 insertions(+), 22 deletions(-) diff --git a/mouse/ESP32-BLE-Mouse-master.zip b/mouse/ESP32-BLE-Mouse-master.zip index 1b6280862749a3d943f4e7993596fee8dbb06456..42e4b8c380457c694f61ee54a6b8eb04f0429c87 100644 GIT binary patch delta 2705 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 i;vlO6WJ~;FcreateService(COLOR_SERVICE_UUID); // --- Красный --- @@ -37,7 +42,7 @@ void LedControl::setupBLEService(BLEServer *server) { COLOR_CHAR_R_UUID, BLECharacteristic::PROPERTY_READ | BLECharacteristic::PROPERTY_WRITE ); - rChar->setAccessPermissions(ESP_GATT_PERM_READ | ESP_GATT_PERM_WRITE); + // rChar->setAccessPermissions(ESP_GATT_PERM_READ | ESP_GATT_PERM_WRITE); rChar->setValue(currentR); rChar->setCallbacks(new ColorCallbacks(this, 0)); // rChar->addDescriptor(createUserDescription("Red")); @@ -47,7 +52,7 @@ void LedControl::setupBLEService(BLEServer *server) { COLOR_CHAR_G_UUID, BLECharacteristic::PROPERTY_READ | BLECharacteristic::PROPERTY_WRITE ); - gChar->setAccessPermissions(ESP_GATT_PERM_READ | ESP_GATT_PERM_WRITE); + // gChar->setAccessPermissions(ESP_GATT_PERM_READ | ESP_GATT_PERM_WRITE); gChar->setValue(currentG); gChar->setCallbacks(new ColorCallbacks(this, 1)); // gChar->addDescriptor(createUserDescription("Green")); @@ -57,7 +62,7 @@ void LedControl::setupBLEService(BLEServer *server) { COLOR_CHAR_B_UUID, BLECharacteristic::PROPERTY_READ | BLECharacteristic::PROPERTY_WRITE ); - bChar->setAccessPermissions(ESP_GATT_PERM_READ | ESP_GATT_PERM_WRITE); + // bChar->setAccessPermissions(ESP_GATT_PERM_READ | ESP_GATT_PERM_WRITE); bChar->setValue(currentB); bChar->setCallbacks(new ColorCallbacks(this, 2)); // bChar->addDescriptor(createUserDescription("Blue")); @@ -67,15 +72,15 @@ void LedControl::setupBLEService(BLEServer *server) { COLOR_CHAR_BRIGHTNESS_UUID, BLECharacteristic::PROPERTY_READ | BLECharacteristic::PROPERTY_WRITE ); - brChar->setAccessPermissions(ESP_GATT_PERM_READ | ESP_GATT_PERM_WRITE); + // brChar->setAccessPermissions(ESP_GATT_PERM_READ | ESP_GATT_PERM_WRITE); brChar->setValue(currentBrightness); brChar->setCallbacks(new ColorCallbacks(this, 3)); // brChar->addDescriptor(createUserDescription("Brightness")); colorService->start(); - BLEAdvertising *advertising = BLEDevice::getAdvertising(); - advertising->addServiceUUID(COLOR_SERVICE_UUID); + // BLEAdvertising *advertising = BLEDevice::getAdvertising(); + // advertising->addServiceUUID(COLOR_SERVICE_UUID); } @@ -110,11 +115,7 @@ uint8_t LedControl::correctedBrightness(uint8_t percent) { } void LedControl::forceColor(uint8_t r, uint8_t g, uint8_t b) { - currentR = r; - currentG = g; - currentB = b; rgbLed.setPixelColor(0, rgbLed.Color(r, g, b)); rgbLed.setBrightness(correctedBrightness(currentBrightness)); rgbLed.show(); - saveSettings(); // если хочешь сразу сохранять } diff --git a/mouse/LedControl.h b/mouse/LedControl.h index 77f55f7..daa5383 100644 --- a/mouse/LedControl.h +++ b/mouse/LedControl.h @@ -25,11 +25,27 @@ public: void applyColor(); void forceColor(uint8_t r, uint8_t g, uint8_t b); + +#ifndef RED_DEFAULT +#define RED_DEFAULT 0 +#endif + +#ifndef GREEN_DEFAULT +#define GREEN_DEFAULT 0 +#endif + +#ifndef BLUE_DEFAULT +#define BLUE_DEFAULT 0 +#endif + +#ifndef BRIGHT_DEFAULT +#define BRIGHT_DEFAULT 0 +#endif private: Adafruit_NeoPixel &rgbLed; Preferences preferences; - int currentR = 0, currentG = 0, currentB = 0, currentBrightness = 50; + int currentR = RED_DEFAULT, currentG = GREEN_DEFAULT, currentB = BLUE_DEFAULT, currentBrightness = BRIGHT_DEFAULT; BLECharacteristic *colorCharacteristic = nullptr; void loadSettings(); diff --git a/mouse/mouse.ino b/mouse/mouse.ino index e6fcd9e..537aee1 100644 --- a/mouse/mouse.ino +++ b/mouse/mouse.ino @@ -5,10 +5,17 @@ #define LED_PIN 21 // GPIO пин светодиода (скорее всего 48) #define NUM_LEDS 1 // Один RGB светодиод -#define SHOW_REAL_BATTERY -// #define RGB_LED +#define RED_DEFAULT 255 +#define GREEN_DEFAULT 0 +#define BLUE_DEFAULT 255 +#define BRIGHT_DEFAULT 50 + +// #define DISABLE_RGB_UUID // #define DISABLE_USB +#define SHOW_REAL_BATTERY +#define RGB_LED + BleMouse bleMouse("Ball Mouse"); #ifdef RGB_LED @@ -63,23 +70,25 @@ void setup() { #ifdef RGB_LED // Запуск мыши — зелёный ledControl.begin(); - ledControl.forceColor(0, 255, 0); // Зеленый + // ledControl.forceColor(0, 255, 0); // Зеленый #endif//RGB_LED #ifdef RGB_LED // Инициализация BLE - красный - ledControl.forceColor(255, 0, 0); // Красный + // ledControl.forceColor(255, 0, 0); // Красный #endif//RGB_LED // Запуск BLE мыши (HID) bleMouse.init(); - // Создаём BLE-сервер для подстветки - BLEServer *server = BLEDevice::createServer(); #ifdef RGB_LED +#ifndef DISABLE_RGB_UUID + // Создаём BLE-сервер для подстветки + // BLEServer *server = BLEDevice::createServer(); // Настройка кастомного сервиса цвета - ledControl.setupBLEService(server); - // Добавляем UUID нашего сервиса в рекламу (важно до start) - BLEAdvertising *advertising = BLEDevice::getAdvertising(); - advertising->addServiceUUID(COLOR_SERVICE_UUID); + ledControl.setupBLEService(bleMouse.server); +#endif//DISABLE_RGB_UUID + // // Добавляем UUID нашего сервиса в рекламу (важно до start) + // BLEAdvertising *advertising = BLEDevice::getAdvertising(); + // advertising->addServiceUUID(COLOR_SERVICE_UUID); #endif//RGB_LED // Запуск BLE мыши (HID) bleMouse.begin(); @@ -87,7 +96,7 @@ void setup() { #ifdef RGB_LED // USB — синий - ledControl.forceColor(0, 0, 255); // Синий + // ledControl.forceColor(0, 0, 255); // Синий #endif//RGB_LED #ifndef DISABLE_USB usbHost.begin(); @@ -102,6 +111,12 @@ void setup() { void loop() { #ifndef DISABLE_USB usbHost.task(); +#else + if (bleMouse.isConnected()) + { + bleMouse.move(5, 0, 0); + delay(1000); + } #endif //DISABLE_USB #ifdef SHOW_REAL_BATTERY