サーバー周辺機器から送信された通知を受信できません。
Arduinoアプリで見つけることができる「BLE_notify」コードでESP32をサーバーとして使用しています(ファイル> 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
が、まだ機能していません。
公式ドキュメントは明確ではありません。誰でも起動して実行できますか?助けてください。