目录:

  • 1. 前言
  • 2. 手机模拟BLE设备
  • 3. 源码解析
  • 4. 运行结果
  • 5. 写在最后

1. 前言

通过之前章节,我们学会了通过Bleak来扫描周边的低功耗蓝牙设备,现在我们来看看如何通过它来连接以及发现服务。

本文通过官方例子 connect_by_bledevice.py 来给大家介绍。

2. 手机模拟BLE设备

首先我们在手机上模拟一个名为"dabai"的心率带设备,然后运行例子看看能不能扫描到,方法请看nRF Connect。

配置 GATT 服务为心率服务:

3. 源码解析

"""
Connect by BLEDevice
"""
import asyncio
import platform
import sysfrom bleak import BleakClient, BleakScanner
from bleak.exc import BleakErrorADDRESS = ("E6:F8:E8:8D:D7:68"if platform.system() != "Darwin"else "B9EA5233-37EF-4DD6-87A8-2A875E821C46"
)async def main(ble_address: str):device = await BleakScanner.find_device_by_address(ble_address, timeout=20.0)if not device:raise BleakError(f"A device with address {ble_address} could not be found.")async with BleakClient(device) as client:svcs = await client.get_services()print("Services:")for service in svcs:print(service)if __name__ == "__main__":asyncio.run(main(sys.argv[1] if len(sys.argv) == 2 else ADDRESS))

该例子里可以看到:

  1. 调用该脚本可以输入参数,参数为蓝牙设备地址,如果未填写参数,则用默认的 ADDRESS
  2. 主函数中先扫描指定的蓝牙设备,如果找到了对它连接并发现其服务
  3. 将发现的所有服务显示出来

4. 运行结果

因为通过 nRF Connect模拟的服务端设备的地址的随机的(地址会变),所以我们最好是通过名字去扫描好一些。
修改扫描部分的代码:

指定事先模拟的心率设备名字 “dabai”。

DEVICE_NAME = "dabai"

然后将

device = await BleakScanner.find_device_by_address(ble_address, timeout=20.0)

修改为

device = await BleakScanner.find_device_by_filter(lambda d, ad: d.name and d.name.lower() == DEVICE_NAME.lower()
)

运行结果:

5. 写在最后

从运行结果里面可以看到,打印出来的结果里面有:

  1. 服务的UUID
  2. Handle 的值
  3. 服务名字

后续项目实战的时候,服务的操作都是通过Handle值来完成的,通常Handle需要记录下来。

看完觉得有收获点个赞吧 ❤️ 或者关注Bleak专栏查看更多Bleak相关使用⏩

【Bleak】五、连接及发现服务相关推荐

  1. Android学习笔记第五篇--网络连接与云服务(一)

    Android学习笔记第五篇–网络连接与云服务 第一章.无线连接设备 ​ 除了能够在云端通讯,Android的无线API也允许在同一局域网内的设备通讯,**甚至没有连接网络,而是物理具体相近,也可以相 ...

  2. 【五】分布式微服务架构体系详解——服务发现和服务通信

    前言 微服务架构的概念比容器技术早,但是却随着容器技术在13年的兴起,基于容器技术的微服务架构越来越被广泛应用.容器的轻量级部署方式很适合为每个微服务提供基础运行环境. 本文会基于Docker容器,先 ...

  3. 微服务实战(五):微服务的事件驱动数据管理

    http://dockone.io/article/936 微服务实践(五):微服务的事件驱动数据管理 [编者的话]本文是使用微服务创建应用系列的第五篇文章.第一篇文章介绍了微服务架构模式,并且讨论了 ...

  4. BT源代码学习心得(五):统一网络服务接口--RawServer -- 转贴自 wolfenstein (NeverSayNever)

    BT源代码学习心得(五):统一网络服务接口--RawServer author:wolfenstein 以后的部分都需要网络服务(种子文件的生成在本地就可以完成,但是通过这些种子文件下载实际的内容和提 ...

  5. CC2541之发现服务、特征值及读取特征值中存储值的详细过程

    一.通过SimpleBLECentral工程分析CC2541作为主机时是如何发现从机的服务和特征值的,以及读取特征值的具体过程 二.服务和特征值 1.一个工程可以有多个服务,比如按键服务.心率计服务. ...

  6. 【BLE】CC2541之发现服务与特征值

    本篇博文最后修改时间:2017年01月06日,11:06. 一.简介 本文以SimpleBLECentral工程为例,解析CC2541作为主机时是如何发现从机的服务和特征值的. 二.实验平台 协议栈版 ...

  7. 【技术分享】linux各种一句话反弹shell总结——攻击者指定服务端,受害者主机(无公网IP)主动连接攻击者的服务端程序(CC server),开启一个shell交互,就叫反弹shell。...

    反弹shell背景: 想要搞清楚这个问题,首先要搞清楚什么是反弹,为什么要反弹. 假设我们攻击了一台机器,打开了该机器的一个端口,攻击者在自己的机器去连接目标机器(目标ip:目标机器端口),这是比较常 ...

  8. 使用SuperSocket打造逾10万长连接的Socket服务

    使用SuperSocket打造逾10万长连接的Socket服务 原文:使用SuperSocket打造逾10万长连接的Socket服务 SuperSocket 是一个轻量级, 跨平台而且可扩展的 .Ne ...

  9. Linux远程连接与sshd服务安全设定

    1.远程连接: 首先设置ip: 设置好之后,先ping一下IP 看能不能通 ssh root@172.25.13.103 ##表示的是:连接ip为172.25.13.103的root用户 2.系统控制 ...

最新文章

  1. Android开发WebView之加载HTML源码修改HTML字体大小以及缩放HTML的方法
  2. warning: pointer of type 'void *' used in arithmetic
  3. python导入pillow模块_Python:argparse模块和pillow-image
  4. 6个技术问题及解决方案
  5. 苹果支付招聘业务开发经理 需有加密货币支付工作经验
  6. 载波与载波频率,中心频率的解释
  7. 《密码编码学与网络安全》William Stalling著---学习笔记(一)【知识点速过】【传统密码+经典对称加密算法+经典公钥密码算法+密码学Hash函数】
  8. 基于Linux的录像机:Neuros OSD
  9. wath修改data中的值后更新
  10. 经管之家账号被封,显示IP地址不在允许范围内
  11. html文本框php,HTML文本框5种应用方式实现方法
  12. 【日常折腾】重新安装Windows7,做好ghost备份,迁移主目录,日常软件office,chrome,搜狗输入法,电脑管家,一键ghost进行备份。
  13. APP定制开发,移动市场重要的生存利器
  14. 【Vue】Vue打包文件后需要添加版本号Version,来防止更新后的页面有缓存
  15. 专升本,学历毁了我的一生!
  16. 第一部分 思科九年 一(7)
  17. linux命令安装python Django
  18. android微信下拉出现小程序,下拉头部-模仿微信聊天头部拉下小程序效果
  19. VBA Project密码解除
  20. 集成学习——Bagging、Boosting、Stacking

热门文章

  1. 创建企业电子邮箱的格式是什么样的?
  2. python安装下载时0x80070643错误
  3. 智合同携手百度智能云等行业领军企业,打造更多行业生态智能合同解决方案
  4. Jenkins-最流行的自动化部署工具
  5. H5棋牌及APP下载类域名在微信内转发防封防防拦截方案
  6. 窗口的位置:GetWindowRect与MoveWindow等
  7. linux——读取文件(read)
  8. 智慧灯杆案例:发力新基建,智慧灯杆杭州模式引期待,来看看都有哪些试点项目?
  9. mysql 初始化my.cnf_MySQL配置文件my.cnf 例子最详细翻译
  10. VLC播放器所需的SPS,PPS获取方法