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显示天气预报
Mar 02 Python
python正则表达式中的括号匹配问题
Dec 14 Python
简单介绍Python的轻便web框架Bottle
Apr 08 Python
Python自定义主从分布式架构实例分析
Sep 19 Python
python基于twisted框架编写简单聊天室
Jan 02 Python
python使用sqlite3时游标使用方法
Mar 13 Python
python format 格式化输出方法
Jul 16 Python
Python装饰器限制函数运行时间超时则退出执行
Apr 09 Python
python 中Arduino串口传输数据到电脑并保存至excel表格
Oct 14 Python
Python 使用 prettytable 库打印表格美化输出功能
Dec 26 Python
Python实现迪杰斯特拉算法过程解析
Sep 18 Python
python实现的web监控系统
Apr 27 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
让你的WINDOWS同时支持MYSQL4,MYSQL4.1,MYSQL5X
2006/12/06 PHP
php中stream(流)的用法
2014/03/25 PHP
php轻松实现中英文混排字符串截取
2014/05/28 PHP
php获取、检查类名、函数名、方法名的函数方法
2015/06/25 PHP
PHPCMS V9 添加二级导航的思路详解
2016/10/20 PHP
PHP更安全的密码加密机制Bcrypt详解
2017/06/18 PHP
php转换上传word文件为PDF的方法【基于COM组件】
2019/06/10 PHP
JS+XML 省份和城市之间的联动实现代码
2009/10/14 Javascript
异步加载script的代码
2011/01/12 Javascript
javascript实现可改变滚动方向的无缝滚动实例
2013/06/17 Javascript
js借助ActiveXObject实现创建文件
2013/09/29 Javascript
Get中文乱码IE浏览器Get中文乱码解决方案
2013/12/26 Javascript
使用jQuery实现验证上传图片的格式与大小
2014/12/03 Javascript
JavaScript中split() 使用方法汇总
2015/04/17 Javascript
jQuery实现自动滚动到页面顶端的方法
2015/05/22 Javascript
JavaScript如何禁止Backspace键
2015/12/02 Javascript
JavaScript实现仿淘宝商品购买数量的增减效果
2016/01/22 Javascript
非常酷炫的Bootstrap图片轮播动画
2016/05/27 Javascript
js鼠标单击和双击事件冲突问题的快速解决方法
2016/07/11 Javascript
JS日程管理插件FullCalendar简单实例
2017/02/07 Javascript
手把手教你搭建ES6的开发运行环境
2017/07/11 Javascript
nodejs实现大文件(在线视频)的读取
2020/10/16 NodeJs
微信小程序实现跑马灯效果
2020/10/21 Javascript
TypeScript高级用法的知识点汇总
2019/12/17 Javascript
vue.js实现照片放大功能
2020/06/23 Javascript
Vue.js原理分析之nextTick实现详解
2020/09/07 Javascript
基于vue的video播放器的实现示例
2021/02/19 Vue.js
Python中DJANGO简单测试实例
2015/05/11 Python
Python用Pillow(PIL)进行简单的图像操作方法
2017/07/07 Python
Python应用领域和就业形势分析总结
2019/05/14 Python
使用Tensorflow实现可视化中间层和卷积层
2020/01/24 Python
python 对xml解析的示例
2021/02/27 Python
浅谈html5 video 移动端填坑记
2018/01/15 HTML / CSS
英国文具、办公用品和科技商店:Ryman
2018/09/27 全球购物
安全生产工作汇报
2014/10/28 职场文书
公文写作:新员工转正申请书范本3篇!
2019/08/07 职场文书