Raspbian上的蓝牙LE

Sek*_*527 4 linux raspberry-pi bluetooth-lowenergy raspbian bluez

我从源代码安装了bluez-5.15,配置如下:

$ ./configure --prefix=/usr --mandir=/usr/share/man --sysconfdir=/etc \
--localstatedir=/var --libexecdir=/lib --disable-systemd
Run Code Online (Sandbox Code Playgroud)

然后我不得不手动将gatttool复制到/ usr/local/bin目录中

$ sudo cp attrib/gatttool /usr/local/bin/
Run Code Online (Sandbox Code Playgroud)

我重新启动了Raspberry Pi并尝试以下连接到我的BLE设备:

$ sudo hciconfig hci0 up

$ sudo hcitool lescan
LE Scan ...  
EA:FB:B5:CE:B0:13 DfuTarg

$ sudo hcitool lewladd EA:FB:B5:CE:B0:13

$ sudo hcitool lecc EA:FB:B5:CE:B0:13
Could not create connection: Input/output error
Run Code Online (Sandbox Code Playgroud)

那么我试着用gatttool连接:

$ gatttool -b EA:FB:B5:CE:B0:13 --interactive
[EA:FB:B5:CE:B0:13][LE]> connect
Attempting to connect to EA:FB:B5:CE:B0:13
Error: connect error: Device or resource busy (16)
[EA:FB:B5:CE:B0:13][LE]>
Run Code Online (Sandbox Code Playgroud)

我在这里缺少什么 - 这是配置问题吗?这些错误意味着什么?

Sek*_*527 11

首先,我与一位同事讨论了我的配置和Raspbian(或更具体地说是Debian),他建议使用以下配置设置:

./configure --prefix=/usr --mandir=/usr/share/man --sysconfdir=/etc --localstatedir=/var --enable-library --with-systemdsystemunitdir=/lib/systemd/system --with-systemduserunitdir=/usr/lib/systemd
Run Code Online (Sandbox Code Playgroud)

之后,经过进一步检查,以下是我能够成功连接的方式.所以发生的事情是我试图连接的设备(基于NRF的BLE设备)需要将LE地址标志设置为"随机".见下文:

gatttool -t random -b EA:FB:B5:CE:B0:13 -I
Run Code Online (Sandbox Code Playgroud)

然后结果:

[EA:FB:B5:CE:B0:13][LE]> connect
Attempting to connect to EA:FB:B5:CE:B0:13
Connection successful
[EA:FB:B5:CE:B0:13][LE]> characteristics
handle: 0x0002, char properties: 0x0a, char value handle: 0x0003, uuid: 00002a00
-0000-1000-8000-00805f9b34fb
Run Code Online (Sandbox Code Playgroud)

好哇!此外,可能需要将安全级别设置为低于高的值:

[EA:FB:B5:CE:B0:13][LE]> sec-level medium
Run Code Online (Sandbox Code Playgroud)

  • 有同样的问题,我猜-t随机是关键 (2认同)

wro*_*ell 5

根据我对Bluez 5.15的体验

  1. 确保您没有连接到BLE设备(请查看hcitool con).
  2. 不要运行hcitool lecc.
  3. 在您的问题中启动gatttool.
  4. gatttool中运行connect命令.如果命令挂起,则按设备上的按钮(即连接到SensorTag时有时需要).

我相信早期版本的Bluez需要hcitool lecc步骤,但事实并非如此.