bluepy 一款python封装的BLE利器简单介绍


Posted in Python onJune 25, 2019

1、bluepy 简介
bluepy 是github上一个很好的蓝牙开源项目,其地址在 LINK-1, 其主要功能是用python实现linux上BLE的接口。

This is a project to provide an API to allow access to Bluetooth Low Energy devices from Python. At present it runs on Linux only; I've mostly developed it using a Raspberry Pi, but it will also run on x86 Debian Linux.

支持python版本:The code is tested on Python 2.7 and 3.4; it should also work on 3.3.

2、安装

直接源码安装,python3加持:

sudo apt-get install git build-essential libglib2.0-dev
git clone https://github.com/IanHarvey/bluepy.git
cd bluepy
python3 setup.py build
sudo python3 setup.py install

注:不要用python2,这辈子都不会用python2!

注:进行到这一步突然惊醒我的台式机无蓝牙,遂开启我的无屏幕树莓派,用命令找其ip,并用ssh登录:

➜ Downloads sudo nmap -sS -p 22 192.168.31.0/24 | grep -B 5 -A 0 "Pi"
Nmap scan report for 192.168.31.51
Host is up (0.19s latency).
PORT STATE SERVICE
22/tcp open ssh
MAC Address: B8:27:EB:71:33:AE (Raspberry Pi Foundation)
➜ Downloads ssh pi@192.168.31.51
pi@192.168.31.51's password: 1234

3、看文档,玩DEMO

bluepy 的文档地址 LINK-2

在bluepy中新建一个examples文件夹,用来存放接下来我们的测试DEMO:

3.1 scan devices demo

这里第一个DEMO是BLE设备扫描,这里用到了Scanner对象,该对象可以用来搜索BLE设备的广播包数据。在大多数情况下该对象将会扫描出周围所有可连接设备。

下面是我改造为python3的代码:

➜ examples git:(master) ✗ cat scan.py 
#!/usr/bin/env python
# coding=utf-8
from bluepy.btle import Scanner, DefaultDelegate
class ScanDelegate(DefaultDelegate):
def __init__(self):
DefaultDelegate.__init__(self)
def handleDiscovery(self, dev, isNewDev, isNewData):
if isNewDev:
print("Discovered device", dev.addr)
elif isNewData:
print("Received new data from", dev.addr)
scanner = Scanner().withDelegate(ScanDelegate())
devices = scanner.scan(10.0)
for dev in devices:
print("Device %s (%s), RSSI=%d dB" % (dev.addr, dev.addrType, dev.rssi))
for (adtype, desc, value) in dev.getScanData():
print(" %s = %s" % (desc, value))
  • 其中Scanner([index=0])用于产生并初始化一个新的scanner对象,index 用来指名哪一个蓝牙设备就会被用(默认0表示使用/dev/hci0)。扫描知道调用start或scan函数之后才会开始;
  • 其中withDelegate(delegate)存储对委托对象的引用,委托对象在接收来自设备的广播时接收回调。有关详细信息,请参阅DefaultDelegate的文档;
  • 其中scan([timeout = 10])开始扫描并带有超时,在此扫描期间扫描到的设备会触发Delegate的回调函数,我们可以在其回调函数中实时获取并打印。当超时后会返回一个设备列表;

执行效果如下:

bluepy 一款python封装的BLE利器简单介绍

注:注意用sudo运行,更详细的接口见 LINK-3

3.2 get services

bluepy 的DEMO有点少,我又找了个专是DEMO的github项目:LINK-5

将其中的getServices.py改造下:

➜ examples git:(master) ✗ cat get_setvices.py 
import sys
from bluepy.btle import UUID, Peripheral
if len(sys.argv) != 2:
print("Fatal, must pass device address:", sys.argv[0], "<device address="">")
quit()
p = Peripheral(sys.argv[1],"public")
services=p.getServices()
#displays all services
for service in services:
print(service)

其中Peripheral(sys.argv[1],"public")是用mac地址创建一个连接,由于我们上一步用scan搜索到的mac地址为public类型,因此这里第二个参数为"public",更详细的介绍见 LINK-6;

其中getServices会返回所连接设备的服务;

执行效果如下:

bluepy 一款python封装的BLE利器简单介绍

3.3 get characteristics

同3.2获取characteristic的代码如下:

➜ examples git:(master) ✗ cat get_characteristics.py 
import sys
from bluepy.btle import UUID, Peripheral
if len(sys.argv) != 2:
print("Fatal, must pass device address:", sys.argv[0], "<device address="">")
quit()
p = Peripheral(sys.argv[1],"public")
chList = p.getCharacteristics()
print("Handle UUID Properties")
print("-------------------------------------------------------") 
for ch in chList:
print(" 0x"+ format(ch.getHandle(),'02X') +" "+str(ch.uuid) +" " + ch.propertiesToString())

执行效果如下:

bluepy 一款python封装的BLE利器简单介绍

3.4 get device name

直接上代码:

➜ examples git:(master) ✗ cat get_device_name.py 
import sys
from bluepy.btle import UUID, Peripheral
dev_name_uuid = UUID(0x2A00)
if len(sys.argv) != 2:
print("Fatal, must pass device address:", sys.argv[0], "<device address="">")
quit()
p = Peripheral(sys.argv[1],"public")
try:
ch = p.getCharacteristics(uuid=dev_name_uuid)[0]
if (ch.supportsRead()):
print(ch.read())
finally:
p.disconnect()

运行效果如下:

bluepy 一款python封装的BLE利器简单介绍

小结

bluepy 是非常棒的一款蓝牙BLE工具,掌握它会为你节省比较多的时间~

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python发送arp欺骗攻击代码分析
Jan 16 Python
python在windows下实现ping操作并接收返回信息的方法
Mar 20 Python
Python实现K折交叉验证法的方法步骤
Jul 11 Python
关于django 1.10 CSRF验证失败的解决方法
Aug 31 Python
利用pandas将非数值数据转换成数值的方式
Dec 18 Python
django正续或者倒序查库实例
May 19 Python
python 字符串格式化的示例
Sep 21 Python
Python 解析xml文件的示例
Sep 29 Python
python中pow函数用法及功能说明
Dec 04 Python
使用BeautifulSoup4解析XML的方法小结
Dec 07 Python
如何编写python的daemon程序
Jan 07 Python
python 中yaml文件用法大全
Jul 04 Python
PyQt5下拉式复选框QComboCheckBox的实例
Jun 25 #Python
在Pandas中处理NaN值的方法
Jun 25 #Python
python实现websocket的客户端压力测试
Jun 25 #Python
python中metaclass原理与用法详解
Jun 25 #Python
python实现接口并发测试脚本
Jun 25 #Python
Python实现EXCEL表格的排序功能示例
Jun 25 #Python
python实现动态创建类的方法分析
Jun 25 #Python
You might like
ThinkPHP实现多数据库连接的解决方法
2014/07/01 PHP
Laravel 5.1 on SAE环境开发教程【附项目demo源码】
2016/10/09 PHP
PHP实现微信图片上传到服务器的方法示例
2017/06/29 PHP
PHP实现会员账号单唯一登录的方法分析
2019/03/07 PHP
javascript prototype原型操作笔记
2009/12/07 Javascript
jquery 新浪网易的评论块制作
2010/07/01 Javascript
Js-$.extend扩展方法使方法参数更灵活
2013/01/15 Javascript
DIV+CSS+JS不间断横向滚动实现代码
2013/03/19 Javascript
鼠标放在图片上显示大图的JS代码
2013/03/26 Javascript
onkeyup,onkeydown和onkeypress的区别介绍
2013/10/21 Javascript
jquery判断复选框选中状态以及区分attr和prop
2015/12/18 Javascript
jquery获取复选框checkbox的值实现方法
2016/05/30 Javascript
Javascript如何判断数据类型和数组类型
2016/06/22 Javascript
浅谈javascript中的三种弹窗
2016/10/21 Javascript
解析JavaScript实现DDoS攻击原理与保护措施
2016/12/26 Javascript
javascript 正则表达式去空行方法
2017/01/24 Javascript
JavaScript比较两个数组的内容是否相同(推荐)
2017/05/02 Javascript
Three.js中矩阵和向量的使用教程
2019/03/19 Javascript
微信小程序用户拒绝授权的处理方法详解
2019/09/20 Javascript
python实现可将字符转换成大写的tcp服务器实例
2015/04/29 Python
使用Python发送各种形式的邮件的方法汇总
2015/11/09 Python
CentOS中升级Python版本的方法详解
2017/07/10 Python
pygame游戏之旅 按钮上添加文字的方法
2018/11/21 Python
selenium+python自动化测试之页面元素定位
2019/01/23 Python
Python判断对象是否相等及eq函数的讲解
2019/02/25 Python
Pycharm使用之设置代码字体大小和颜色主题的教程
2019/07/12 Python
详解python tkinter模块安装过程
2020/01/06 Python
python中tkinter窗口位置\坐标\大小等实现示例
2020/07/09 Python
css3中用animation的steps属性制作帧动画
2019/04/25 HTML / CSS
详解CSS3的perspective属性设置3D变换距离的方法
2016/05/23 HTML / CSS
详解CSS3实现响应式手风琴效果
2020/06/10 HTML / CSS
俄罗斯鲜花递送:AMF
2020/04/24 全球购物
工商技校毕业生自荐信
2013/11/15 职场文书
教育学专业毕业生的自我评价
2013/11/21 职场文书
应届大学生自荐信
2013/12/05 职场文书
公司行政助理岗位职责
2015/04/11 职场文书