【Bleak】五、连接及发现服务
目录:
- 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))
该例子里可以看到:
- 调用该脚本可以输入参数,参数为蓝牙设备地址,如果未填写参数,则用默认的 ADDRESS
- 主函数中先扫描指定的蓝牙设备,如果找到了对它连接并发现其服务
- 将发现的所有服务显示出来
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. 写在最后
从运行结果里面可以看到,打印出来的结果里面有:
- 服务的UUID
- Handle 的值
- 服务名字
后续项目实战的时候,服务的操作都是通过Handle值来完成的,通常Handle需要记录下来。
看完觉得有收获点个赞吧 ❤️ 或者关注Bleak专栏查看更多Bleak相关使用⏩
【Bleak】五、连接及发现服务相关推荐
- Android学习笔记第五篇--网络连接与云服务(一)
Android学习笔记第五篇–网络连接与云服务 第一章.无线连接设备 除了能够在云端通讯,Android的无线API也允许在同一局域网内的设备通讯,**甚至没有连接网络,而是物理具体相近,也可以相 ...
- 【五】分布式微服务架构体系详解——服务发现和服务通信
前言 微服务架构的概念比容器技术早,但是却随着容器技术在13年的兴起,基于容器技术的微服务架构越来越被广泛应用.容器的轻量级部署方式很适合为每个微服务提供基础运行环境. 本文会基于Docker容器,先 ...
- 微服务实战(五):微服务的事件驱动数据管理
http://dockone.io/article/936 微服务实践(五):微服务的事件驱动数据管理 [编者的话]本文是使用微服务创建应用系列的第五篇文章.第一篇文章介绍了微服务架构模式,并且讨论了 ...
- BT源代码学习心得(五):统一网络服务接口--RawServer -- 转贴自 wolfenstein (NeverSayNever)
BT源代码学习心得(五):统一网络服务接口--RawServer author:wolfenstein 以后的部分都需要网络服务(种子文件的生成在本地就可以完成,但是通过这些种子文件下载实际的内容和提 ...
- CC2541之发现服务、特征值及读取特征值中存储值的详细过程
一.通过SimpleBLECentral工程分析CC2541作为主机时是如何发现从机的服务和特征值的,以及读取特征值的具体过程 二.服务和特征值 1.一个工程可以有多个服务,比如按键服务.心率计服务. ...
- 【BLE】CC2541之发现服务与特征值
本篇博文最后修改时间:2017年01月06日,11:06. 一.简介 本文以SimpleBLECentral工程为例,解析CC2541作为主机时是如何发现从机的服务和特征值的. 二.实验平台 协议栈版 ...
- 【技术分享】linux各种一句话反弹shell总结——攻击者指定服务端,受害者主机(无公网IP)主动连接攻击者的服务端程序(CC server),开启一个shell交互,就叫反弹shell。...
反弹shell背景: 想要搞清楚这个问题,首先要搞清楚什么是反弹,为什么要反弹. 假设我们攻击了一台机器,打开了该机器的一个端口,攻击者在自己的机器去连接目标机器(目标ip:目标机器端口),这是比较常 ...
- 使用SuperSocket打造逾10万长连接的Socket服务
使用SuperSocket打造逾10万长连接的Socket服务 原文:使用SuperSocket打造逾10万长连接的Socket服务 SuperSocket 是一个轻量级, 跨平台而且可扩展的 .Ne ...
- Linux远程连接与sshd服务安全设定
1.远程连接: 首先设置ip: 设置好之后,先ping一下IP 看能不能通 ssh root@172.25.13.103 ##表示的是:连接ip为172.25.13.103的root用户 2.系统控制 ...
最新文章
- Android开发WebView之加载HTML源码修改HTML字体大小以及缩放HTML的方法
- warning: pointer of type 'void *' used in arithmetic
- python导入pillow模块_Python:argparse模块和pillow-image
- 6个技术问题及解决方案
- 苹果支付招聘业务开发经理 需有加密货币支付工作经验
- 载波与载波频率,中心频率的解释
- 《密码编码学与网络安全》William Stalling著---学习笔记(一)【知识点速过】【传统密码+经典对称加密算法+经典公钥密码算法+密码学Hash函数】
- 基于Linux的录像机:Neuros OSD
- wath修改data中的值后更新
- 经管之家账号被封,显示IP地址不在允许范围内
- html文本框php,HTML文本框5种应用方式实现方法
- 【日常折腾】重新安装Windows7,做好ghost备份,迁移主目录,日常软件office,chrome,搜狗输入法,电脑管家,一键ghost进行备份。
- APP定制开发,移动市场重要的生存利器
- 【Vue】Vue打包文件后需要添加版本号Version,来防止更新后的页面有缓存
- 专升本,学历毁了我的一生!
- 第一部分 思科九年 一(7)
- linux命令安装python Django
- android微信下拉出现小程序,下拉头部-模仿微信聊天头部拉下小程序效果
- VBA Project密码解除
- 集成学习——Bagging、Boosting、Stacking
热门文章
- 创建企业电子邮箱的格式是什么样的?
- python安装下载时0x80070643错误
- 智合同携手百度智能云等行业领军企业,打造更多行业生态智能合同解决方案
- Jenkins-最流行的自动化部署工具
- H5棋牌及APP下载类域名在微信内转发防封防防拦截方案
- 窗口的位置:GetWindowRect与MoveWindow等
- linux——读取文件(read)
- 智慧灯杆案例:发力新基建,智慧灯杆杭州模式引期待,来看看都有哪些试点项目?
- mysql 初始化my.cnf_MySQL配置文件my.cnf 例子最详细翻译
- VLC播放器所需的SPS,PPS获取方法