Как исправить ошибку при компиляции кода ArduinoIDE?

У меня есть следующий код для ESP32

#include <BLEDevice.h> //Header file for BLE 
static BLEUUID serviceUUID("xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"); //Service UUID фитнес браслета, полученный с помощью приложения nRF connect 
static BLEUUID    charUUID("xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"); //Characteristic  UUID фитнес браслета, полученный с помощью приложения nRF connect
String My_BLE_Address = "ff:ff:ff:ff:ff:ff"; //аппаратный  Bluetooth MAC нашего фитнес браслета,  полученный с помощью приложения nRF connect. Будет отличаться для каждого браслета 
static BLERemoteCharacteristic* pRemoteCharacteristic;
BLEScan* pBLEScan; //Name the scanning device as pBLEScan
BLEScanResults foundDevices;
static BLEAddress *Server_BLE_Address;
String Scaned_BLE_Address;
boolean paired = false; //boolean variable to togge light (логическая переменная для включения/выключения света)
 
bool connectToserver (BLEAddress pAddress){
    
    BLEClient*  pClient  = BLEDevice::createClient();
    Serial.println(" - Created client");
    // Connect to the BLE Server. (соединение с BLE сервером)
    pClient->connect(pAddress);
    Serial.println(" - Connected to fitnessband");
    // Obtain a reference to the service we are after in the remote BLE server.
    BLERemoteService* pRemoteService = pClient->getService(serviceUUID);
    if (pRemoteService != nullptr)
    {
      Serial.println(" - Found our service");
      return true;
    }
    else
    return false;
    // Obtain a reference to the characteristic in the service of the remote BLE server.
    pRemoteCharacteristic = pRemoteService->getCharacteristic(charUUID);
    if (pRemoteCharacteristic != nullptr)
      Serial.println(" - Found our characteristic");
      return true;
}
class MyAdvertisedDeviceCallbacks: public BLEAdvertisedDeviceCallbacks 
{
    void onResult(BLEAdvertisedDevice advertisedDevice) {
      Serial.printf("Scan Result: %s \n", advertisedDevice.toString().c_str());
      Server_BLE_Address = new BLEAddress(advertisedDevice.getAddress());
      
      Scaned_BLE_Address = Server_BLE_Address->toString().c_str();
      
    }
};
void setup() {
    Serial.begin(115200); //инициализируем последовательную связь 
    Serial.println("ESP32 BLE Server program"); //печатаем приветственное сообщение
    BLEDevice::init("");
    pBLEScan = BLEDevice::getScan(); //начинаем новое сканирование
    pBLEScan->setAdvertisedDeviceCallbacks(new MyAdvertisedDeviceCallbacks()); //Call the class that is defined above 
    pBLEScan->setActiveScan(true); // активное сканирование потребляет больше мощности, но быстрее получает результат
    pinMode (13,OUTPUT); //задаем режим работы для контакта на вывод данных 
}
void loop() {
  foundDevices = pBLEScan->start(3); // сканируем в течение 3-х секунд чтобы найти фитнес браслет 
  while (foundDevices.getCount() >= 1)
  {
    if (Scaned_BLE_Address == My_BLE_Address && paired == false)
    {
      Serial.println("Found Device :-)... connecting to Server as client");
       if (connectToserver(*Server_BLE_Address))
      {
      paired = true;
      Serial.println("********************LED turned ON************************");
      digitalWrite (13,HIGH);
      break;
      }
      else
      {
      Serial.println("Pairing failed");
      break;
      }
    }
    
    if (Scaned_BLE_Address == My_BLE_Address && paired == true)
    {
      Serial.println("Our device went out of range"); // устройство вне диапазона действия
      paired = false;
      Serial.println("********************LED OOOFFFFF************************");
      digitalWrite (13,LOW);
      ESP.restart();
      break;
    }
    else
    {
    Serial.println("We have some other BLe device in range"); //некоторые BLe устройства в зоне нашего действия
    break;
    }
  } 
}

При его компиляции программа выдаёт следующий лог ошибки:

AppData\Local\Temp\.arduinoIDE-unsaved2024817-13824-28fsi2.1i74u\sketch_sep17a\sketch_sep17a.ino: In function 'void loop()':
AppData\Local\Temp\.arduinoIDE-unsaved2024817-13824-28fsi2.1i74u\sketch_sep17a\sketch_sep17a.ino:54:35: error: no match for 'operator=' (operand types are 'BLEScanResults' and 'BLEScanResults*')
   **54 |   foundDevices = pBLEScan->start(5); // сканируем в течение 5-х секунд чтобы найти фитнес браслет**
      |                                   ^
In file included from AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.0.4\libraries\BLE\src/BLEAdvertisedDevice.h:20,
                 from AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.0.4\libraries\BLE\src/BLEClient.h:25,
                 from AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.0.4\libraries\BLE\src/BLEDevice.h:22,
                 from AppData\Local\Temp\.arduinoIDE-unsaved2024817-13824-28fsi2.1i74u\sketch_sep17a\sketch_sep17a.ino:1:
AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.0.4\libraries\BLE\src/BLEScan.h:48:7: note: candidate: 'BLEScanResults& BLEScanResults::operator=(const BLEScanResults&)'
   **48 | class BLEScanResults {
      |       ^~~~~~~~~~~~~~**
AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.0.4\libraries\BLE\src/BLEScan.h:48:7: note:   no known conversion for argument 1 from 'BLEScanResults*' to 'const BLEScanResults&'
AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.0.4\libraries\BLE\src/BLEScan.h:48:7: note: candidate: 'BLEScanResults& BLEScanResults::operator=(BLEScanResults&&)'
AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.0.4\libraries\BLE\src/BLEScan.h:48:7: note:   no known conversion for argument 1 from 'BLEScanResults*' to 'BLEScanResults&&'

Используем библиотеку BLE версии 3.0.4 из папки: AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.0.4\libraries\BLE 
exit status 1

**Compilation error: no match for 'operator=' (operand types are 'BLEScanResults' and 'BLEScanResults*')**

Ответы (1 шт):

Автор решения: DmitrA-06-

Судя по тому, что я вижу в ошибках, имеются вопросы с преобразованием типов () Попробуйте написать так: Было:

Строка 7: BLEScanResults foundDevices;
Строка 54: foundDevices = pBLEScan->start(3);

Стало:

Строка 7: BLEScanResults *foundDevices;
Строка 54: foundDevices = pBLEScan->start(3);

ИЛИ

Строка 7: BLEScanResults *foundDevices;
Строка 54: *foundDevices = pBLEScan->start(3);

И ознакомьтесь с примером на сайте. Возможно ещё что-то полезное подчерпнёте: https://docs.espressif.com/projects/arduino-esp32/en/latest/api/ble.html

→ Ссылка