blob: ec9d185aea9d02c2b9d6cc713d3e5ab9bcb63a1b (
plain)
- /*
- Based on Neil Kolban example for IDF: https://github.com/nkolban/esp32-snippets/blob/master/cpp_utils/tests/BLE%20Tests/SampleScan.cpp
- Ported to Arduino ESP32 by Evandro Copercini
- Changed to a beacon scanner to report iBeacon, EddystoneURL and EddystoneTLM beacons by beegee-tokyo
- Upgraded Eddystone part by Tomas Pilny on Feb 20, 2023
- */
- #include <Arduino.h>
- #include <BLEDevice.h>
- #include <BLEScan.h>
- #include <BLEAdvertisedDevice.h>
- #include <BLEEddystoneTLM.h>
- #include <BLEBeacon.h>
- #include <Mussel.h>
- int scanTime = 1; //In seconds
- BLEScan *pBLEScan;
- Mussel mussel(10);
- class MyAdvertisedDeviceCallbacks : public BLEAdvertisedDeviceCallbacks {
- void onResult(BLEAdvertisedDevice advertisedDevice) {
- if (advertisedDevice.haveName()
- && advertisedDevice.getFrameType() == BLE_EDDYSTONE_TLM_FRAME
- ) {
- BLEEddystoneTLM EddystoneTLM(&advertisedDevice);
- mussel.push(
- advertisedDevice.getName(),
- millis(),
- EddystoneTLM.getTemp()
- );
- }
- }
- };
- void setup() {
- Serial.begin(115200);
- mussel.begin();
- BLEDevice::init("");
- pBLEScan = BLEDevice::getScan(); //create new scan
- pBLEScan->setAdvertisedDeviceCallbacks(new MyAdvertisedDeviceCallbacks());
- pBLEScan->setActiveScan(true); //active scan uses more power, but get results faster
- pBLEScan->setInterval(100);
- pBLEScan->setWindow(99); // less or equal setInterval value
- }
- void loop() {
- // put your main code here, to run repeatedly:
- BLEScanResults *foundDevices = pBLEScan->start(scanTime, false);
- pBLEScan->clearResults(); // delete results fromBLEScan buffer to release memory
- mussel.printStack();
- delay(500);
- }
|