无法使用 Noble 获取通知数据
Posted
技术标签:
【中文标题】无法使用 Noble 获取通知数据【英文标题】:Unable to get Notify data using Noble 【发布时间】:2020-12-07 15:39:23 【问题描述】:无法接收从服务器外围设备发送的任何通知。
我使用 ESP32 作为服务器,您可以在 Arduino 应用程序中找到“BLE_notify”代码(文件> 示例 ESP32 BLE Arduino > BLE_notify)。 使用此代码,一旦客户端连接,ESP32 就会每秒开始通知新消息。 使用的客户端是安装了 Noble 节点库的 Raspberry Pi (https://github.com/abandonware/noble)。这是我正在使用的代码。
noble.on('discover', async (peripheral) =>
console.log('found peripheral:', peripheral.advertisement);
await noble.stopScanningAsync();
await peripheral.connectAsync();
console.log("Connected")
try
const services = await peripheral.discoverServicesAsync([SERVICE_UUID]);
const characteristics = await services[0].discoverCharacteristicsAsync([CHARACTERISTIC_UUID])
const ch = characteristics[0]
ch.on('read', function(data, isNotification)
console.log(isNotification)
console.log('Temperature Value: ', data.readUInt8(0));
)
ch.on('data', function(data, isNotification)
console.log(isNotification)
console.log('Temperature Value: ', data.readUInt8(0));
)
ch.notify(true, function(error)
console.log(error)
console.log('temperature notification on');
)
catch (e)
// handle error
console.log("ERROR: ",e)
);
SERVICE_UUID 和 CHARACTERISTIC_UUID 显然是 ESP32 中编码的 UUID。
这种代码可以工作,它可以找到服务和特性,并且可以成功连接到外围设备,但它无法接收消息通知。 我还尝试了一个作为客户端工作的 android 应用程序,一旦连接到它,我就可以从该应用程序获取外围设备通知的所有消息。所以 noBLE 客户端缺少一些东西。
我认为on.read/on.data/notify(true)
回调方法有问题。也许这些不是从服务器接收通知的方法?
我也尝试了subscribe
方法,但仍然无法正常工作。
官方文档不清楚。任何人都可以启动并运行它吗?请帮忙。
【问题讨论】:
当您尝试订阅时,什么不起作用?根据贵族文档,您需要订阅一个特征才能接收通知 我无法获取任何数据。那些包含 console.log 的回调永远不会被调用。 你试过通知回调事件吗? github.com/abandonware/noble#event-notification-received 非常感谢您的提示。是的,我也试过once(notify, ...)
方法,但没有运气。我现在正在放弃并切换到 Python,希望为此目的找到一个更好、更有文档的库,但我很高兴确切地知道如何使用 node 和 Noble 从外围设备接收通知事件。如果有人知道更多,请帮忙!
【参考方案1】:
on.read/on.data/
是事件监听器。他们没有错。当有特定事件时调用它们。
例如添加characteristic.read([callback(error, data)]);
会调用on.read
。
来自source:
发射时间:
特征读取已完成,characteristic.read(...) 的结果 在启用后,外围设备通过通知或指示更新了特征值 特征通知(真[,回调(错误)])
【讨论】:
以上是关于无法使用 Noble 获取通知数据的主要内容,如果未能解决你的问题,请参考以下文章
samsung ble api 无法从多个 GATT 特征中获取通知