WelcomeHere.ro
NIVEL: INTERMEDIAR

Tutorial: Scanner Bluetooth Low Energy (BLE) cu ESP32

Pe lângă Wi-Fi, ESP32 are și Bluetooth integrat. În acest tutorial, vom explora cealaltă mare capabilitate wireless a sa: vom scrie un program care descoperă dispozitivele BLE din apropiere.

Componente Necesare

  • 1x Placă de dezvoltare ESP32
  • 1x Cablu Micro-USB

Ce este Bluetooth Low Energy (BLE)?

BLE este o versiune de Bluetooth proiectată special pentru un consum foarte redus de energie. Este ideală pentru dispozitive mici, care funcționează pe baterii, cum ar fi ceasuri inteligente, brățări de fitness, senzori wireless sau beacon-uri. Spre deosebire de Bluetooth "Clasic", BLE este optimizat pentru a trimite cantități mici de date la intervale regulate.

Codul Sursă

Acest cod folosește biblioteca BLE încorporată în pachetul ESP32 pentru Arduino IDE. Nu este nevoie să instalați biblioteci suplimentare. Încărcați codul și deschideți Serial Monitor setat la 115200.

#include 
#include 
#include 
#include 

int scanTime = 5; // Durata scanarii in secunde
BLEScan* pBLEScan;

// O clasa speciala care este apelata de fiecare data cand un dispozitiv este gasit
class MyAdvertisedDeviceCallbacks: public BLEAdvertisedDeviceCallbacks {
    void onResult(BLEAdvertisedDevice advertisedDevice) {
      Serial.print("Dispozitiv gasit: ");
      // Afisam adresa MAC a dispozitivului
      Serial.print(advertisedDevice.getAddress().toString().c_str());
      // Afisam puterea semnalului (RSSI)
      Serial.print(" RSSI: ");
      Serial.print(advertisedDevice.getRSSI());
      Serial.println();
    }
};

void setup() {
  Serial.begin(115200);
  Serial.println("Pornire scanner BLE...");

  BLEDevice::init(""); // Initializam modulul BLE
  pBLEScan = BLEDevice::getScan(); // Cream un obiect nou pentru scanare
  pBLEScan->setAdvertisedDeviceCallbacks(new MyAdvertisedDeviceCallbacks());
  pBLEScan->setActiveScan(true); // Scanare activa pentru a obtine mai multe date
  pBLEScan->setInterval(100);
  pBLEScan->setWindow(99); 
}

void loop() {
  // Pornim o noua scanare
  Serial.println("Incepere scanare...");
  BLEScanResults foundDevices = pBLEScan->start(scanTime, false);
  Serial.print("Dispozitive gasite: ");
  Serial.println(foundDevices.getCount());
  Serial.println("Scanare finalizata.");
  
  pBLEScan->clearResults(); // Stergem rezultatele pentru urmatoarea scanare
  delay(10000); // Asteptam 10 secunde inainte de o noua scanare
}

Ce Ar Trebui Să Se Întâmple?

În Serial Monitor, veți vedea cum ESP32-ul începe să descopere dispozitivele BLE din jur (telefoane, ceasuri, căști etc.). Pentru fiecare dispozitiv, va afișa adresa sa unică (adresa MAC) și puterea semnalului (RSSI). Un număr RSSI mai apropiat de 0 (de ex. -50) indică un semnal mai puternic și un dispozitiv mai apropiat.