В чем разница между окном сканирования, интервалом и временем сканирования в библиотеке ESP32_BLE_Arduino? - PullRequest
0 голосов
/ 30 октября 2019

Я смотрю на базовый эскиз BLE_Scan.ino из библиотеки ESP32_BLE_Arduino. Я изменил его, чтобы сделать 5 сканирований подряд, прежде чем что-либо еще. Я хотел бы сделать несколько сканов очень быстро, чтобы их усреднить. (См. Код ниже)

Я не могу определить разницу между интервалом сканирования , сканированием окна и параметром scanTime .

Я понимаю, что окно должно быть длиной сканирования, это должно происходить каждый интервал . Я не уверен, что делает параметр scanTime .

Я настроил интервал сканирования и окно сканирования на низкие значения. Также поместите переменную scanTime как можно ниже (1, так как это int и не может быть 0). Кажется, ни одно из этих исправлений не позволяет мне быстро сканировать. По-прежнему, кажется, есть задержка в секунду или две между печатью "сканирования !!"каждый раз.

Любая помощь в разъяснении того, что делают эти 3 параметра, или может указать на то, что я делаю неправильно, приветствуется.

(Кроме того, мой первый пост на SO, поэтому дайте мне знатьесли я могу исправить, как я задал этот вопрос, и я буду!)

Спасибо !!

/*
   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
*/

#include <BLEDevice.h>
#include <BLEUtils.h>
#include <BLEScan.h>
#include <BLEAdvertisedDevice.h>

int scanTime = 1; //In seconds
BLEScan* pBLEScan;

class MyAdvertisedDeviceCallbacks: public BLEAdvertisedDeviceCallbacks {
    void onResult(BLEAdvertisedDevice advertisedDevice) {
      Serial.printf("Advertised Device: %s \n", advertisedDevice.toString().c_str());
    }
};

void setup() {
  Serial.begin(115200);
  Serial.println("Scanning...");

  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(50); //interval (how often there is a scan)
  pBLEScan->setWindow(49);  // window (how long the scans are) must be <= interval

  Serial.begin(115200);
}

void loop() {
  // put your main code here, to run repeatedly:

   //bluetooth scan
  for(int x = 0; x < 5; x ++){
    BLEScanResults foundDevices = pBLEScan->start(1, true);
    Serial.println("Scan!!");
  }

  delay(200);
}

1 Ответ

0 голосов
/ 04 ноября 2019

Параметр конфигурации Scan_Window определяет период времени для сканирования. Inquiry_Scan_Window может быть меньше или равно Scan_Interval. [Время по умолчанию: 11,25 мс]

Параметр конфигурации Scan_Interval определяет количество времени между последовательными сканированиями. Это определяется как интервал времени от момента, когда контроллер BR / EDR начал свое последнее сканирование, до начала следующего сканирования. [По умолчанию: 2,5 секунды]

Время ожидания сканирования: устройство может сканировать в течение ограниченного времени

...