使用Raspberry pi 3 B连接BLE设备

时间:2017-01-17 21:17:31

标签: raspberry-pi bluetooth-lowenergy raspberry-pi3 bluez

我知道这不是第一次被问到这个问题,但是在尝试了一周后我能做的每一件事之后,我仍然有问题。 我正在尝试连接到我的Raspberry pi到BLE设备。我可以扫描它们但不能连接它们。

我所遵循的最后一个解释是这个github问题:https://github.com/ukBaz/python-bluezero/issues/30

以下是我尝试更新bluez并使此连接正常工作的所有命令。

###Install RASPBIAN JESSIE LITE 
2017-01-11-raspbian-jessie-lite.img

###Updates
$ sudo apt-get update

$ sudo apt-get upgrade

###Add libs
$ sudo apt-get install bluetooth  bluez-tools build-essential autoconf glib2.0 libglib2.0-dev libdbus-1-dev libudev-dev libical-dev libreadline-dev git

###Get bluez-5.43
$ wget http://www.kernel.org/pub/linux/bluetooth/bluez-5.43.tar.xz

$ tar xf bluez-5.43.tar.xz

$ cd bluez-5.43

###Patch bluez
$ wget https://gist.github.com/pelwell/c8230c48ea24698527cd/archive/3b07a1eb296862da889609a84f8e10b299b7442d.zip

$ unzip 3b07a1eb296862da889609a84f8e10b299b7442d.zip

$ git apply  -v c8230c48ea24698527cd-3b07a1eb296862da889609a84f8e10b299b7442d/*

###Install bluez
$ ./configure --prefix=/usr --mandir=/usr/share/man --sysconfdir=/etc --localstatedir=/var --enable-experimental --enable-maintainer-mode

$ make -j 4 && sudo make install

### Add to /etc/dbus-1/system.d/bluetooth.conf 
<!-- allow users of bluetooth group to communicate -->
<policy group="bluetooth">
  <allow send_destination="org.bluez"/>
</policy>

$ sudo usermod -G bluetooth -a $USER

$ sudo sed -i '/^ExecStart.*bluetoothd\s*$/ s/$/ --experimental/' /lib/systemd/system/bluetooth.service

$ sudo systemctl daemon-reload

$ sudo service bluetooth restart

$ service bluetooth status

$ sudo reboot

$ sudo hcitool lescan
       LE Scan ...
       XX:XX:XX:XX:XX:XX (name)

$ gatttool -b XX:XX:XX:XX:XX:XX -I
       [XX:XX:XX:XX:XX:XX][LE]> connect
       Attempting to connect to XX:XX:XX:XX:XX:XX
       Error: connect error: Transport endpoint is not connected (107)


$ gatttool -b XX:XX:XX:XX:XX:XX -t random -I
       [XX:XX:XX:XX:XX:XX][LE]> connect
       Attempting to connect to XX:XX:XX:XX:XX:XX
       Error: connect error: Connection refused (111)

感谢您的帮助

编辑Constantin Chabirand的回答

$ systemctl status bluetooth
    ● bluetooth.service - Bluetooth service
       Loaded: loaded (/lib/systemd/system/bluetooth.service; enabled)
       Active: active (running) since Tue 2017-01-17 21:17:07 UTC; 1min 51s ago
         Docs: man:bluetoothd(8)
     Main PID: 587 (bluetoothd)
      Status: "Running"
       CGroup: /system.slice/bluetooth.service
               └─587 /usr/libexec/bluetooth/bluetoothd --experimental


$ bluetoothctl
    [NEW] Controller B8:27:EB:FD:93:2B raspberrypi [default]
    [bluetooth]# scan on
    Discovery started
    ....

    [bluetooth]# scan off
    [bluetooth]# connect XX:XX:XX:XX:XX:XX
    Attempting to connect to XX:XX:XX:XX:XX:XX
    Failed to connect: org.bluez.Error.Failed

修改2

使用简单的解决方案重新安装后:

$ bluetoothctl -v
    5.43

$ systemctl status bluetooth 
    ● bluetooth.service - Bluetooth service
       Loaded: loaded (/lib/systemd/system/bluetooth.service; enabled)
       Active: active (running) since Wed 2017-01-18 15:46:53 UTC; 3min 37s ago
         Docs: man:bluetoothd(8)
     Main PID: 586 (bluetoothd)
       Status: "Running"
       CGroup: /system.slice/bluetooth.service
               └─586 /usr/local/libexec/bluetooth/bluetoothd --experimental

$ sudo bluetoothctl
    [bluetooth]# connect XX:XX:XX:XX:XX:XX
    Attempting to connect to XX:XX:XX:XX:XX:XX
    Failed to connect: org.bluez.Error.Failed

4 个答案:

答案 0 :(得分:3)

感谢Constantin Chabirand,我让它成功了。我需要更多的命令行来使其工作,我需要更改我的BLE设备的广告频率(我仍然需要对此进行一些测试)。

以下是我用于在rpi3上安装bluez并连接到BLE设备的确切命令:

<ion-content>
  <ion-item>
      <ion-label stacked>Label</ion-label>
      <ion-input dirNumpad [numpad]="idNumpad" type="text" [(ngModel)]="myField"></ion-input>
  </ion-item>
</ion-content>
<ion-footer>
  <numpad #idNumpad hidden></numpad>
</ion-footer>

那就是它。再次感谢您的帮助。

答案 1 :(得分:1)

bash命令 systemctl status bluetooth 的结果是什么?

你能开始 bluetoothctl (只需在你的shell中输入)吗?

我还使用树莓派3连接到BLE设备,我不需要补丁。使用bluez5.43开始全新安装,并发布我编写的两个命令的结果

更新

对于安装,我用最简单的方式做到了。我遵循&#34;编译这个包的最简单方法是:&#34; INSTALL文件中的部分是:

 wget http://www.kernel.org/pub/linux/bluetooth/bluez-5.43.tar.xz

 tar xf bluez-5.43.tar.xz

 cd bluez-5.43.tar.xz

./configure

 make 

 make install

您是否已成功使用其他设备连接到BLE设备?像智能手机?有些应用程序可以读取gatt atrributes。

更新2

我没有删除任何东西。仅仅安装了bluez5.43。我跑的时候 bluetoothctl -v 它返回:5.43。

当我运行 apt list - installed 时,可以看到自动安装以下软件包:

bluez/stable,now 5.23-2+rpi2 armhf [installed,automatic]
bluez-firmware/stable,now 1.2-3+rpi1 all [installed,automatic]
bluez-obexd/stable,now 5.23-2+rpi2 armhf [installed,automatic]
bluez-tools/stable,now 0.2.0~20140808-3 armhf [installed]

如您所见,我仍然安装了旧版本。

答案 2 :(得分:1)

当从脚本中使用bluetoothctl时,我需要安装bluez-5.43来解决默认bluez-5.23中的错误。

您可以从stretch安装二进制版本,但我的经验是您经常遇到其他依赖项。

我在Ubuntu-16.04下遇到了同样的问题并使用了Ubuntu-Zesty的deb-src软件包来解决这个问题。由于这只是一个debian软件包,我在Raspberry pi上也使用过它,在使用USB蓝牙适配器时工作正常。要在RPI-3上工作,它的蓝牙控制器通过串行线连接,你也需要安装../issue/30补丁。

这样做的好处是,一旦你的Raspbian将包含一个更新的bluez版本,它将取代我们在这里做的,如果你有更多的raspbian系统,你当然只需要安装生成的.deb包< / p>

这就是我所做的(免提):

#!/bin/bash
sudo apt-get install devscripts debhelper dh-autoreconf flex bison libdbus-glib-1-dev libglib2.0-dev  libcap-ng-dev libudev-dev l
ibreadline-dev libical-dev check dh-systemd libebook1.2-dev

wget https://launchpad.net/ubuntu/+archive/primary/+files/bluez_5.43.orig.tar.xz
wget https://launchpad.net/ubuntu/+archive/primary/+files/bluez_5.43-0ubuntu1.debian.tar.xz
wget https://launchpad.net/ubuntu/+archive/primary/+files/bluez_5.43-0ubuntu1.dsc

tar xf bluez_5.43.orig.tar.xz
cd bluez-5.43
tar xf ../bluez_5.43-0ubuntu1.debian.tar.xz
# install patches relevant for rpi-3 bluetooth
. /etc/os-release
if [ $ID = raspbian ]; then
    wget https://gist.github.com/pelwell/c8230c48ea24698527cd/archive/3b07a1eb296862da889609a84f8e10b299b7442d.zip
    cd debian/patches
    unzip ../../3b07a1eb296862da889609a84f8e10b299b7442d.zip
    for i in c8230c48ea24698527cd-3b07a1eb296862da889609a84f8e10b299b7442d/*;do
        mv $i .
        basename $i >> series
    done
    rmdir c8230c48ea24698527cd-3b07a1eb296862da889609a84f8e10b299b7442d
    cd ../..
fi
# end of Raspian related patches
debchange --local=~lorenzen 'Backport to Xenial'
debuild -b -j4
cd ..
sudo dpkg -i *.deb

这也适用于其他Debian派生系统, https://askubuntu.com/a/884062/655086

答案 3 :(得分:0)

我遇到了与使用Raspberry Pi 3内置蓝牙连接和播放BLE设备相同的问题。首先,我通过以下网页学习了如何播放和控制 bluetoothctl 的工具。

[https://mcuoneclipse.com/2016/12/19/tutorial-ble-pairing-the-raspberry-pi-3-model-b-with-hexiwear/][1]

在本教程中,成功连接BLE设备后,您可以使用要播放的属性。

例如,如果您想使用蓝牙UART TX或RX的属性,您只需要输入以下命令,然后读取或写入该特性属性的值。

list-attributes 00:34:40:0A:00:4E 
select-attribute /org/bluez/hci0/dev_00_32_40_08_00_12/service0026/char0027
read 
write

如果有人完全了解在Raspberry Pi 3内置BLE和Arduino Ble之间建立蓝牙连接,请分享您的知识。 ;)