[历史归档]本文原发布于 cstriker1407.info 个人博客,内容为历史存档,仅供参考。
发布时间:2019-09-22| 标题:linux下使用蓝牙协议栈的一点记录|分类:操作系统 / linux / 网络通讯 / Bluetooth |标签:linux·ubuntu·bluetooth·blueZ·hciconfig
linux下使用蓝牙协议栈的一点记录
- blueZ安装
- hciconfig封装命令方式
- hci命令接口方式
- hci代码API方式
- bluepy
- pybluez
- 安装BLE支持
最近想在ubuntu和树莓派4上跑一些蓝牙应用,遇到了很多坑,这里简单的记录下。
blueZ安装
blueZ是linux的蓝牙官方协议栈,加上一堆蓝牙工具,安装命令如下:
$sudoapt-getinstallbluetooth 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命令来实现:
$sudohcitool-ihci0 cmd 0x08 0x0008 1E 02 01 1A 1A FF 4C 00 0215f6bc15e0939046679b e1866e c8 a199dc00 00 00 00 C8 00hci代码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支持
安装依赖:
$sudoapt-getinstallpkg-config libboost-python-dev libboost-thread-dev libbluetooth-dev libglib2.0-dev python-dev安装python组件gattlib:
gattlib自动安装有问题,需要手动安装 $ pip3 download gattlib $tar-xfgattlib-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=ifsys.version_info.major==3: - boost_libs=["boost_python-py34"]+ boost_libs=["boost_python-py3"+str(sys.version_info.minor)]else: $ pip3install.安装pybluez\
$sudopip3installpybluez\