Сканирование BLE только получает имя некоторых устройств при первом сканировании - PullRequest
1 голос
/ 26 января 2020

У меня есть следующий код:

#include <Arduino.h>
#include <BLEDevice.h>
#include <BLEAdvertisedDevice.h>

static void log(String message) {
  Serial.println(message);
}

const char* deviceName = "BLEScanner";
BLEScan* pBLEScan;

void setup() {
  Serial.begin(115200);   
  log("Setup!");
  BLEDevice::init(deviceName);
  pBLEScan = BLEDevice::getScan(); //create new scan
  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() {
  log("Listing BLE Sensors");
  BLEScanResults foundSensors = pBLEScan->start(30, false);
  int count = foundSensors.getCount();
  for (int i = 0; i < count; i++) {
    BLEAdvertisedDevice bleSensor = foundSensors.getDevice(i);
    String sensorName = bleSensor.getName().c_str();
    String address = bleSensor.getAddress().toString().c_str();
    log(address + " " + sensorName);
  }
  log("Sleeping");
  sleep(10);
}

И при запуске я получаю следующий вывод:

Setup!
Listing BLE Sensors
00:09:b0:09:e7:ca 
41:59:8f:07:ec:96
ac:5d:5c:e1:72:89 LM0845
c4:7c:8d:6a:36:cf Flower care
c4:7c:8d:6a:45:6b Flower care
c4:7c:8d:6a:46:2c Flower care
de:d5:2a:8e:1e:fd Tile
Sleeping
Listing BLE Sensors
00:09:b0:09:e7:ca 
41:59:8f:07:ec:96
ac:5d:5c:e1:72:89
dc4:7c:8d:6a:36:cf
dc4:7c:8d:6a:45:6b
dc4:7c:8d:6a:46:2c
de:d5:2a:8e:1e:fd Tile
Sleeping
Listing BLE Sensors
00:09:b0:09:e7:ca 
41:59:8f:07:ec:96
ac:5d:5c:e1:72:89
c4:7c:8d:6a:36:cf
dc4:7c:8d:6a:45:6b
dc4:7c:8d:6a:46:2c
de:d5:2a:8e:1e:fd Tile
... and so on

Почему-то я получаю только имена некоторых устройств в первый раз, это известная ошибка и что с этим можно сделать?

Я пытался поставить pBLEScan->clearResults(); перед началом сканирования, но это не помогло.

I Я использую перо ESP32 Adafruit.

Единственное решение, которое я нашел, это поместить BLEDevice::init(deviceName); внутрь l oop и затем запустить BLEDevice::deinit(); перед сном!

...