// Библиотека для общения устройств по BLE #include // Номер пина, к которому подключен светодиод constexpr uint8_t PIN_ARDUINO_LED = 14; void setup() { // Открываем Serial-порт Serial.begin(9600); // Ожидаем подключение по USB // Если не используете отладку, удалите строку while (!Serial); // Светодиод в режим выхода pinMode(PIN_ARDUINO_LED, OUTPUT); // Инициализируем BLE BLE.begin(); Serial.println("BLE Central - LED control"); // Сканируем все устройства LED BLE peripherals BLE.scanForUuid("19b10000-e8f2-537e-4f6c-d104768a1214"); } void loop() { // Проверяем было ли найдено Peripheral Device BLEDevice peripheral = BLE.available(); // Если Peripheral Device найдено, выводим информацию в Serial-порт if (peripheral) { Serial.print("Found "); Serial.print(peripheral.address()); Serial.print(" '"); Serial.print(peripheral.localName()); Serial.print("' "); Serial.print(peripheral.advertisedServiceUuid()); Serial.println(); // Если имя Peripheral Device не содержит фразу «LED» // Выходим из функции if (peripheral.localName().indexOf("LED") < 0) { Serial.println("No 'LED' in name"); return; } // Останавливаем сканирование BLE.stopScan(); controlLed(peripheral); // Если Peripheral Device отключено, продолжаем сканирование BLE.scanForUuid("19b10000-e8f2-537e-4f6c-d104768a1214"); } } void controlLed(BLEDevice peripheral) { // Подключаемся к Peripheral Device Serial.println("Connecting ..."); if (peripheral.connect()) { Serial.println("Connected"); } else { Serial.println("Failed to connect!"); return; } // Сканируем свойства Peripheral Device Serial.println("Discovering attributes ..."); if (peripheral.discoverAttributes()) { Serial.println("Attributes discovered"); } else { Serial.println("Attribute discovery failed!"); peripheral.disconnect(); return; } // Получаем текущее состояние светодиода BLECharacteristic LEDCharacteristic = peripheral.characteristic( "19b10001-e8f2-537e-4f6c-d104768a1214"); if (!LEDCharacteristic) { Serial.println("Peripheral does not have LED characteristic!"); peripheral.disconnect(); return; } while (peripheral.connected()) { if (LEDCharacteristic.canRead()) { byte value = LEDCharacteristic.read(); LEDCharacteristic.readValue(value); if (value == 0x01) { Serial.println("ON"); digitalWrite(PIN_ARDUINO_LED, HIGH); } else if (value == 0x00) { digitalWrite(PIN_ARDUINO_LED, LOW); Serial.println("OFF"); } } delay(500); } Serial.println("Peripheral disconnected"); }