无法接收从服务器外围设备发送的任何通知。
我使用ESP32作为服务器,带有“BLE_NOTIFY”代码,您可以在Arduino应用程序中找到(文件>示例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应用程序,一旦连接到它,我就可以从该应用程序获得外设通知的所有消息。因此,来宝客户端缺少一些东西。
我认为on.read/on.data/notify(true)
回调方法有问题。也许这些不是从服务器接收通知的方法?我也尝试了subscribe
方法,但仍然不起作用。
官方文件尚不清楚。有人能让它启动并运行吗?请帮帮忙。
2条答案
按热度按时间xurqigkl1#
on.read/on.data/
是事件侦听器。他们没有什么问题。它们在发生特定事件时被调用。例如,添加
characteristic.read([callback(error, data)]);
将调用on.read
。从源头看:
在下列情况下发出:
nmpmafwu2#
我使用以下两个环境NOBLE_MULTI_ROLE=1和NOBLE_REPORT_ALL_HCI_EVENTS=1进行解析(参见文档https://github.com/abandonware/noble)