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登录:
"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) "color: #ff0000">3、看文档,玩DEMO
bluepy 的文档地址 LINK-2
在bluepy中新建一个examples文件夹,用来存放接下来我们的测试DEMO:
3.1 scan devices demo
这里第一个DEMO是BLE设备扫描,这里用到了Scanner对象,该对象可以用来搜索BLE设备的广播包数据。在大多数情况下该对象将会扫描出周围所有可连接设备。
下面是我改造为python3的代码:
"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改造下:
"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会返回所连接设备的服务;
执行效果如下:
3.3 get characteristics
同3.2获取characteristic的代码如下:
"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())
执行效果如下:
3.4 get device name
直接上代码:
"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 是非常棒的一款蓝牙BLE工具,掌握它会为你节省比较多的时间~
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
bluepy,python,封装
免责声明:本站文章均来自网站采集或用户投稿,网站不提供任何软件下载或自行开发的软件! 如有用户或公司发现本站内容信息存在侵权行为,请邮件告知! 858582#qq.com
《魔兽世界》大逃杀!60人新游玩模式《强袭风暴》3月21日上线
暴雪近日发布了《魔兽世界》10.2.6 更新内容,新游玩模式《强袭风暴》即将于3月21 日在亚服上线,届时玩家将前往阿拉希高地展开一场 60 人大逃杀对战。
艾泽拉斯的冒险者已经征服了艾泽拉斯的大地及遥远的彼岸。他们在对抗世界上最致命的敌人时展现出过人的手腕,并且成功阻止终结宇宙等级的威胁。当他们在为即将于《魔兽世界》资料片《地心之战》中来袭的萨拉塔斯势力做战斗准备时,他们还需要在熟悉的阿拉希高地面对一个全新的敌人──那就是彼此。在《巨龙崛起》10.2.6 更新的《强袭风暴》中,玩家将会进入一个全新的海盗主题大逃杀式限时活动,其中包含极高的风险和史诗级的奖励。
《强袭风暴》不是普通的战场,作为一个独立于主游戏之外的活动,玩家可以用大逃杀的风格来体验《魔兽世界》,不分职业、不分装备(除了你在赛局中捡到的),光是技巧和战略的强弱之分就能决定出谁才是能坚持到最后的赢家。本次活动将会开放单人和双人模式,玩家在加入海盗主题的预赛大厅区域前,可以从强袭风暴角色画面新增好友。游玩游戏将可以累计名望轨迹,《巨龙崛起》和《魔兽世界:巫妖王之怒 经典版》的玩家都可以获得奖励。