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获取文件所在目录和文件名的方法
Jan 12 Python
python bottle框架支持jquery ajax的RESTful风格的PUT和DELETE方法
May 24 Python
Python3 replace()函数使用方法
Mar 19 Python
Python实现随机生成手机号及正则验证手机号的方法
Apr 25 Python
python实现输入数字的连续加减方法
Jun 22 Python
python游戏地图最短路径求解
Jan 16 Python
详解Numpy中的数组拼接、合并操作(concatenate, append, stack, hstack, vstack, r_, c_等)
May 27 Python
Python hashlib加密模块常用方法解析
Dec 18 Python
如何基于pythonnet调用halcon脚本
Jan 20 Python
python标准库sys和OS的函数使用方法与实例详解
Feb 12 Python
使用Keras中的ImageDataGenerator进行批次读图方式
Jun 17 Python
浅谈Python数学建模之整数规划
Jun 23 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
PHP使用递归算法无限遍历数组示例
2017/01/13 PHP
php获取客户端IP及URL的方法示例
2017/02/03 PHP
另一个javascript小测验(代码集合)
2011/07/27 Javascript
分析了一下JQuery中的extend方法实现原理
2015/02/27 Javascript
JavaScript实现信用卡校验方法
2015/04/07 Javascript
使用javaScript动态加载Js文件和Css文件
2015/10/24 Javascript
Jquery easyui 实现动态树
2015/11/17 Javascript
jQuery Validate表单验证入门学习
2015/12/18 Javascript
Javascript自执行匿名函数(function() { })()的原理浅析
2016/05/15 Javascript
JS实现移动端实时监听输入框变化的实例代码
2017/04/12 Javascript
详谈angularjs中路由页面强制更新的问题
2017/04/24 Javascript
vue的Virtual Dom实现snabbdom解密
2017/05/03 Javascript
详解node nvm进行node多版本管理
2017/10/21 Javascript
javascript实现数字配对游戏的实例讲解
2017/12/14 Javascript
vue中的模态对话框组件实现过程
2018/05/01 Javascript
JS匿名函数内部this指向问题详析
2019/05/10 Javascript
微信小程序中如何使用flyio封装网络请求
2019/07/03 Javascript
微信小程序在其他页面监听globalData中值的变化
2019/07/15 Javascript
详解vue中$nextTick和$forceUpdate的用法
2019/12/11 Javascript
vue实现点击按钮“查看详情”弹窗展示详情列表操作
2020/09/09 Javascript
python网络编程学习笔记(七):HTML和XHTML解析(HTMLParser、BeautifulSoup)
2014/06/09 Python
python爬虫获取淘宝天猫商品详细参数
2020/06/23 Python
浅谈利用numpy对矩阵进行归一化处理的方法
2018/07/11 Python
python爬取淘宝商品销量信息
2018/11/16 Python
django+mysql的使用示例
2018/11/23 Python
如何基于Python实现数字类型转换
2020/02/07 Python
HTML5中canvas中的beginPath()和closePath()的重要性
2018/08/24 HTML / CSS
HTML5如何使用SVG的方法示例
2019/01/11 HTML / CSS
HTML5超文本标记语言的实现方法
2020/09/24 HTML / CSS
丝芙兰波兰:Sephora.pl
2018/03/25 全球购物
中国汽车租赁行业头部企业:一嗨租车
2019/05/16 全球购物
教育专业个人求职信
2013/12/02 职场文书
妇联主席先进事迹
2014/05/18 职场文书
大学生标准自荐书
2014/06/15 职场文书
纪念九一八事变演讲稿:牢记九一八,屈辱怎能忘
2014/09/14 职场文书
公务员政审材料范文
2014/12/23 职场文书