好记性不如铅笔头

Bluetooth, linux, 操作系统, 网络通讯

linux下使用蓝牙协议栈的一点记录

最近想在ubuntu和树莓派4上跑一些蓝牙应用,遇到了很多坑,这里简单的记录下。

blueZ安装

blueZ是linux的蓝牙官方协议栈,加上一堆蓝牙工具,安装命令如下:

$ sudo apt-get install bluetooth bluez-utils bluez-compat blueman bluez-hcidump

在网上搜索一些蓝牙协议栈的讲解,可以发现蓝牙协议是分为硬件和软件两层的,历史演进又分为经典蓝牙和低功耗蓝牙,我们可以通过软件接口的方式来对蓝牙进行设置,考虑到软件接口层层封装,使用不同的软件接口层次,决定了可以设置蓝牙的粒度。

hciconfig封装命令方式

以设置蓝牙广播为例,命令如下:

$ hciconfig hci0 name hello_ble
$ hciconfig hci0 reset
$ hciconfig hci0 leadv  #打开广播
$ hciconfig hci0 noleadv #关闭广播

hci命令接口方式

这里参考一片博文【 https://cloud.tencent.com/developer/article/1023913 】,核心思路为使用hcitool的cmd命令来实现:

$ sudo hcitool -i hci0 cmd 0x08 0x0008 1E 02 01 1A 1A FF 4C 00 02 15 f6 bc 15 e0 93 90 46 67 9b e1 86 6e c8 a1 99 dc 00 00 00 00 C8 00

hci代码API方式

我们可以安装 【 libbluetooth-dev 】来得到蓝牙的开发环境,然后通过C语言编码的方式来控制蓝牙,考虑到业务复杂度,这里作者没有深入研究,就笔记2个python库来代替吧,深入分析这两个python组件,可以发现这两个python组件底层也是使用C语言直接和blueZ进行通讯的。

bluepy

bluepy是一个目前看起来还在维护的python组件,主要功能在BLE侧,同时内部自带了一个blueZ-5.47版本。不过可惜的是bluepy的官方DEMO比较少。

官方网址:【 https://github.com/IanHarvey/bluepy
线上文档:【 http://ianharvey.github.io/bluepy-doc/
第三方demo:【 https://github.com/rlangoy/bluepy_examples_nRF51822_mbed
参考涛哥文档:【 https://www.cnblogs.com/zjutlitao/p/10171913.html

pybluez

pybluez是一个比较旧的python组件了,主要功能在经典蓝牙侧,同时也可选支持BLE,但是需要安装一大堆第三方组件。

官方网址:【 https://github.com/pybluez/pybluez
如何安装:【 https://pybluez.readthedocs.io/en/latest/install.html

安装BLE支持

安装依赖:

$ sudo apt-get install pkg-config libboost-python-dev libboost-thread-dev libbluetooth-dev libglib2.0-dev python-dev

安装python组件gattlib:

gattlib自动安装有问题,需要手动安装
$ pip3 download gattlib
$ tar -xf gattlib-0.20150805.tar.gz 
修正如下内容,参考【 https://bitbucket.org/OscarAcena/pygattlib/pull-requests/22/python-3-minor-version-adaptation-for/diff#comment-None
 】
setup.py
     glib_libs = [x.strip() for x in glib_libs if x]
 
     if sys.version_info.major == 3:
-        boost_libs = ["boost_python-py34"]
+        boost_libs = ["boost_python-py3"+str(sys.version_info.minor)]
     else:

$ pip3 install .

安装pybluez\[ble\]

$ sudo pip3 install pybluez\[ble\]

 

Leave a Reply

15 + 13 =

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据