1

サーバー周辺機器から送信された通知を受信できません。

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が、まだ機能していません。

公式ドキュメントは明確ではありません。誰でも起動して実行できますか?助けてください。

4

1 に答える 1

0

on.read/on.data/イベントリスナーです。それらに問題はありません。特定のイベントが発生したときに呼び出されます。

たとえば、追加characteristic.read([callback(error, data)]);するとon.read.

ソースから:

次の場合に発生:

  • 特性の読み取りが完了しました。characteristic.read(...) の結果
  • 特性値は、characteristic.notify(true[, callback(error)]) で有効にされた後、通知または指示を介してペリフェラルによって更新されました
于 2021-06-14T15:29:24.237 に答える