Bluethooth

阅读时长10分钟

蓝牙技术是一种近距离无线连接技术。能在包括移动电话、PDA、无线耳机、笔记本电脑、相关外设等众多设备之间进行无线信息交换。

历史:蓝牙技术是世界著名的 5 家大公司一爱立信(Ericsson)、诺基亚(Nokia)、东芝(Toshiba)、国际商用机器公司(IBM)和英特尔(Intel),于 1998 年 5 月联合宣布的一种无线通信新技术。蓝牙设备是蓝牙技术应用的主要载体,,常见蓝牙设备比如电脑、手机,平板等。

原理: 蓝牙是通过发送频率为 2.4GHZ 的 ISM 波段的电磁波来在主设备与从通信之间通信。

系统组成:蓝牙技术系统中的底层硬件模块由基带、跳频和链路管理。其中,基带是完成蓝牙数据和跳频的传输。无线调频层是不需要授权的通过 2.4GHz ISM 频段的微波,数据流传输和过滤就是在无线调频层实现的,主要定义了蓝牙收发器在此频带正常工作所需要满足的条件。链路管理实现了链路建立、连接和拆除的安全控制。

通信方式:支持蓝牙技术的主设备与从设备,他们之间是通过协议来互相交换数据。协议类似于两个美国人交流使用英语,两个日本人交流使用日语, 两条狗交流使用狗叫。

蓝牙模式:在蓝牙 1.0,蓝牙 2.0,蓝牙 3.0 技术的不停迭代过程中,蓝牙 4.0 将蓝牙分为了两种模式:单模蓝牙(又叫做低功耗蓝牙)双模蓝牙 .直到发展到今天的蓝牙 5.0(默认支持 2 种模式)

双模蓝牙: 大数据,速率快。常见的蓝牙音箱,是典型的双模蓝牙,它需要传输大量的音频数据。
单模蓝牙: 小数据,低功耗。常见的小米手环,蓝牙温度计则属于单模蓝牙,使用纽扣电池就可以运行数月至数年。行业里一般不讲单模蓝牙,而是统一称为低功耗蓝牙。

通信过程

蓝牙设备之间要互传数据,首先设备之间需要相互认识,也就是建立连接。而设备的连接是按照 GATT协议 的要求建立,只要符合 GATT协议 就可以建立连接。

主设备向周围发送电磁波开始寻找,允许被查找的从设备,如果处于主设备的信号范围内,那么就会被发现。接下来主设备发起连接 connect 请求,从设备允许此连接请求,通信的通道建立完毕。

通信通道建立完毕后,主设备与从设备就可以开始互传数据。

此时GATT协议主设备 取名为 客户端, 从设备 取名为 服务端(这里有点绕). 此时只有主设备可以发起通信事件:读取从设备提供了哪些的服务,希望向从设备发送数据,希望接收从设备发出的数据。

flutter 代码演示:

void scan(){// 扫描设备flutterBlue.startScan(timeout: Duration(seconds: 4));// 监听扫描结果var subscription = flutterBlue.scanResults.listen((results) {for (ScanResult scanResult in results) {print('发现设备:${scanResult.device.name} ! 设备信号强度rssi: ${scanResult.rssi}');if (scanResult.device.name == "我的小米手环") {// 准备连接设备readyToConnect(scanResult.device);// 停止扫描flutterBlue.stopScan();}}});
}void readyToConnect(BluetoothDevice device) async {// 开始连接设备await device.connect();// 连接成功后,发现服务(有多种服务)List<BluetoothService> services = await device.discoverServices();for (var service in services) {// 使用  0000fff0-0000-1000-8000-00805f9b34fb 这个服务if(service.uuid=="0000fff0-0000-1000-8000-00805f9b34fb"){// 获取服务上的Characteristic.// 一个服务上有多种 characteristic 特征值var characteristics = service.characteristics;for(BluetoothCharacteristic c in characteristics) {// 读List<int> value = await c.read();print(value);// 写await c.write([0x12, 0x34])}}}
}

在蓝牙开发过程中, Service uuid 以及 Characteristic uuid是我们需要重点关注的对象.与硬件 读写数据都是通过这个。

在蓝牙官方文档中,已经定义了一系列 Service,在 服务发现 Service Discovery 文档中可以看到:

  • 0x110A 标识此服务为 Advanced Audio Distribution Profile (A2DP) A2DP音频传输协议
  • x0311 标识此服务为 Audio/Video Remote Control Profile (AVRCP) 音视频远端管理协议

  • 在这里插入图片描述

GATT 协议

GATT 全称为 Generic Attribute Profile 属性配置文件。这个配置列表文件上记录了 ServiceCharacteristic 数据。

为什么要记录这两种数据? 因为在设备的发现与连接过程中使用的是 GAP(Generic Access Profile) 协议, 这个协议规定了两个设备之间发现与连接,必须带有配置表 Profile ,而配置表上记录着 Service 和 Characteristic 数据信息。

  • 配置 Profile: 一个服务清单。

    例如,一家酒店提供 吃饭/住宿/娱乐 等等一系列服务。

  • 服务 service: 协议中要求,每一个服务都必须提供一个 uuid 用来区分。标准UUID为128位,蓝牙协议栈中一般采用 16 位,也就是两个字节的 UUID 格式。

    例如,0x1A00 描述酒店的酒店名称

    例如,0x1A01 描述酒店的星级

    例如,0x1A02 描述酒店的成立日期

  • 特征值 Characteristic:协议中要求,每一个服务下的多种特征值也必须提供一个 uuid 用来区分.通常特征值用来指定具体的读或者写功能

    例如,0x1B00 描述吃饭服务中的川菜

    例如,0x1B01 描述吃饭服务中的粤菜

    例如,0x1B02 描述吃饭服务中的闽南菜

需要注意的是,每一个蓝牙设备中都有很多服务,而具体服务含义以及要使用哪种服务 uuid,都需要由硬件提供商告知使用者

拓展阅读

  • 蓝牙低功耗 vs 蓝牙经典
  • Ble
  • bluetooth GATT 7

------ 如果文章对你有用,感谢右上角 >>>点赞 | 收藏 <<<

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/1381350.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

NewBlue Titler Pro 7不能预览 预览黑屏

问题描述 最近在剪辑视频 使用“NewBlue Titler Pro 7 Ultimate 7.4.201109”和谐版增加字幕时&#xff0c;出现字幕刚开始可以预览&#xff0c;动几下鼠标预览窗口卡死&#xff0c;随后黑屏。 解决方式 折腾之后发现用的版本不对&#xff0c;更换为下面的版本后可以正常使用…

华为od统一考试B卷【九宫格按键输入法】Python 实现

所有题目均有五种语言实现。C实现目录、C++ 实现目录、Python实现目录、Java实现目录、JavaScript实现目录 题目 九宫格按键输入,判断输出,有英文和数字两个模式,默认是数字模式,数字模式直接输出数字,英文模式连续按同一个按键会依次出现这个按键上的字母,如果输入”/…

华为od统一考试B卷【九宫格按键输入法】Java 实现

所有题目均有五种语言实现。C实现目录、C++ 实现目录、Python实现目录、Java实现目录、JavaScript实现目录 题目 九宫格按键输入,判断输出,有英文和数字两个模式,默认是数字模式,数字模式直接输出数字,英文模式连续按同一个按键会依次出现这个按键上的字母,如果输入”/…

2022华为机试真题 C语言 实现【九宫格按键输入法】

九宫格按键输入,判断输出,有英文和数字两个模式,默认是数字模式,数字模式直接输出数字,英文模式连续按同一个按键会依次出现这个按键上的字母,如果输入”/”或者其他字符,则循环中断。 要求输入一串按键,输出屏幕显示。 输入描述: 输入范围为数字 0~9 和字符’#’、…

谷歌键盘切换26键与九宫格中文输入法

今天不小心把手输入法改成了九宫格&#xff0c;很不习惯&#xff0c;在设置里面找了很久也没找到&#xff0c;百度也没有找到答案。 最终偶然发现解决方案。 长按【中】出现如下界面&#xff0c;即可切换26键与九宫格。

Python之九宫格输入

文章目录 前言一、问题描述二、问题解决 前言 九宫格输入是一款手机平台的必备利器。假设有九宫格输入法键盘布局如下&#xff1a;‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬…

九宫格按键输入c++

假设有九宫格输入法键盘布局如下&#xff1a; [ 1,.?! ] [ 2ABC ] [ 3DEF ] [ 4GHI ] [ 5JKL ] [ 6MNO ] [ 7PQRS ] [ 8TUV ] [ 9WXYZ ] [ 0空 ] 注意&#xff1a;中括号[ ]仅为了表示键盘的分隔&#xff0c;不是输入字符。 每个中括号中&#xff0c;位于首位的数字字符即是…

centos7部署openldap开启memberof并接入jumpserver

文章目录 前言1.yum安装openldap2.配置密码3.导入配置4.定义域5.配置memberof6.配置base dn7.安装phpldapadmin管理8.调整httpd的配置9.调整php的配置10.登陆php管理页面11.同步旧ldapsever用户数据(可省略)12.客户端配置13.对接jumpserver 前言 介绍如何在centos7上部署openl…

Unity Shader特效:人物模型动态流动光特效

本文写于2017-6-6&#xff0c;转载请注明 以下为正文 ………………………………………………………………………………………………………………………………………………………… 先上效果图&#xff1a; Shader界面图&#xff1a; 因为特效师的攻击特效做得过为酷炫&#…

python实现两个图片的叠加融合

python通过PIL将两个图片叠加融合 我想到将一个图片去除背景将其放到另一张图片上以此实现融合。 1**. 打开想要融合的图片** file Image.open(6.png) verse 9.png我选取的两个图片 2**. 将附在上面的图片的背景进行透明化** verse transPNG(verse)# 图片背景透明化 …

壁纸网站研究:强大到没朋友的壁纸网站整理(动漫/二次元/宅男/风景/真人)

1、wallhaven 域名&#xff1a;https://wallhaven.cc 介绍&#xff1a;一个强大的壁纸网站&#xff0c;包含人物、动漫、风景&#xff0c;同时有一些老司机内容&#xff0c;需要选择NSFW&#xff0c;但需要登录才能观看&#xff0c;隐藏功能。但是海外网站&#xff0c;国内网…

java 人物头像识别

一、功能描述&#xff1a; 人物头像识别&#xff0c;识别图片中的是否含有人物头像。 二、准备工作&#xff1a; 创建需要识别的图片目录 &#xff0c;如F:/img&#xff0c;链接中files\img中为示例图片。导入所需jar包&#xff0c;见files\jar。新建依赖文件haarcascade_fro…

日常问题——使用Java转将long类型为date类型,日期是1970年

&#x1f61c;作 者&#xff1a;是江迪呀✒️本文关键词&#xff1a;日常BUG、BUG、问题分析☀️每日 一言 &#xff1a;存在错误说明你在进步&#xff01; 一、问题描述 long类型的日期为&#xff1a;1646718195 装换为date类型&#xff1a; Date date new Dat…

google浏览器截取长图

方法一&#xff1a; 首先F12选中手机模式 然后点击右上角 选择capture full size screenshot 或者ctrl shift p 方法二&#xff1a; 按F12打开调试页面&#xff0c;然后按下ctrlshiftp&#xff0c;输入命令Capture full size screenshot&#xff0c;敲回车&#xff0c;浏览…

edge便捷截取长图

edge便捷截取长图 右上角 三点 ——》网页捕获 ——》捕获整页 简简单单 方便食用~

Mac上使用Chrome浏览器截取长图

首先按下 ⌘Command ⌥Option I 快捷键&#xff0c;召唤出调试界面。 按下 ⌘Command ⇧Shift P 输入 Capture full size screenshot 敲下回车&#xff0c;Chrome 就会自动截取整个网页内容并保存至本地。

Linux上安装温度监控软件

文章目录 Linux上安装温度监控软件IDRAC设置 Linux上安装温度监控软件 服务器的温度是影响服务器性能重要条件&#xff0c;怎么监控机器的温度呢&#xff0c;这里知道的有两种方式 通过管理界面&#xff0c;查看机器的温度通过机器上安装监监控软件来监控温度 在物理机上怎么…

杂项 Chrome浏览器截取长图

WechatIMG18.jpeg 截取网页长图 image.png ⌘Command⌥OptionI快捷键&#xff0c;召唤出调试界面&#xff1b; 再按下⌘Command⇧ShiftP&#xff1b; 输入命令Capture full size screenshot&#xff0c;敲下回车&#xff1b; Chrome 就会自动截取整个网页内容并保存至本地。 自…

html怎么截取部分图片,【原创】详解css用坐标来截取部分图片

标题好像没有表述的十分清楚,直白的说就是在很大的图片上只截取我们需要的位置上的需要大小的图片。现在大家都知道网站技术发展的很快,很多技术较大的网站已经率先的使用了。大家可以看看腾讯会员的网页http://vip.qq.com/,当你想保存其中的一个栏目图片的时候你会发现点击…