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的回调函数,我们可以在其回调函数中实时获取并打印。当超时后会返回一个设备列表;

执行效果如下:

注:注意用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], "")

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会返回所连接设备的服务;

执行效果如下:

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], "")

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())

执行效果如下:

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], "")

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 是非常棒的一款蓝牙BLE工具,掌握它会为你节省比较多的时间~

: 完~

大家觉得不错,可以点推荐给更多人~

LINKS

@beautifulzzzz

智能硬件、物联网,热爱技术,关注产品

博客:http://blog.beautifulzzzz.com

园友交流群:414948975

python利器-[python] bluepy 一款python封装的BLE利器相关推荐

  1. python利器怎么编程-bluepy 一款python封装的BLE利器简单介绍

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

  2. python编辑器_推荐一款Python编辑器,集Pycharm和Sublime优点于一身的王者

    编程里面的编辑器就像是武林大会里面的高手,每一年都有新秀,黑马出现!比如有练习霸道的天罡之气的榜首Pycharm,力量雄厚霸道战斗力极强,但是对斗气消耗很大,占内存大而且启动速度有点慢!还有练习灵巧的 ...

  3. python的编程工具spider_7款Python开发神器,拿走不谢

    在人工智能开启的时代,Python作为人工智能的首选语言,前景可以预见.因此学习Python的人越来越多.今天,快快小编准备给大家介绍7款Python开发神器,欢迎收藏转发! 1.Micro Pyth ...

  4. python用什么编译器-15款Python编辑器的优缺点,别再问我quot;选什么编辑器”啦

    本文介绍了多个 Python IDE,并评价其优缺点.读者可以参考此文列举的 Python IDE 列表,选择适合自己的编辑器. 写 Python 代码最好的方式莫过于使用集成开发环境(IDE)了.它 ...

  5. python游戏脚本dnf_一款Python自制的斗地主小游戏

    [实例简介] 一款Python自制的斗地主小游戏 [实例截图] [核心代码] 斗地主_Raffeale └── dist ├── avbin.dll ├── DouDiZhu.exe ├── gui_ ...

  6. python利器怎么用-bluepy 一款python封装的BLE利器简单介绍

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

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

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

  8. python工作流引擎 开源_7 款 Python 开源框架的优劣总结

    学习任何一门开发语言都离不开框架,一个框架就好比是一个毛坯房,只需要我们装修就可以入住.如果没有框架我们就只能一砖一瓦的去盖楼房了.框架的种类很多,具体选择要根据实际的业务情况.下面就简单的介绍一下P ...

  9. python中文编辑器推荐-八款Python编辑器对比介绍推荐

    我们学Python用什么编辑器比较好?工欲善其事必先利其器,选好工具学习更高效. 市面上流行的编辑器众多,根据自己的需求选择适合自己.我自己使用的pycharm配置简单功能强大使用起来省时省心,对初学 ...

最新文章

  1. 卡顿严重_魔兽怀旧服:安其拉开门二测结果出炉,暴雪依然无法解决卡顿问题...
  2. 图像处理之快速均值模糊(Box Blur)
  3. BufferedInputStream学习笔记
  4. 【QGIS入门实战精品教程】1.1:QGIS与GIS的区别和联系
  5. Java 面试之数据库
  6. protel四层板及内电层分割入门
  7. marmalade android 5.0 JNI 调用失败的解决方案
  8. JavaScript判断数组是否包含某元素
  9. web测试之功能测试总结
  10. CDR真实图片转水墨画效果制作教程
  11. 常用的各平台 hosts 文件位置
  12. 攻防世界crypto新手区writeup
  13. 2019 面试系列 - 简历
  14. ZooZ应用内移动支付解决方案公司获150万美金种子投资
  15. YumRepo Error: All mirror URLs are not using ftp, http[s] or file解决办法
  16. python 字节码_32.12. dis — Python 字节码反汇编器 — Python 2.7.18 文档
  17. java des解密乱码_des解密不完整,前面几位是乱码的解决办法
  18. SWIFT之殇——针对越南先锋银行的黑客攻击技术初探
  19. 齐博x1教程:快速增加下拉菜单
  20. 使用安装 .NET 脚本或提取二进制文件在 Linux 上安装

热门文章

  1. TensorFlow基础篇(一)——tf.train.exponential_decay()
  2. uboot之logo显示
  3. C#与C++在语言层面的区别(不断补充)
  4. tf.read_file和tf.image.decode_jpeg处理图片(转)
  5. Git 基本分支规范
  6. day07_mysql基本操作
  7. HTML5 Canvas渐进填充与透明(摘自 http://blog.csdn.net/jia20003/article/details/9251893)
  8. ASP.NET 经典60道面试题
  9. Test SRM Level Two: CountExpressions, Brute Force
  10. HDU2149 Public Sale【巴什博弈】