树莓派3B自带蓝牙模块,笔者就想通过树莓派蓝牙模块实现数据传输的可编程化,就想在树莓派上搭建一个蓝牙编程环境。以下是笔者搭建环境所出现的一些步骤、问题及其应对方案。
bluez的安装需要手动编译,在bluez官网(http://www.bluez.org/)中找到较新版本进行下载,笔者写文章时的最新版本是5.44,找到链接后在 ~/Downloads/下输入命令
$ wget http://www.kernel.org/pub/linux/bluetooth/bluez-5.44.tar.xz
下载到bluez源代码压缩包,执行
$ xz -d bluez-5.44.tar.xz
解压得到bluez-5.44.tar压缩包,再执行
$ tar -xvf bluez-5.44.tar
解压完成后,当前目录中就会多出来一个bluez-5.44目录,进入
$ cd bluez-5.44
ps:可以参照一下源码中附带的 README 文件,里面有大略的编译步骤,不过一些依赖包并没有给出详细的包名,需要你去一点一点探索。
首先更新一下源
$ sudo apt-get update
*** 请选择优质镜像站! ***
*** 请选择优质镜像站! ***
*** 请选择优质镜像站! ***
国内清华的源还不错,可以戳这里https://mirror.tuna.tsinghua.edu.cn/help/raspbian/,某些劣质源可能部分依赖版本跟不上,会导致一些问题,(笔者就是这样不知不觉废了几个系统
*** 一步到位安装方式: ***
按照README文件中的提示,在安装bluez的时候需要安装几个依赖
- GCC compiler
- GLib library
- D-Bus library
- udev library (optional)
- readline (command line clients)
直接安装这些依赖即可
sudo apt-get install gcc libglib2.0-dev libdbus-1-dev libdbus-c++-dev libudev-dev libical-dev libreadline-dev
在当前目录中,执行
$ ./configure --prefix=/usr --mandir=/usr/share/man \
--sysconfdir=/etc --localstatedir=/var
此时如果之前你没有安装过的话,可能会提示你安装一些依赖
- 如果提示
configure: error: GLib >= 2.28 is required
安装libglib2.0-dev即可
$ sudo apt-get install libglib2.0-dev
如果出现类似
The following packages have unmet dependencies
libglib2.0-dev : Depends: libglib2.0-0 (= 2.33.12+really2.32.4-5) but 2.42.1-1 is to be installed
Depends: libglib2.0-bin (= 2.33.12+really2.32.4-5) but 2.42.1-1 is to be installed
Depends: libpcre3-dev (>= 8.11) but it is not going to be installed
E: Unable to correct problems, you have held broken packages.
解决方法是降级安装这些依赖项,即执行
sudo apt-get install libglib2.0-0=2.33.12+really2.32.4-5 libglib2.0-bin=2.33.12+really2.32.4-5 libpcre3=1:8.30-5 libpcre3-dev
***注意⚠️:简单来说,遇到这种情况不要试图去直接安装这些包,系统会提示无法安装,需要你指定安装的版本,这样才能正常安装,包的版本可以直接填写该依赖需要的版本,即括号里面提示的版本号。不过遇到这种情况,请关注一下是不是你的源有问题,可以尝试先换成官方源。 ***
安装好依赖项之后就可以继续安装libglib2.0-dev了,完成后请重试configure的那条命令。
- 如果提示
configure: error: D-Bus >= 1.6 is required
安装libdbus-1-dev 和 libdbus-c++-dev 即可解决,执行
$ sudo apt-get install libdbus-1-dev libdbus-c++-dev
如果也出现依赖未被安装的问题,可以按照第一条的解决方案,下同。
- 如果出现
configure: error: libudev >= 172 is required
直接安装 libudev-dev 即可
$ sudo apt-get install libudev-dev
- 如果是
configure: error: libical is required
安装 libical-dev 即可
$ sudo apt-get install libical-dev
- 如果是
configure: error: readline header files are required
安装 libreadline-dev 依赖即可
$ sudo apt-get install libreadline-dev
如果没有任何报错,那么配置应该生成好了,接下来编译安装即可,直接在当前目录下执行:
sudo make && sudo make install
等运行完毕,bluez协议栈就安装好了。
可以安装 libbluetooth-dev
sudo apt-get install libbluetooth-dev
然后在C程序中编写蓝牙程序。
最后推荐一篇博客
http://blog.csdn.net/kobbee9/article/details/7751372,讲得蛮好的。