admin管理员组

文章数量:1642157

目录

  • 前言
  • 安装bleson
  • 运行官方例程
    • basic_observer.py
    • basic_advertiser.py
  • Internal API

前言

系统:Windows10 企业版
IDE:pycharm2020
python版本:3.8.12
环境创建: Anaconda3
电脑:台式机 外接蓝牙

bleson github地址:https://github/TheCellule/python-bleson

本来想试试pybluez(py3.8)的,但是安装报错Windows SDK相关的错误,懒得搞了(后来试了py3.6,轻松安装),所以搜集下信息,找到了bleson,不过bleson用的人很少,就试试水,顺便记录使用过程。bluepy只支持Linux,有点伤

安装bleson

官方文档:https://bleson.readthedocs.io/en/latest/installing.html

进入你conda配好的环境 我这是 activate py38 (我已经事先用Anaconda创建了py38的环境)

控制台输入命令 pip install bleson
第一遍安装卡着了。。。第二遍问题依旧

重启pycharm,重新安装,比较慢 不过成功安装。

运行官方例程

运行例程记得打开蓝牙

如果没有打开,会出现报错,如 RuntimeError: Start watcher failed : 000001D6A093A13C

basic_observer.py

扫描周围蓝牙设备,并打印相应蓝牙信息

#!/usr/bin/env python3

import sys
from time import sleep
from bleson import get_provider, Observer

# Get the wait time from the first script argument or default it to 10 seconds
WAIT_TIME = int(sys.argv[1]) if len(sys.argv) > 1 else 10


def on_advertisement(advertisement):
    print(advertisement)


adapter = get_provider().get_adapter()

observer = Observer(adapter)
observer.on_advertising_data = on_advertisement

observer.start()
sleep(WAIT_TIME)
observer.stop()

运行效果如下,扫到很多没有name的,不过庆幸的是扫到了我的小米手环,还算正常(ps:默认是扫描10s,如需修改可传参20s 例 python basic_observer.py 20

我们简单修改下代码,过滤下空name的打印

#!/usr/bin/env python3

import sys
from time import sleep
from bleson import get_provider, Observer

# Get the wait time from the first script argument or default it to 10 seconds
WAIT_TIME = int(sys.argv[1]) if len(sys.argv) > 1 else 10


def on_advertisement(advertisement):
    # <class 'bleson.core.types.Advertisement'>
    # print(type(advertisement))
    if len(advertisement.name) > 0:
        print(advertisement)


adapter = get_provider().get_adapter()

observer = Observer(adapter)
observer.on_advertising_data = on_advertisement

observer.start()
sleep(WAIT_TIME)
observer.stop()

又多扫描到了一个设备

不过我手机就在旁边却扫不到(打开“设置”,蓝牙打开,发现手机以前配过对,删除配对后,使用 系统的扫描)

再次回到程序,进行扫描,恩,还是扫不到,大无语事件。。。


打印蓝牙设备mac地址,追加 print(advertisement.address),参考文档:https://bleson.readthedocs.io/en/latest/api_datatypes.html#device

basic_advertiser.py

#!/usr/bin/env python3

import sys
from logging import DEBUG
from time import sleep

from bleson import get_provider, Advertiser, Advertisement

# Get the wait time from the first script argument or default it to 10 seconds
WAIT_TIME = int(sys.argv[1]) if len(sys.argv) > 1 else 10

print('WAIT_TIME =', WAIT_TIME)

print('get_provider().get_adapter()...')
adapter = get_provider().get_adapter()

advertiser = Advertiser(adapter)
advertisement = Advertisement()
advertisement.name = "bleson"

advertiser.advertisement = advertisement

print('advertiser.start()...')
advertiser.start()
sleep(WAIT_TIME)
print('advertiser.stop()...')
advertiser.stop()

就挺莫名其妙,而且程序无法正常结束。。。大无语事件

修改下源码,以日志形式打印

#!/usr/bin/env python3

import sys
from logging import DEBUG
from time import sleep

from bleson import get_provider, Advertiser, Advertisement

from bleson.logger import log

# 设置日志等级
log.setLevel(DEBUG)

# Get the wait time from the first script argument or default it to 10 seconds
WAIT_TIME = int(sys.argv[1]) if len(sys.argv) > 1 else 10

log.debug("WAIT_TIME={}".format(WAIT_TIME))

log.debug('get_provider().get_adapter()...')
adapter = get_provider().get_adapter()

advertiser = Advertiser(adapter)
advertisement = Advertisement()
advertisement.name = "bleson"

advertiser.advertisement = advertisement

log.debug('advertiser.start()...')
advertiser.start()
sleep(WAIT_TIME)
log.debug('advertiser.stop()...')
advertiser.stop()
log.debug('run over...')


看源码和日志应该是开始广播一段时间,然后停止,不过实际用下来 无事发生,换个程序算了。

Internal API

官方文档:https://bleson.readthedocs.io/en/latest/api_internal.html

其实可以发现,这个库实现的功能并不多呀,就广播、扫描,搞个beacon玩玩,没有蓝牙连接 读写的相关功能,这。。。我白给了

本文标签: WindowsPythonbleson