0

Bluezを使用してHM-10 BLEモジュールから読み取る方法を理解するのを手伝ってくれることを願っています. なぜこれが私にとって問題なのですか?私は読み書きを正しく行うことができません。私の最終目標は、Bluez スタック上に構築された Ian Harvey の bluepy ライブラリを使用することです。どんな助けでも大歓迎です。ありがとうございました!

arduino nano に接続された HM-10 は、「Foobar」と言い、1 秒待ってから「Barfoo」と言って、1 秒待ってから繰り返します。私の iOS Bluetooth シリアル アプリ (アプリ ストアでは「シリアル」という名前) は、これを正しく認識します。

ハードウェア: Raspberry Pi ZeroW カーネル: 4.9.68+ Bluez: 5.50 (2018 年 6 月 3 日リリース)

主な問題

bluetoothctl を使用して「Foobar」と「Barfoo」を読み取ることができません。

pi@raspberrypi:~ $ bluetoothctl
[bluetooth]# power on
[bluetooth]# connect 34:15:13:87:98:37
[DSDTECH HM-10]# menu gatt
[DSDTECH HM-10]# select-attribute 0000ffe1-0000-1000-8000-00805f9b34fb
[DSDTECH HM-10:/service0010/char0011]# read
[CHG] Attribute /org/bluez/hci0/dev_34_15_13_87_98_37/service0010/char0011 Value:
  34 15 13 87 98 37                                4....7
  34 15 13 87 98 37                                4....7

BtMon は、「Foobar」と「Barfoo」を受信して​​いることを示していますが、

実際、(別の端末で) btmon を使用する$sudo btmonと、ラズベリー pi zero W がこれらの値を認識していることがわかります。以下のエントリは、1 秒おきに繰り返されます。

> ACL Data RX: Handle 64 flags 0x02 dlen 15              #278 [hci0] 339.880027
      ATT: Handle Value Notification (0x1b) len 10
        Handle: 0x0012
          Data: 426172666f6f0d0a
> ACL Data RX: Handle 64 flags 0x02 dlen 15              #279 [hci0] 340.292455
      ATT: Handle Value Notification (0x1b) len 10
        Handle: 0x0012
          Data: 466f6f6261720d0a

426172666f6f0d0a = バーフー (hex2ascii)

466f6f6261720d0a = フーバー (hex2ascii)

他の属性から読み取り値を取得しない

HM-10 を知っている場合は、ffe1 が uart データ転送に使用することになっていることを知っています。HM-10 とペアリングするためのマスターとして機能する自作の Android アプリケーションで ffe1 をエンコードしました。しかし、他の属性が私に与えるものを確認したかった.

[DSDTECH HM-10:/service0010/char0011]# select-attribute 00002902-0000-1000-8000-00805f9b34fb
[DSDTECH HM-10:/service0010/char0011/desc0013]# read
[CHG] Attribute /org/bluez/hci0/dev_34_15_13_87_98_37/service0010/char0011/desc0013 Value:
  00 00                                            ..
  00 00                                            ..



[DSDTECH HM-10:/service0010/char0011/desc0013]# list-attributes
Primary Service
        /org/bluez/hci0/dev_34_15_13_87_98_37/service000c
        00001801-0000-1000-8000-00805f9b34fb
        Generic Attribute Profile
Characteristic
        /org/bluez/hci0/dev_34_15_13_87_98_37/service000c/char000d
        00002a05-0000-1000-8000-00805f9b34fb
        Service Changed
Descriptor
        /org/bluez/hci0/dev_34_15_13_87_98_37/service000c/char000d/desc000f
        00002902-0000-1000-8000-00805f9b34fb
        Client Characteristic Configuration
Primary Service
        /org/bluez/hci0/dev_34_15_13_87_98_37/service0010
        0000ffe0-0000-1000-8000-00805f9b34fb
        Unknown
Characteristic
        /org/bluez/hci0/dev_34_15_13_87_98_37/service0010/char0011
        0000ffe1-0000-1000-8000-00805f9b34fb
        Unknown
Descriptor
        /org/bluez/hci0/dev_34_15_13_87_98_37/service0010/char0011/desc0013
        00002902-0000-1000-8000-00805f9b34fb
        Client Characteristic Configuration
Descriptor
        /org/bluez/hci0/dev_34_15_13_87_98_37/service0010/char0011/desc0014
        00002901-0000-1000-8000-00805f9b34fb

[DSDTECH HM-10:/service0010/char0011/desc0013]# select-attribute /org/bluez/hci0/dev_34_15_13_87_98_37/service0010/char0011/desc0014 
# I could not get the uuid to work after selecting 00002902, and do not know how to exit out of an attribute. 
# This corresponds to uuid 00002901
[DSDTECH HM-10:/service0010/char0011/desc0014]# read
[CHG] Attribute /org/bluez/hci0/dev_34_15_13_87_98_37/service0010/char0011/desc0014 Value:
  77 77 77 2e 6a 6e 68 75 61 6d 61 6f 2e 63 6e     www.jnhuamao.cn
  77 77 77 2e 6a 6e 68 75 61 6d 61 6f 2e 63 6e     www.jnhuamao.cn
[DSDTECH HM-10:/service0010/char0011/desc0014]# select-attribute /org/bluez/hci0/dev_34_15_13_87_98_37/service0010
[DSDTECH HM-10:/service0010]# read
Unable to read attribute /org/bluez/hci0/dev_34_15_13_87_98_37/service0010


[DSDTECH HM-10:/service0010]# select-attribute /org/bluez/hci0/dev_34_15_13_87_98_37/service000c/char000d 
# This corresponds to uuid 00002a05-0000-1000-8000-00805f9b34fb
[DSDTECH HM-10:/service000c/char000d]# read
Failed to read: org.bluez.Error.NotPermitted
[DSDTECH HM-10:/service000c/char000d]# select-attribute /org/bluez/hci0/dev_34_15_13_87_98_37/service000c/char000d/desc000f
[CHG] Attribute /org/bluez/hci0/dev_34_15_13_87_98_37/service000c/char000d/desc000f Value:
  02 00                                            ..
  02 00                                            ..

メーカーデータ値を読み取っているようです

興味深いことに、これは info コマンドで見られるメーカー データ値と同じ応答です。

[bluetooth]# info 34:15:13:87:98:37
Device 34:15:13:87:98:37 (public)
        Name: DSDTECH HM-10
        Alias: DSDTECH HM-10
        Paired: no
        Trusted: yes
        Blocked: no
        Connected: no
        LegacyPairing: no
        UUID: Unknown                   (0000ffe0-0000-1000-8000-00805f9b34fb)
        ManufacturerData Key: 0x4d48
        ManufacturerData Value:
  34 15 13 87 98 37                                4....7
        ServiceData Key: 0000b000-0000-1000-8000-00805f9b34fb
        ServiceData Value:
  00 00 00 00                                      ....
        RSSI: -56
        TxPower: 0

@|...x別の nano/HM-10 コンボを使用すると、情報/製造データと uuid ffe1 の読み取りの両方で、この値は意味不明な値になります。

さらに、最初にデバイスに接続すると、btmon が表示されます

@ MGMT Event: Device Found (0x0012) plen 57          {0x0001} [hci0] 67.415544
        LE Address: 34:15:13:87:98:37 (OUI 34-15-13)
        RSSI: -62 dBm (0xc2)
        Flags: 0x00000000
        Data length: 43
        Flags: 0x06
          LE General Discoverable Mode
          BR/EDR Not Supported
        Company: not assigned (19784)
          Data: 341513879837
        Service Data (UUID 0xb000): 00000000
        16-bit Service UUIDs (partial): 1 entry
          Unknown (0xffe0)
        TX power: 0 dBm
        Name (complete): DSDTECH HM-10

341513879837 = 47 (hex2ascii) (正方形が 4 つあり、正しく表示できません。これらは 4 つのピリオドと並んでいます)

4

2 に答える 2

2

btmon ログは、HM-10 デバイスからのデータが通知の形式であることを示しています。BLE では、データ転送に 3 つの方法があります。読み、書き、通知します。読み取りとは、GATT クライアント (あなたの場合は Bluez) が、サービス特性または GATT サーバーのサービス記述子からデータを読み取ることです。ただし、それぞれの特性または記述子で読み取り操作が許可されている場合に限ります。書き込み操作は、GATT クライアントがサービス キャラクタリスティックまたはディスクリプタに書き込むことによって、GATT サーバー (HM-10) にデータを送信することです。

GATT サーバーが単独で GATT クライアントにデータを送信する唯一の方法は、通知によるものです。ただし、GATT クライアントは、接続の確立後に GATT サーバーで通知を有効にする必要があります。通知を有効にするには、GATT サーバーの Client Characteristic Configuration Descriptors (CCC) に書き込むことで実行できます。CCC は、Bluetooth Core 仕様で定義された特別な GATT サービスです。

通知が有効になると、GATT サーバーからのデータが表示されます。Bluez では、gatttool を使用してすべての BLE 操作を行うことができます。以下に例を示します。

たとえば、HM-10 の Bluetooth デバイス アドレスが 03:0F:45:65:43:FF で、デバイスの hci インターフェイス アドレスが hci0 の場合、以下の一連のコマンドで通知が有効になります。

gatttool -i hci0 -b 03:0F:45:65:43:FF -I
[03:0F:45:65:43:FF][LE]>connect
Attempting to connect to 03:0F:45:65:43:FF
Connection successful

# lists all other primary services
[03:0F:45:65:43:FF][LE]> primary
attr handle: 0x0001, end grp handle: 0x0005 uuid: 00001800-0000-1000-8000-00805f9b34fb
attr handle: 0x0006, end grp handle: 0x0009 uuid: 00001801-0000-1000-8000-00805f9b34fb

# lists all characteristics
[03:0F:45:65:43:FF][LE]> characteristics
handle: 0x0002, char properties: 0x02, char value handle: 0x0003, uuid: 00002a00-0000-1000-8000-00805f9b34fb
handle: 0x0004, char properties: 0x02, char value handle: 0x0005, uuid: 00002a01-0000-1000-8000-00805f9b34fb

# 2902 is UUID of CCC service
[03:0F:45:65:43:FF][LE]> char-read-uuid 2902
handle: 0x0009   value: 00 00
handle: 0x0019   value: 00 00

# Enable notifications
[03:0F:45:65:43:FF][LE]> char-write-req 0x0009 0100
Characteristic value was written successfully
[03:0F:45:65:43:FF][LE]> char-write-req 0x0019 0100
Characteristic value was written successfully
于 2018-06-16T04:09:09.927 に答える