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.