树莓派python蓝牙_【树莓派3B+测评】通过pybluez的例程试用蓝牙

【树莓派3B+测评】通过pybluez的例程试用蓝牙

[复制链接]

本帖最后由 icefire2012 于 2018-9-21 23:31 编辑

这周了解和学习3B+上的蓝牙模块。

一、蓝牙硬件部分了解

我在树莓派的官网上找到了3B+的原理图(见参考链接1),不过只是一部分,蓝牙芯片以及和CPU的连接接口没有显示出来。我在另外一个网站上(见参考链接2)查到3B+的蓝牙用的是Cypress 的CYW43455。CYW43455整合了高性能802.11ac、低功耗蓝牙4.2和经典蓝牙。现截取CYW43455的手册(见参考链接3)结构框图如下:

none.gif

1.png (43.78 KB, 下载次数: 0)

2018-9-21 23:19 上传 硬件上,蓝牙部分对外的接口,除了几个控制信号,就是UART,I2S和PWM了。在其它网站上(记不清楚出处了)看到过,CPU连接蓝牙芯片上的UART和IO扩展口上的UART(见下图中的GPIO14和GPIO15)是共用的,两者不能同时使用。后边会试用一下IO扩展口上的UART,看看是不是这样子的。

none.gif

2.png (62.88 KB, 下载次数: 0)

2018-9-21 23:19 上传

二、蓝牙的初步简单试用

这里的试用是让树莓派和手机之间通过蓝牙建立连接,并互传一些字符。

之前只是做过蓝牙的硬件,对协议栈不了解。为了让树莓派和手机建立连接,参考了比较成熟的方案,用python的pybluez库来操作树莓派上的蓝牙。pybluez在github上还提供了一些简单的测试例程,正好可以拿来直接用。

三、测试步骤

1.安装pybluez

pybluez依赖linux下的软件协议栈bluez以及库文件libbluetooth-dev。

sudo apt-get install bluez复制代码

sudo apt-get install libbluetooth-dev复制代码

sudo pip install pybluez复制代码

对于phthon3则是

sudo pip3 install pybluez复制代码

下面显示了我当前安装的各个软件包的版本。

none.gif

3.png (43.53 KB, 下载次数: 0)

2018-9-21 23:19 上传 我这个版本的系统上,bluez随系统自带,libbluetooth-dev没有安装。我当时直接安装pybluez的时候,报下面的错误。先安装libbluetooth-dev就解决了。

none.gif

4.png (9.62 KB, 下载次数: 0)

2018-9-21 23:19 上传 2.这里树莓派和手机通信,用的是蓝牙里的RFCOMM协议。pybluez已经提供了简单的测试例程 rfcomm-server.py(见参考链接4)。

这个例程是建立了一个简单的BluetoothSocket Server,然后启动侦听来自其它设备的连接。这时可以用安卓手机去连接树莓派,顺利的话会创立一个连接。接下来树莓派可以接收到手机发来的数据,并将其打印出来。最后如果在手机端断开连接,树莓派server这端会进行异常处理,关闭socket,结束程序。

在运行测试例程之前,需要先修改一下bluetooth.service文件:

sudo vi /lib/systemd/system/bluetooth.service复制代码

none.gif

5.png (27.92 KB, 下载次数: 0)

2018-9-21 23:19 上传 红框中的第一行的 -E -C 是需要加上的,如果没有的话,运行例程时会报错 bluetooth.btcommon.BluetoothError: (2, 'No such file or directory')

红框中的第二行是需要手动添加的,没有这一句,在手机上连接树莓派时会总是失败。

ExecStartPost=/usr/bin/sdptool add SP复制代码

另外在 rfcomm-server.py原文件第33行添加一行代码:

client_sock.send(data.encode('utf-8'))复制代码

none.gif

6.png (8.35 KB, 下载次数: 0)

2018-9-21 23:19 上传 将接收到的字符再发送回去,这样就是互传字符了。

在终端中运行测试例程,需要加sudo,否则权限不足会报错。

sudo python rfcomm-server.py复制代码

这个时候就可以在手机上连接树莓派了。

none.gif

7.png (20.22 KB, 下载次数: 0)

2018-9-21 23:19 上传

3.手机上的操作

我是在安卓手机上操作的,因为主要用的是RFCOMM协议,所以首先需要安装一个蓝牙串口软件。我在应用宝上找了几个,感觉下面这个比较好用,贴一个图标在这里。

none.gif

8.png (6.51 KB, 下载次数: 0)

2018-9-21 23:19 上传 打开后,在界面上点击连接,并搜索,我这里因操作过一次,所以直接记录到“已配对”下面了。

none.gif

9.png (33.79 KB, 下载次数: 0)

2018-9-21 23:19 上传

连接上后,树莓派终端中会打印出手机蓝牙的MAC地址:

none.gif

10.png (9.89 KB, 下载次数: 0)

2018-9-21 23:19 上传

手机端和树莓派端的“聊天”记录截屏如下:

none.gif

11.png (54.29 KB, 下载次数: 0)

2018-9-21 23:19 上传

none.gif

12.png (12.22 KB, 下载次数: 0)

2018-9-21 23:19 上传

四、总结

通过这几天的学习和了解,在树莓派和安卓手机之间通过蓝牙进行了简单的通信试验,并对RFCOMM协议有了初步的认识。这里的通信应该还是基于经典蓝牙协议进行的。后续如果时间充足的话,将进一步尝试让树莓派和一个BLE 设备通信。

五、参考链接

1.3B+原理图。https://www.raspberrypi.org/docu ... lus_1p0_reduced.pdf

2.树莓派介绍。http://shumeipai.nxez.com/2018/0 ... bplus-sale-now.html

3.CYW43455的手册。http://www.cypress.com/file/358916/download

4.rfcomm-server.py下载地址。 https://github.com/pybluez/pybluez/blob/master/examples

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值