即使使用hcitool lescan可以发现设备,BLE gatttool也无法连接

use*_*217 10 hci sensor raspberry-pi bluetooth-lowenergy gatt

我正在使用USB蓝牙适配器运行RPi.当我使用hcitool时,我可以发现SmartTag设备.但是当我使用gatttool时,我无法连接.它说"主机停机(112)".这是我的命令:

$ sudo hcitool lescan
LE Scan ...
BC:6A:29:AB:DE:2B (unknown)
BC:6A:29:AB:DE:2B SensorTag
Run Code Online (Sandbox Code Playgroud)

检查我的RPi上的蓝牙适配器我得到:

$ hcitool dev
Devices:
        hci0    5C:F3:70:60:E6:1B
Run Code Online (Sandbox Code Playgroud)

然后,当我像这样使用gatttool时,我得到:

$ sudo gatttool -i hci0 -b BC:6A:29:AB:DE:2B -I
[   ][BC:6A:29:AB:DE:2B][LE]>
Run Code Online (Sandbox Code Playgroud)

当我输入connect时,我得到了这个:

[   ][BC:6A:29:AB:DE:2B][LE]> connect
Connecting... connect error: Host is down (112)
[   ][BC:6A:29:AB:DE:2B][LE]>
Run Code Online (Sandbox Code Playgroud)

我在网上发现一些信息说"主机已关闭"意味着蓝牙传感器不在可发现模式.但就SmartTag而言,这是不正确的,因为我按下TI所说的传感器上的一个按钮(侧面按钮)以使其可被发现.hcitool lescan使用同一个来查找设备.还有一个Android应用程序可以在手机上运行,​​当按下相同的按钮时,它可以扫描,连接和读取SmartTag传感器.

有谁知道问题可能是什么?提前致谢

小智 14

我有同样的问题,这种方法对我有用:

卸下USB模块并重启RPi:

sudo shutdown -r now
Run Code Online (Sandbox Code Playgroud)

( 编辑: 您可能需要编辑/etc/apt/sources.list以成功安装此后列出的库.

nano /etc/apt/sources.list

deb http://archive.raspbian.org/raspbian wheezy main contrib non-free
deb-src http://archive.raspbian.org/raspbian wheezy main contrib non-free
Run Code Online (Sandbox Code Playgroud)

否则,您可能会偶然发现以下错误

checking for GLIB... no
configure: error: GLib >= 2.28 is required
Run Code Online (Sandbox Code Playgroud)

不要忘记更新,以便更改生效.

sudo apt-get update
Run Code Online (Sandbox Code Playgroud)

)

删除Bluez安装并执行更新:

sudo apt-get --purge remove bluez
sudo apt-get update
Run Code Online (Sandbox Code Playgroud)

您可以编辑/etc/apt/sources.list以确保您能够安装必要的库:

确保您拥有必要的库:

sudo apt-get install libusb-dev libdbus-1-dev libglib2.0-dev libudev-dev libical-dev libreadline-dev
Run Code Online (Sandbox Code Playgroud)

下载并提取最新的Bluez版本(当时为5.21):

sudo wget https://www.kernel.org/pub/linux/bluetooth/bluez-5.21.tar.xz
sudo tar xvf bluez-5.21.tar.xz
Run Code Online (Sandbox Code Playgroud)

转到Bluez文件夹,配置并安装(该sudo make行需要一些时间来处理):

cd bluez-5.21
sudo ./configure --disable-systemd
sudo make
sudo make install
Run Code Online (Sandbox Code Playgroud)

关闭RPi,以便插入蓝牙适配器,而不是再打开它

sudo shutdown -h now
Run Code Online (Sandbox Code Playgroud)

您可能需要启动USB加密狗:

sudo hciconfig hci0 up
Run Code Online (Sandbox Code Playgroud)

然后你可以再次尝试LESCAN:

sudo hcitool lescan
Run Code Online (Sandbox Code Playgroud)

假设它正常工作,你将会联系:

sudo hcitool lecc BC:6A:29:AB:DE:2B
sudo gatttool -b BC:6A:29:AB:DE:2B --interactive

[   ][BC:6A:29:AB:DE:2B][LE]> connect
[CON][BC:6A:29:AB:DE:2B][LE]>
Run Code Online (Sandbox Code Playgroud)

如果显示连接的"[CON]"线需要很长时间,请尝试按传感器标签上的侧面按钮使其再次可见.


这是来自这两个链接的信息的混合:

http://mike.saunby.net/2013/04/raspberry-pi-and-ti-cc2541-sensortag.html https://learn.adafruit.com/pibeacon-ibeacon-with-a-raspberry-pi/setting -up-的-π

  • 谢谢你的回答.在我的RPi上安装并重新启动后,它丢失了gatttool,所以我不得不做`sudo cp attrib/gatttool/usr/bin /`现在它连接了! (7认同)
  • 投票通过,谢谢。在撰写本文时,bluez-5.30存在。只有'apt-get ...'和'make install'需要sudo。'gatttool ...','wget ...','tar ...','configure ...'和'make'不需要root。 (2认同)