树莓派python扫描蓝牙
环境
树莓派3b+
python3.7
蓝牙设备
pybluez库
github链接:https://github.com/pybluez/pybluez
- 安装库
sudo pip3 install pybluez
- 简单扫描
import bluetoothnearby_devices = bluetooth.discover_devices(lookup_names=True)
print("Found {} devices.".format(len(nearby_devices)))for addr, name in nearby_devices:print(" {} - {}".format(addr, name))
能够正常运行,但只能扫描到手机。我用的是蓝牙卡片,手机扫描到的是在其他设备
栏里,查找资料发现是属于低功耗蓝牙设备ibeacon
。下面还有另一个官方示例,提示是扫描低功耗的,尝试一下。
- 低功耗扫描
from bluetooth.ble import DiscoveryServiceservice = DiscoveryService()
devices = service.discover(2)for address, name in devices.items():print("name: {}, address: {}".format(name, address))
运行后提示缺少gattlib
库,由于该库依赖其他环境,找了半天解决方案还是有问题,于是放弃了,暂时只能做到扫描手机设备。
bluepy库
github链接:https://github.com/IanHarvey/bluepy
找到了另外一个蓝牙扫描库,能扫出低功耗的蓝牙设备。
- 安装库
sudo pip3 install bluepy
- 示例代码
from bluepy.btle import Scanner, DefaultDelegateclass 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)
print(len(devices))
for dev in devices:print("---------------")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.scan(10.0)
代表扫描时间
- 扫描结果
---------------
Device ac:23:3f:58:4e:ca (public), RSSI=-61 dBFlags = 06Manufacturer = 4c000215fda50693a4e24fb1afcfc6eb0764782527114cb9c5Tx Power = ecComplete 16b Services = 0000fda5-0000-1000-8000-00805f9b34fb16b Service Data = a5fd6427114cb9ac233f584ecaComplete Local Name = axon_33
---------------
Device ac:23:3f:58:4f:fd (public), RSSI=-86 dBFlags = 06Manufacturer = 4c000215fda50693a4e24fb1afcfc6eb0764782527114cb9c5Tx Power = ecComplete 16b Services = 0000fda5-0000-1000-8000-00805f9b34fb16b Service Data = a5fd6427114cb9ac233f584ffdComplete Local Name = axon_71
目前需求需要让设备持续扫描一段时间,将所有的蓝牙信息上报,为防止扫描遗漏,故需扫描时间延长到几十秒以上。
但发现若扫描时间过长,会报bluepy.btle.BTLEDisconnectError: Device disconnected
错误。原因是某个蓝牙设备的断开而使程序发生错误了,于是想到开启额外线程循环扫描,每次扫描时间设为5秒,代码如下:
- 循环扫描
from bluepy.btle import Scanner, DefaultDelegate
from multiprocessing import Process, Eventclass 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)class BLEScanner:def __init__(self):self.scanner = Scanner().withDelegate(ScanDelegate())self.stop_event = Event()def start(self):self.stop_event.clear()self.process = Process(target=self.scan, args = ())self.process.start()return selfdef scan(self):while True:if self.stop_event.is_set():returnself.devices = self.scanner.scan(5, passive=True)def stop(self):self.stop_event.set()
BLEScanner().start()
后续只要将mac地址扔到set集合中,收集一段时间后上报就行了。
树莓派python扫描蓝牙相关推荐
- 树莓派python蓝牙_树莓派的蓝牙操作
树莓派端的蓝牙操作 首先利用ssh登录树莓派(假设用户名为pi) ssh pi@xxx.xxx.xxx.xxx 更新软件源.软件包等相关操作: sudo apt-get update sudo apt ...
- 树莓派python蓝牙_树莓派3B 爬虫蓝牙播放器
一直没有尝试使用一下树莓派3B 的蓝牙功能,今天特别想试试,于是就烧录了最新的raspbian镜像,然后接上5寸GPIO触摸屏和键盘鼠标,开始了调试,网上看了看其他人的教程,发现都很老了,有的还不能用 ...
- 树莓派python蓝牙_用树莓派玩转蓝牙
作者:Vamei 出处:http://www.cnblogs.com/vamei 严禁转载. 蓝牙是一个使用广泛的无线通信协议,这两年又随着物联网概念进一步推广.我将介绍蓝牙协议,特别是低功耗蓝牙,并 ...
- python程序语言和机器人控制-利用树莓派+Python语言制作一部机器人就是如此简单!...
前段时间,接触了一款在开源硬件界被称为是"人气之王"的树莓派(Raspberry Pi)袖珍计算机,功能强大的她拥有一颗SOC,集CPU.GPU.DSP和SDRAM为一体,以SD卡 ...
- python使用蓝牙功能_python bluetooth蓝牙信息获取蓝牙设备类型的方法
python 获取蓝牙设备类型 扫描蓝牙设备获取到的信息中,无法判断扫描到的蓝牙设备属于什么类型的设备. 扫描蓝牙信息使用的是python 里面的bluetooth模块. 首先扫描出来的是这样的信息 ...
- 阿里云物联网平台体验(树莓派+Python篇)
阿里云物联网平台体验(树莓派+Python篇) 虽然对阿里云物联网平台比较熟悉了,从一开始就有幸参与了飞凤平台(Link Develop 一站式开发平台的前身)的一些偏硬件接入的工作.但是同时也见证了 ...
- 单片机与树莓派蓝牙连接_用树莓派玩转蓝牙
作者:Vamei 出处:http://www.cnblogs.com/vamei 严禁转载. 蓝牙是一个使用广泛的无线通信协议,这两年又随着物联网概念进一步推广.我将介绍蓝牙协议,特别是低功耗蓝牙,并 ...
- python bluetooth蓝牙信息获取蓝牙设备类型
本篇文章主要介绍了python bluetooth蓝牙信息获取蓝牙设备类型的要领,对大家的学习或者工作具有一定的参考学习价值,感兴趣的小伙伴们可以参考一下. python 获取蓝牙设备类型 扫描蓝牙设 ...
- 《树莓派Python编程指南》——2.2 一个Python游戏:猫和老鼠
本节书摘来自华章计算机<树莓派Python编程指南>一书中的第2章,第2.2节,作者:(美) Alex Bradbury Ben Everard更多章节内容可以访问云栖社区"华章 ...
- 《树莓派Python编程指南》—— 1.3 树莓派快速指南
本节书摘来自华章计算机<树莓派Python编程指南>一书中的第1章,第1.3节,作者:(美) Alex Bradbury Ben Everard更多章节内容可以访问云栖社区"华章 ...
最新文章
- 解读Java 8 中为并发而生的 ConcurrentHashMap
- iOS MKMapView 地图视图
- 浙大博士导师整理:Tensorflow和Pytorch的笔记(包含经典项目实战)
- CentOS7 升级 Git 版本
- JS输入框统计文字数量
- 泰坦尼克号数据集_泰坦尼克号项目可视化
- 他用几个公式解释了现金贷业务的风控与运营 (下) 2017-09-18 22:04 风控/运营/违约 “金额如此小的业务,成本极度敏感,刚开始的时候我们在数据成本和坏账成本之间特别纠结。” 以上是许
- 一名 40 岁“老”程序员的反思~
- 做报表必看!一个工具就可搞定中国式复杂报表需求
- postgresql(2)
- @EnableDiscoveryClient和@EnableEurekaClient
- VMware vSphere Documentation(产品文档)
- cordova android ios
- 前端学习01-07图像标签
- 递归算法实例:阶乘(vb.net代码)
- Java编程语言的重要性
- 使用决策树预测隐形眼镜类型
- 导出excel 并且处理长数字,处理科学计数法,以文本形式存储的数字
- mysql 切分_MySQL切分查询用法分析
- c罗图片带字经典语言,6张适合发朋友圈的人生哲理经典语句图片带字表情包 句句触动人心...
热门文章
- 隋政军---将木屋烧烤打造成中国领先的烧烤品牌
- PSB格式转换太麻烦?Aspose.PSD教你用代码将大型PSB文件转换为PDF/JPEG格式
- 各代iphone尺寸_Iphone 历代 参数
- 基于springboot的电影推荐网站管理系统
- 使用Modular QoS CLI(MQC)基于FR的DLCI号对包进行分类
- opencvsharp阈值分割threshold函数的ThresholdTypes
- 0-day漏洞,1-day漏洞,n-day漏洞各自是什么意思?
- KYC (Know Your Customer) 综述篇
- JMF-Java媒体框架
- 华为路由器IPv6 over IPv4 GRE隧道配置详解