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的Zato发送AMQP消息的教程
Apr 16 Python
Python开发虚拟环境使用virtualenvwrapper的搭建步骤教程图解
Sep 19 Python
python3.5安装python3-tk详解
Apr 26 Python
python读取Excel表格文件的方法
Sep 02 Python
python操作cfg配置文件方式
Dec 22 Python
python__new__内置静态方法使用解析
Jan 07 Python
基于Python计算圆周率pi代码实例
Mar 25 Python
手把手教你安装Windows版本的Tensorflow
Mar 26 Python
如何以Winsows Service方式运行JupyterLab
Aug 30 Python
用python实现一个简单计算器(完整DEMO)
Oct 14 Python
Python Serial串口基本操作(收发数据)
Nov 06 Python
python中pycryto实现数据加密
Apr 29 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
用sql命令修改数据表中的一个字段为非空(not null)的语句
2010/06/04 PHP
PHP代码保护--Zend Guard的使用详解
2013/06/03 PHP
PHP删除二维数组中相同元素及数组重复值的方法示例
2017/05/05 PHP
PHP使用PDO创建MySQL数据库、表及插入多条数据操作示例
2019/05/30 PHP
将CKfinder整合进CKEditor3.0的新方法
2010/01/10 Javascript
javascript 通用简单的table选项卡实现
2010/05/07 Javascript
js猜数字小游戏的简单实现代码
2013/07/02 Javascript
jquery设置控件位置的方法
2013/08/21 Javascript
js实现DOM走马灯特效的方法
2015/01/21 Javascript
Javascript核心读书有感之表达式和运算符
2015/02/11 Javascript
有关Promises异步问题详解
2015/11/13 Javascript
JS实现图片的不间断连续滚动的简单实例
2016/06/03 Javascript
jquery+CSS3实现3D拖拽相册效果
2016/07/18 Javascript
javascript编写简易计算器
2017/05/06 Javascript
javascript兼容性(实例讲解)
2017/08/15 Javascript
详解EasyUi控件中的Datagrid
2017/08/23 Javascript
使用jQuery实现页面定时弹出广告效果
2017/08/24 jQuery
angular写一个列表的选择全选交互组件的示例
2018/01/22 Javascript
使用vuepress搭建静态博客的示例代码
2019/02/14 Javascript
详解ES6中的Map与Set集合
2019/03/22 Javascript
浅谈vue项目用到的mock数据接口的两种方式
2019/10/09 Javascript
js实现div色块碰撞
2020/01/16 Javascript
js实现百度登录窗口拖拽效果
2020/03/19 Javascript
Vue 封装防刷新考试倒计时组件的实现
2020/06/05 Javascript
vue+ElementUI 关闭对话框清空验证,清除form表单的操作
2020/08/06 Javascript
js实现点击按钮随机生成背景颜色
2020/09/05 Javascript
Linux下使用python调用top命令获得CPU利用率
2015/03/10 Python
Python中for循环控制语句用法实例
2015/06/02 Python
HTML5中的nav标签学习笔记
2016/06/24 HTML / CSS
魔声耳机官方网站:Monster是世界第一品牌的高性能耳机
2016/10/26 全球购物
星空联盟C# .net笔试题
2014/12/05 面试题
2014年单位法制宣传日活动总结
2014/11/01 职场文书
优秀班集体事迹材料
2014/12/25 职场文书
合作与交流自我评价
2015/03/09 职场文书
旅行社计调工作总结
2015/08/12 职场文书
工作总结之小学教师体育工作范文(3篇)
2019/10/07 职场文书