首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >与Bluez连接后无法读取HM-10。

与Bluez连接后无法读取HM-10。
EN

Stack Overflow用户
提问于 2018-06-10 23:26:05
回答 2查看 1.6K关注 0票数 0

我希望你能帮我弄清楚如何使用蓝光从HM-10 BLE模块中读取。为什么这对我来说是个问题?我无法正确地读或写,我的最终目标是使用伊恩哈维的蓝色库,建立在顶级的布吕兹堆栈上。任何帮助都是非常感谢的。谢谢!

连接到arduino nano的HM-10会说"Foobar“,等一下,说"Barfoo",等一下,然后重复。我的iOS蓝牙串行应用程序(在应用程序商店中名为" Serial“)正确地捕捉到了这一点。

硬件:覆盆子Pi ZeroW内核: 4.9.68+蓝光: 5.50 (2018年6月3日发布)

主要问题

我不能用蓝宝石来读"Foobar“和”Barfoo“。

代码语言:javascript
复制
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 ),我可以看到我的raspberry pi零W看到了这些值。下面的条目每隔一秒重复一次。

代码语言:javascript
复制
> 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

426172666f0d0a= Barfoo (hex2ascii)

466f6f6261720d0a = Foobar (hex2ascii)

从其他属性中得不到读数

如果您知道HM-10,您就知道ffe1应该用于uart数据传输。我在我自制的安卓应用程序中编码了ffe1,它作为主机与HM-10配对。但是,我想看看其他属性给了我什么。

代码语言:javascript
复制
[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命令所示。

代码语言:javascript
复制
[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

当我使用不同的nano/HM-10组合时,这个值是@|...x的不同胡言乱语,无论是对于信息/制造数据还是对uuid ffe1的读取。

此外,当我最初连接到设备时,btmon显示

代码语言:javascript
复制
@ 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) (有四个正方形,我无法正确显示。这些与这四个时期是一致的)

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-06-16 04:09:09

btmon日志显示来自HM-10设备的数据以通知的形式出现。在BLE中,您有三种数据传输方式:读、写和通知。读取是关贸总协定客户端(在您的例子中是Bluez)从GATT服务器的服务特性或服务描述符读取数据,条件是允许对这些各自的特征或描述符进行读取操作。写操作是关贸总协定客户端通过写入其服务特性或描述符将数据发送到GATT服务器(HM-10)。

GATT服务器向GATT客户端发送数据的唯一途径是通知。但关贸总协定客户端需要在建立连接后在GATT服务器上启用通知。启用通知可以通过写入GATT服务器的客户端特征配置描述符(CCC)来完成。CCC是蓝牙核心规范中定义的一种特殊的GATT服务。

一旦启用通知,您将看到GATT服务器上的数据。使用Bluez,您可以使用gatttool完成所有的BLE操作。以下是一个例子:

例如,如果HM-10的蓝牙设备地址为03:0F:45:65:43:FF,而设备hci接口地址为hci0,则下面的命令序列启用通知:

代码语言:javascript
复制
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
票数 2
EN

Stack Overflow用户

发布于 2018-06-11 18:06:53

我对Bluez一无所知,但你收到的是广告数据,而不是来自HM10的Tx数据。要读取数据,必须使用服务:"0000ffe0-0000-1000-8000-00805f9b34fb“和特性:"0000ffe1-0000-1000-8000-00805f9b34fb".

必须将通知描述符写入此特性。

为了获得不需要进行读取的数据,数据在通知-有效载荷中,您在特征更改事件中读取它,或者在布洛伊兹中称为。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50788896

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档