环境

树莓派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扫描蓝牙相关推荐

  1. 树莓派python蓝牙_树莓派的蓝牙操作

    树莓派端的蓝牙操作 首先利用ssh登录树莓派(假设用户名为pi) ssh pi@xxx.xxx.xxx.xxx 更新软件源.软件包等相关操作: sudo apt-get update sudo apt ...

  2. 树莓派python蓝牙_树莓派3B 爬虫蓝牙播放器

    一直没有尝试使用一下树莓派3B 的蓝牙功能,今天特别想试试,于是就烧录了最新的raspbian镜像,然后接上5寸GPIO触摸屏和键盘鼠标,开始了调试,网上看了看其他人的教程,发现都很老了,有的还不能用 ...

  3. 树莓派python蓝牙_用树莓派玩转蓝牙

    作者:Vamei 出处:http://www.cnblogs.com/vamei 严禁转载. 蓝牙是一个使用广泛的无线通信协议,这两年又随着物联网概念进一步推广.我将介绍蓝牙协议,特别是低功耗蓝牙,并 ...

  4. python程序语言和机器人控制-利用树莓派+Python语言制作一部机器人就是如此简单!...

    前段时间,接触了一款在开源硬件界被称为是"人气之王"的树莓派(Raspberry Pi)袖珍计算机,功能强大的她拥有一颗SOC,集CPU.GPU.DSP和SDRAM为一体,以SD卡 ...

  5. python使用蓝牙功能_python bluetooth蓝牙信息获取蓝牙设备类型的方法

    python 获取蓝牙设备类型 扫描蓝牙设备获取到的信息中,无法判断扫描到的蓝牙设备属于什么类型的设备. 扫描蓝牙信息使用的是python 里面的bluetooth模块. 首先扫描出来的是这样的信息 ...

  6. 阿里云物联网平台体验(树莓派+Python篇)

    阿里云物联网平台体验(树莓派+Python篇) 虽然对阿里云物联网平台比较熟悉了,从一开始就有幸参与了飞凤平台(Link Develop 一站式开发平台的前身)的一些偏硬件接入的工作.但是同时也见证了 ...

  7. 单片机与树莓派蓝牙连接_用树莓派玩转蓝牙

    作者:Vamei 出处:http://www.cnblogs.com/vamei 严禁转载. 蓝牙是一个使用广泛的无线通信协议,这两年又随着物联网概念进一步推广.我将介绍蓝牙协议,特别是低功耗蓝牙,并 ...

  8. python bluetooth蓝牙信息获取蓝牙设备类型

    本篇文章主要介绍了python bluetooth蓝牙信息获取蓝牙设备类型的要领,对大家的学习或者工作具有一定的参考学习价值,感兴趣的小伙伴们可以参考一下. python 获取蓝牙设备类型 扫描蓝牙设 ...

  9. 《树莓派Python编程指南》——2.2 一个Python游戏:猫和老鼠

    本节书摘来自华章计算机<树莓派Python编程指南>一书中的第2章,第2.2节,作者:(美) Alex Bradbury Ben Everard更多章节内容可以访问云栖社区"华章 ...

  10. 《树莓派Python编程指南》—— 1.3 树莓派快速指南

    本节书摘来自华章计算机<树莓派Python编程指南>一书中的第1章,第1.3节,作者:(美) Alex Bradbury Ben Everard更多章节内容可以访问云栖社区"华章 ...

最新文章

  1. 解读Java 8 中为并发而生的 ConcurrentHashMap
  2. iOS MKMapView 地图视图
  3. 浙大博士导师整理:Tensorflow和Pytorch的笔记(包含经典项目实战)
  4. CentOS7 升级 Git 版本
  5. JS输入框统计文字数量
  6. 泰坦尼克号数据集_泰坦尼克号项目可视化
  7. 他用几个公式解释了现金贷业务的风控与运营 (下) 2017-09-18 22:04 风控/运营/违约 “金额如此小的业务,成本极度敏感,刚开始的时候我们在数据成本和坏账成本之间特别纠结。” 以上是许
  8. 一名 40 岁“老”程序员的反思~
  9. 做报表必看!一个工具就可搞定中国式复杂报表需求
  10. postgresql(2)
  11. @EnableDiscoveryClient和@EnableEurekaClient
  12. VMware vSphere Documentation(产品文档)
  13. cordova android ios
  14. 前端学习01-07图像标签
  15. 递归算法实例:阶乘(vb.net代码)
  16. Java编程语言的重要性
  17. 使用决策树预测隐形眼镜类型
  18. 导出excel 并且处理长数字,处理科学计数法,以文本形式存储的数字
  19. mysql 切分_MySQL切分查询用法分析
  20. c罗图片带字经典语言,6张适合发朋友圈的人生哲理经典语句图片带字表情包 句句触动人心...

热门文章

  1. 隋政军---将木屋烧烤打造成中国领先的烧烤品牌
  2. PSB格式转换太麻烦?Aspose.PSD教你用代码将大型PSB文件转换为PDF/JPEG格式
  3. 各代iphone尺寸_Iphone 历代 参数
  4. 基于springboot的电影推荐网站管理系统
  5. 使用Modular QoS CLI(MQC)基于FR的DLCI号对包进行分类
  6. opencvsharp阈值分割threshold函数的ThresholdTypes
  7. 0-day漏洞,1-day漏洞,n-day漏洞各自是什么意思?
  8. KYC (Know Your Customer) 综述篇
  9. JMF-Java媒体框架
  10. 华为路由器IPv6 over IPv4 GRE隧道配置详解