[BlueZ] 1、Download install and use the BlueZ and hcitool on PI 3B+
星期日, 02. 九月 2018 11:58下午 - beautifulzzzz
1. Introduction
Bluez is the default Bluetooth protocol stack on Linux. It should be present and installed on your Linux distribution. If not, building and installing from source is not too difficult:
- Download the latest stable source release of Bluez from here. Unzip the compressed file you downloaded.
- Install the headers and libraries required for Bluez compilation:
2. Download And Install
I follow the blog (Installing Bluez 5.44 onto Raspbian?) to install bluez-5.50.
Download the most recent version from the official page:http://www.bluez.org/download/.
For example, at the time of writing it was 5.50, so I used(on my pi):
wget http://www.kernel.org/pub/linux/bluetooth/bluez-5.50.tar.xz
Then I extracted it and built it:
tar -xf bluez-5.50.tar.xz
cd bluez-5.50
**Read the README! **It lists the dependencies and the configure switches:
Install the dependencies first: (glib, dbus, libdbus, udev, etc.)
sudo apt install libdbus-1-dev libudev-dev libical-dev libreadline-dev
note: If you do not install the libdbus-1-dev, you will later get this strange error:
configure: error: D-Bus >= 1.6 is required
once you've installed dependencies, you can configure switches:
./configure --prefix=/usr --mandir=/usr/share/man --sysconfdir=/etc --localstatedir=/var --enable-experimental
then do:
make
sudo make install
It takes maybe 10 minutes to compile. After installing, you should find bluetoothd in /usr/libexec/bluetooth
. You should also see bluetoothd in /usr/lib/bluetooth
.
Go to each of these directories and type
./bluetoothd --version
You'll note that the one in libexec is new and the one in lib is old.
In order to make sure that d-bus is talking to you new BlueZ 5.50 and not your old BlueZ 5.43, you need to tell systemd to use the new bluetooth daemon:
sudo vim /lib/systemd/system/bluetooth.service
Make sure the exec.start
line points to your new daemon in /usr/libexec/bluetooth
.
For me, that wasn't enough. No matter what, upon restart I always got bluetoothd 5.43... So I just created a symlink from the old one to the new.
First rename the old file:
sudo mv /usr/lib/bluetooth/bluetoothd /usr/lib/bluetooth/bluetoothd-543.orig
Create the symlink:
sudo ln -s /usr/libexec/bluetooth/bluetoothd /usr/lib/bluetooth/bluetoothd
sudo systemctl daemon-reload
That should do it.
3. How to use the bluez and hcitool
3.1 setup bluetooth service
Start the bluetooth service and enable automatic startup, assuming you're using systemd as the init daemon:
sudo systemctl start bluetooth.service
sudo systemctl enable bluetooth.service
3.2 hcitool scan for bluetooth devices
Before start scanning make sure that your bluetooth device is turned on and not blocked, you can check that with the rfkill command:
sudo rfkill list
If the bluetooth device is blocked (soft or hard blocked), unblock it with the rfkill command again:
sudo rfkill unblock bluetooth
Bring up the bluetooth device with hciconfig command and start scanning, make sure the target device's bluetooth is on and It's discoverable:
sudo hciconfig hci0 up
hcitool scan
Wait few moment to complete the hcitool scan or hcitool lescan, the results will be something like bellow:
Here 00:1A:7D:DA:71:0A is the bluetooth MAC address and SHEN-PC is the name of the bluetooth device, i.e. an PC.
note: use hcitool lescan
will forever scan ble devices, if use ctrl+c stop it, it will show error(ref to LINKS 4 to solve):
hcitool lescan
Set scan parameters failed: Input/output error
3.3 bluetooth service discovery
Now we have the bluetooth MAC address of the target device, use the sdptool
command to know which services (like DUN, Handsfree audio) are available on that target device.
sdptool browse 28:ED:6A:A0:26:B7
You can also use the interactive bluetoothctl
tool for this purpose.
If the target device is present, you can ping it with l2ping command, requires root privilege:
➜ bluez-5.50 sudo l2ping 94:87:E0:B3:AC:6F
Ping: 94:87:E0:B3:AC:6F from B8:27:EB:8E:CC:51 (data size 44) ...
44 bytes from 94:87:E0:B3:AC:6F id 0 time 53.94ms
44 bytes from 94:87:E0:B3:AC:6F id 1 time 77.12ms
44 bytes from 94:87:E0:B3:AC:6F id 2 time 38.63ms
44 bytes from 94:87:E0:B3:AC:6F id 3 time 46.13ms
44 bytes from 94:87:E0:B3:AC:6F id 4 time 59.96ms
5 sent, 5 received, 0% loss
So, bluetooth service discovery is useful to determine the type of the device, like if it's a bluetooth mp3 player or it's a keyboard.
LINKS
- 1.Bluetooth on Modern Linux by Szymon Janc
- 2.dbus-python tutorial
- 3.Linux bluetooth setup with bluez and hcitool
- 4.hcitool lescan shows I/O error
@beautifulzzzz
智能硬件、物联网,热爱技术,关注产品
博客:http://blog.beautifulzzzz.com
园友交流群:414948975
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 你所不知道的 C/C++ 宏知识
· 聊一聊 操作系统蓝屏 c0000102 的故障分析
· SQL Server 内存占用高分析
· .NET Core GC计划阶段(plan_phase)底层原理浅谈
· .NET开发智能桌面机器人:用.NET IoT库编写驱动控制两个屏幕
· 我干了两个月的大项目,开源了!
· 推荐一款非常好用的在线 SSH 管理工具
· 千万级的大表,如何做性能调优?
· 聊一聊 操作系统蓝屏 c0000102 的故障分析
· .NET周刊【1月第1期 2025-01-05】