NodeJs - Использование Noble для подключения к устройству BLE - при подключении к периферийному устройству возвращаемый массив служб пуст - PullRequest
0 голосов
/ 07 мая 2020

Сейчас я пытаюсь подключиться к небольшому устройству BLE с помощью Noble. У меня проблема с discoverServices([UUID], (err, services) => {}), потому что в обратном вызове этой функции services возвращается как пустой массив.

Вот код:

const DEVICE_INFORMATION_SERVICE_UUID = '38ba5b48baa14b08b72525c0e8a1e51b';

const noble = require('@abandonware/noble');

noble.on('stateChange', (state) => {
  console.log(`State changed: ${state}`);
  if (state === 'poweredOn') {
    noble.startScanning();
  }
});

noble.on('discover', (peripheral) => {
  console.log(
    `Found device, name: ${peripheral.advertisement.localName}, uuid: ${peripheral.uuid}`
  );

  if (peripheral.advertisement.localName === 'GVH5075_A509') {
    console.log('yes');
    noble.stopScanning();
    peripheral.on('connect', () => console.log('Device connected'));
    peripheral.on('disconnect', () => console.log('Device disconnected'));

    peripheral.connect((error) => {
      if (error) console.log(error);

      peripheral.discoverServices(
        [DEVICE_INFORMATION_SERVICE_UUID],
        (error, services) => {
          if (error) console.log(error);
          console.log('services array', services);
        }
      );
    });
  }
});

Здесь я могу сканировать устройства и видеть UUID устройства BLE, к которому я хочу подключиться и получить данные. Я не могу найти в этом никаких проблем, и код работает без проблем. Однако services возвращается как пустой массив. Вот как выглядит мой терминал после запуска этого кода:

Express server running on port 8081
State changed: poweredOn
Found device, name: Maison’s iPhone, uuid: 369263fb2056498790e96881da641983
Found device, name: Maison’s Airpods, uuid: 913b31937b3e41d7860c6a16172c3607
Found device, name: GVH5075_A509, uuid: 38ba5b48baa14b08b72525c0e8a1e51b
yes
Device connected
services array []
Device disconnected

Я пытаюсь подключиться и прочитать данные из GVH5075_A509, но вы можете видеть, что он находит все, что в данный момент включено и находится в диапазоне, включая мои AirPods. и телефон. Вы можете видеть из console.log(), что массив услуг пуст. Когда он возвращается как пустой, устройство BLE отключается. Он находится в peripheral.discoverServices(). Кажется, что discoverServices() ничего не может обнаружить.

Это устройство представляет собой гигрометр / термометр, который уже передает данные в проприетарное приложение, с которым оно поставляется. Устройство обнаруживается через приложение на моем телефоне, а затем таким образом получает данные. Я не уверен, может ли это устройство BLE подключаться только к приложению, или что-то может получить к нему программный доступ.

Я намерен запустить этот сервер Node в фоновом режиме моего рабочего стола и получить данные с него. устройство BLE, отправьте эти данные в размещенную базу данных, а затем создайте быстрый клиентский интерфейс для использования этой базы данных. Это позволит мне видеть данные, когда я не дома и в зоне действия устройства BLE.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...