|
| 1 | +/* |
| 2 | + Based on Neil Kolban example for IDF: https://github.com/nkolban/esp32-snippets/blob/master/cpp_utils/tests/BLE%20Tests/SampleScan.cpp |
| 3 | + Ported to Arduino ESP32 by Evandro Copercini |
| 4 | + Refactored back to IDF by H2zero |
| 5 | +*/ |
| 6 | + |
| 7 | +/** NimBLE differences highlighted in comment blocks **/ |
| 8 | + |
| 9 | +/*******original******** |
| 10 | +#include <BLEDevice.h> |
| 11 | +#include <BLEUtils.h> |
| 12 | +#include <BLEScan.h> |
| 13 | +#include <BLEAdvertisedDevice.h> |
| 14 | +***********************/ |
| 15 | + |
| 16 | +#include <Arduino.h> |
| 17 | + |
| 18 | +#include <NimBLEDevice.h> |
| 19 | + |
| 20 | +extern "C"{void app_main(void);} |
| 21 | + |
| 22 | +int scanTime = 5 * 1000; // In milliseconds, 0 = scan forever |
| 23 | +BLEScan* pBLEScan; |
| 24 | + |
| 25 | +class MyAdvertisedDeviceCallbacks: public BLEAdvertisedDeviceCallbacks { |
| 26 | + void onResult(BLEAdvertisedDevice* advertisedDevice) { |
| 27 | + printf("Advertised Device: %s \n", advertisedDevice->toString().c_str()); |
| 28 | + } |
| 29 | +}; |
| 30 | + |
| 31 | +void scanTask (void * parameter){ |
| 32 | + for(;;) { |
| 33 | + // put your main code here, to run repeatedly: |
| 34 | + BLEScanResults foundDevices = pBLEScan->getResults(scanTime, false); |
| 35 | + printf("Devices found: %d\n", foundDevices.getCount()); |
| 36 | + printf("Scan done!\n"); |
| 37 | + pBLEScan->clearResults(); // delete results fromBLEScan buffer to release memory |
| 38 | + vTaskDelay(2000/portTICK_PERIOD_MS); // Delay a second between loops. |
| 39 | + } |
| 40 | + |
| 41 | + vTaskDelete(NULL); |
| 42 | +} |
| 43 | + |
| 44 | +void app_main(void) { |
| 45 | + printf("Scanning...\n"); |
| 46 | + |
| 47 | + BLEDevice::init(""); |
| 48 | + pBLEScan = BLEDevice::getScan(); //create new scan |
| 49 | + pBLEScan->setScanCallbacks(new MyAdvertisedDeviceCallbacks()); |
| 50 | + pBLEScan->setActiveScan(true); //active scan uses more power, but get results faster |
| 51 | + pBLEScan->setInterval(100); |
| 52 | + pBLEScan->setWindow(99); // less or equal setInterval value |
| 53 | + xTaskCreate(scanTask, "scanTask", 5000, NULL, 1, NULL); |
| 54 | +} |
0 commit comments