[英]Unable to get Notify data using Noble
無法接收從服務器外圍設備發送的任何通知。
我正在使用帶有“BLE_notify”代碼的 ESP32 作為服務器,您可以在 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 應用程序,從該應用程序中,一旦連接到外圍設備,我就可以獲得外圍設備通知的所有消息。 所以 noBLE 客戶端缺少一些東西。
我認為on.read/on.data/notify(true)
回調方法有問題。 也許這些不是從服務器接收通知的方法? 我也嘗試了subscribe
方法,但仍然無法正常工作。
官方文檔不清楚。 任何人都可以啟動並運行它嗎? 請幫忙。
on.read/on.data/
是事件監聽器。 他們沒有錯。 當有特定事件時調用它們。
例如添加characteristic.read([callback(error, data)]);
會調用on.read
。
從來源:
在以下時間發出:
- 特征讀取已完成,character.read(...) 的結果
- 在使用characteristic.notify(true[, callback(error)]) 啟用后,外圍設備已通過通知或指示更新了特征值
我使用以下兩個環境 NOBLE_MULTI_ROLE=1 和 NOBLE_REPORT_ALL_HCI_EVENTS=1 解決(請參閱文檔https://github.com/abandonware/noble )
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.