Сейчас я пытаюсь подключиться к небольшому устройству 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.