71 lines
2.7 KiB
C++
Executable File
71 lines
2.7 KiB
C++
Executable File
/** Example of continuous scanning for BLE advertisements.
|
|
* This example will scan forever while consuming as few resources as possible
|
|
* and report all advertisments on the serial monitor.
|
|
*
|
|
* Created: on January 31 2021
|
|
* Author: H2zero
|
|
*
|
|
*/
|
|
|
|
#include "NimBLEDevice.h"
|
|
|
|
NimBLEScan* pBLEScan;
|
|
|
|
class MyAdvertisedDeviceCallbacks: public NimBLEAdvertisedDeviceCallbacks {
|
|
void onResult(NimBLEAdvertisedDevice* advertisedDevice) {
|
|
Serial.printf("Advertised Device: %s \n", advertisedDevice->toString().c_str());
|
|
}
|
|
};
|
|
|
|
void setup() {
|
|
Serial.begin(115200);
|
|
Serial.println("Scanning...");
|
|
|
|
/** *Optional* Sets the filtering mode used by the scanner in the BLE controller.
|
|
*
|
|
* Can be one of:
|
|
* CONFIG_BTDM_SCAN_DUPL_TYPE_DEVICE (0) (default)
|
|
* Filter by device address only, advertisements from the same address will be reported only once.
|
|
*
|
|
* CONFIG_BTDM_SCAN_DUPL_TYPE_DATA (1)
|
|
* Filter by data only, advertisements with the same data will only be reported once,
|
|
* even from different addresses.
|
|
*
|
|
* CONFIG_BTDM_SCAN_DUPL_TYPE_DATA_DEVICE (2)
|
|
* Filter by address and data, advertisements from the same address will be reported only once,
|
|
* except if the data in the advertisement has changed, then it will be reported again.
|
|
*
|
|
* Can only be used BEFORE calling NimBLEDevice::init.
|
|
*/
|
|
NimBLEDevice::setScanFilterMode(CONFIG_BTDM_SCAN_DUPL_TYPE_DEVICE);
|
|
|
|
/** *Optional* Sets the scan filter cache size in the BLE controller.
|
|
* When the number of duplicate advertisements seen by the controller
|
|
* reaches this value it will clear the cache and start reporting previously
|
|
* seen devices. The larger this number, the longer time between repeated
|
|
* device reports. Range 10 - 1000. (default 20)
|
|
*
|
|
* Can only be used BEFORE calling NimBLEDevice::init.
|
|
*/
|
|
NimBLEDevice::setScanDuplicateCacheSize(200);
|
|
|
|
NimBLEDevice::init("");
|
|
|
|
pBLEScan = NimBLEDevice::getScan(); //create new scan
|
|
// Set the callback for when devices are discovered, no duplicates.
|
|
pBLEScan->setAdvertisedDeviceCallbacks(new MyAdvertisedDeviceCallbacks(), false);
|
|
pBLEScan->setActiveScan(true); // Set active scanning, this will get more data from the advertiser.
|
|
pBLEScan->setInterval(97); // How often the scan occurs / switches channels; in milliseconds,
|
|
pBLEScan->setWindow(37); // How long to scan during the interval; in milliseconds.
|
|
pBLEScan->setMaxResults(0); // do not store the scan results, use callback only.
|
|
}
|
|
|
|
void loop() {
|
|
// If an error occurs that stops the scan, it will be restarted here.
|
|
if(pBLEScan->isScanning() == false) {
|
|
// Start scan with: duration = 0 seconds(forever), no scan end callback, not a continuation of a previous scan.
|
|
pBLEScan->start(0, nullptr, false);
|
|
}
|
|
|
|
delay(2000);
|
|
} |