从客户端登陆服务器的配置文件,BLE模式和配置文件

BLE模式和配置文件(原文)

本文档探讨了BLE如何工作,特别是如何将两种BLE模式(连接和广告)用于不同的目的。

外围设备和中央设备vs服务器和客户端

当我们通过BLE连接设备时,我们将它们视为外设(从设备)设备或中央(主设备)设备。 蓝牙标准建立了该区分方式以匹配设备上可用的资源:

主设备/中央

通常将具有更多的计算资源和可用能量 - 例如计算机或平板电脑。

从设备/外设

一个mbed设备 - 将在计算资源和能源两个方面受限制。

目前,mbed的BLE_API支持创建外设。 我们计划尽快将其扩展到中央设备。

BLE使用两个附加术语来描述连接实体 - 服务器和客户端:

服务器

该设备具有希望共享的信息,且对于BLE而言通常是外设(如mbed板子)。

客户端

需要信息和服务的设备,且对于BLE而言通常是中央设备 - 例如电话。

在讨论信息交流时,我们使用术语服务器和客户端 。 我们使用中央和外设来表示BLE连接的起点和目标。 中央作为客户端连接,外围设备作为服务器并不罕见。

clientserver.png

服务器和客户端

mbed板是服务器或外设;手机是客户端和中央设备“)

启动连接

中央启动,控制和结束连接 - 外设不能强制中央执行(扫描BLE设备,查看其信息,连接等)。 中央还决定询问外围设备的频度。 然而,外设可以向中央推荐一些东西。 有关这些决定的更多信息,请参阅连接参数部分 。

广告和连接模式

BLE使用的两种模式是:

广告模式

外设会发出该区域任何设备可以接收到的信息。 这是中央设备如何知道周围有外围设备的方式。

连接模式

外设和中央设备建立一对一的对话。 这就是他们如何交换复杂的信息的方式。

中央设备必须知道外围设备存在才能与之连接。 因此,外设将使用BLE 广告模式发布其存在。 在这种模式下,设备使用通用访问配置文件 (GAP)以稳定的速率发送一些信息 —— 一个广告。 这个广告是其他设备,像你的手机,接收到的。 它告诉他们附近有一个BLE设备存在,以及该设备是否愿意与他们交谈。

ConnModes.png

广告模式是一对多的,而连接模式是一对一的。

广告模式数据包大小非常有限。 GAP广播的一般数据包格式如下图所示:

GeneralStruct.png

BLE协议栈占用了47B数据包的一部分,直到我们的数据只有26B

每个BLE包可以包含最多47个字节(这不是很多),我们不能使用它们的全部:

为了自己的目的,BLE协议栈需要8个字节(1 + 4 + 3)。

因此,广告分组数据单元(PDU)最多具有39个字节。 但是BLE栈再次需要一些开销,占用8个字节(2 + 6)。

PDU的广告数据字段剩下31个字节,分为广告数据(AD)结构。 然后:

GAP广播必须包含告诉设备有关我们发送的广告类型的标志。 标志结构总共使用三个部分(一个用于数据长度,一个用于数据类型,一个用于数据本身)。 我们需要前两个字节(数据长度和类型指示)的原因是帮助解析器来使用我们的标志信息正常工作。 我们还剩下28个字节。

现在我们终于用自己的数据结构发送自己的数据了 - 但是它也需要一个长度和类型的指示(总共两个字节),所以我们只剩下26个字节。

所有这些意味着我们只有26B用于通过GAP发送的数据。

如果您想查看AD的示例,请参阅自定义GAP广告部分中的扩展说明。

对于许多应用,广告可能是需要的一切。 这可能是:

外围设备只想周期性地广播可以适应广告的少量信息。

无论身份验证如何,这些数据都可用于范围内的任何中央设备。

但是,有时候,您需要提供比单向数据传输更多的信息或更复杂的交互。 为此,您需要在BLE设备和用户的手机,平板电脑或计算机之间设置“对话”。该会话基于连接模式 ,其描述了仅两个设备之间的关系:BLE外围设备和中央设备。

目前,广告和连接模式还不能共存。 这是因为BLE外围设备一次只能连接到一个中央设备(如移动电话)。 连接建立的时刻,BLE外设将停止广告。 在这一点上,没有其他中央设备能够连接到它,因为如果它不广告,他们不能发现该设备在那里。 只有在第一个连接终止并且BLE外围设备再次开始广告之后,才能建立新的连接。

注意:最新的蓝牙标准允许广告并行连接,这将在2015年底之前成为mbed的BLE_API的一部分。

服务和配置文件(GATT)

为了使上述通信的功耗较低,BLE规范在连接模式下交换数据的方式施加了特定的结构。 它依赖于BLE外设维护客户端可以访问的状态变量数据库(如电池电量,温度和时间)的能力。 我们可以根据功能将状态变量分组到服务中。 例如,心率服务是状态变量的集合,包括心率测量和身体传感器位置。 这些状态变量的技术术语是“特征(Characteristics)”。 为了互操作性,每个特征(Characteristics)也包含了值类型的描述。 这样客户端就可以解释这个值,即使它们没有被特别编程来识别它。

Service.png

单一服务可以包含几个特征

服务,特征及其配套属性是连接方式的基本实体。 服务使用通用属性配置文件(Generic Attribute Profile,GATT)根据特征来组织信息。 我们将在下面更详细地探索特征。

我们将服务捆绑到一个配置文件中 。 例如,心率配置文件(Heart Rate Profile)包括两个服务 - 心率和设备信息(Heart Rate and Device Information),血压配置文件(Blood Pressure Profile)包括血压和设备信息(Blood Pressure and Device Information)服务。

heart_rate_profile.png

具有两个服务的示例配置文件

BLE已经有一段时间了,所以它有一些标准的服务,你可以进入。 回到我们的心率监测器的例子,心率服务是完善的,易于使用。 它可以从BLE心率监测器读取信息并将其发送到应用程序。 你会在稍后的编码示例中看到。

在开始研究项目之前,值得看看是否已经有可以完成所需功能的服务了; 它会节省大量的编码和测试时间。 您可以在这里找到可用的配置文件和服务列表。

特征和相互作用

服务将数据分解为特征 。 每个特征映射到单个数据点:它告诉你一件事,只有一件事。 例如, 设备信息服务具有以下特征:

DeviceInformationService.png

制造商名称

型号

序列号

硬件版本

固件版本

软件版本

系统ID

IEEE 11073-20601监管认证资料清单(regulatory certification data list)

这些特征中的每一个应该只包含其标签所包含的信息。 他们一起揭示设备的制造商信息,并组成一个完整的设备信息服务。 此服务本身捆绑在不同的配置文件中。

在mbed上创建一个特征非常简单,因为BLE_API为涉及服务定义的实体提供C++抽象。 例如,这里我们创建一个简单的特征,通知客户一个按钮的状态(按下/释放):

//button initial state

bool buttonPressed = false;

//read-only characteristic of type boolean,

//accepting the buttonState’s UUID and initial value

ReadOnlyGattCharacteristic buttonState(BUTTON_STATE_CHARACTERISTIC_UUID,

&buttonPressed);

有关mbed的特征创建的完整展示,请参阅我们的输入服务模板 。

特征完全由其声明,值和描述符定义:

声明包含有关特征的数据,例如其通用唯一标识符(UUID)。

值是特征的“有趣”部分:它是包含您正在查看和响应的数据的值。

** 描述符**不是强制性的; 您可以使用它来提供有关特征的更多信息或控制其行为。 例如,在使用通知时使用描述符。

特征可以是静态的(如设备的制造商名称)或动态的。 如果一个特征是动态的,当设备有新的信息时,您的设备可以为它生成一个新的值。 例如,在心率服务中, 当前心率是定期获得新值的特征。

以下是创建读/写特征(可以接收新值并显示其当前值的特征)的示例:

bool initialValueForLEDCharacteristic = false;

ReadWriteGattCharacteristic ledState(LED_STATE_CHARACTERISTIC_UUID,

&initialValueForLEDCharacteristic);

有关在mbed上创建读/写特征的信息,请参阅我们的执行器服务模板 。

一些特征是双向实体。 这意味着服务器(BLE外设)可以自己更新,也可以从客户端(手机)接收新的值。 这种双向流量使BLE具有交互性:用户向一个或多个特征发送新值,并且设备响应这些新值。 例如,当UriBeacon设备打开时,它进入临时配置模式(configuration mode) ,让我们有机会更新其特征的值(包含稍后公布的数据)。

对于每个特征,服务定义说明客户端是否有权写入该特征。 这是在外设上设置GATT服务器时完成的。 在我们的示例中, 配置模式(configuration mode)指出广告信息是可读/写的, 广告模式表示它是只读的。 因此,根据设备的模式,相同的特征可以具有两种不同的权限。

UUID

每个服务和特征都需要一个普遍唯一的标识符(UUID),它们在声明中列出(如上所述)。 对于BLE官方实体,UUID为16位,BLE站点上提供了完整的列表,以获取服务和特性 。 对于您自己创建的服务和特征,您将需要128位UUID; 您可以在UTI网站上生成。

有关UUID分配的更多信息,请参见我们的服务创建示例 。

配置文件,服务和特征的总结

因此,配置文件的完整拆分是:一个或多个服务,每个服务包含零个或多个特征,每个特征具有零个或多个描述符:

BLE_Profile_Breakdown.png

单个配置文件可以包含多个服务,并且每个服务可以包含几个特征

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

和preload_通过LD_PRELOAD绕过disable_functions

0x00 前言前段时间碰到拿到shell以后限制了basedir并且无法执行命令的情况,解决办法是上传恶意的.so文件,并通过设置LD_PRELOAD,然后调用新进程来加载恶意.so文件,达到绕过的效果。当时做这道题目的时候是跟着别人的题解直接套的(…

ajax循环输出,Ajax轮询 select循环输出

弹出层.del{color:red}.addname{color:#337ab7}款项名目操作{$vo.name}删除添加...$(".addname").on("click",function(){layer.prompt({title: 添加款项名目, formType: 0}, function(text, index){layer.close(index);$.post("{:U(Contracts/setmon…

群晖服务器性能测试,对群晖DS716+进行性能测试_群晖 DS716+_企业存储技术与评测-中关村在线...

Iometer是一个工作在单系统和集群系统上用来衡量和描述I/O子系统的工具。可以被配置为模拟任何程序或者基准测试程序的磁盘和网络I/O的负载,或者用来产生整个综合的I/O负载。它也可以用来产生并测量单系统或者多系统(网络)的负载。在性能测试环节,我们采…

传播路由_什么路由器穿墙效果好?购买防骗知识

买无线路由器,首要辨识什么路由器穿墙效果好。面对市面上五花八门的路由器,很多小白在看到纷繁的参数就凌乱了,上了无良商家的当。小编觉得授人以鱼不如授人以渔,所以给大家写了一篇辨别什么路由器穿墙效果好的防入坑购买指南。我…

小程序消息服务器webapi,小程序订阅消息

# 小程序订阅消息# 功能介绍消息能力是小程序能力中的重要组成,我们为开发者提供了订阅消息能力,以便实现服务的闭环和更优的体验。 订阅消息推送位置:服务通知订阅消息下发条件:用户自主订阅订阅消息卡片跳转能力:点击…

php生成pdf中文断码_Rmarkdown导出中文PDF解决方案

Rmarkdown非常适合R语言使用者导出格式漂亮的文档,但是输出中文PDF的过程中会遇到各种麻烦的问题,本文整理了我的经验供大家参考。总的来说,通过Rmarkdown输出中文版pdf报告,要解决以下两个核心问题:导出PDF需要配置Te…

分数的大小比较优秀教案_人教版小学数学五年级下册异分母分数加、减法公开课优质课课件教案视频...

教学案例-《异分母分数加减法》教学目标:1.借助直观图形,在操作、观察、比较、的活动中理解异分母分数加减法的算理,掌握计算方法,并能正确进行计算。2.渗透转化、迁移的数学思想,积累研究分数问题的数学活动经验。3.能…

docker给容器分配固定ip

1.为 Docker 容器设置一个固定的 IP 地址 要为 Docker 容器设置一个固定的 IP 地址,有几种常见的方法: 使用自定义网络和静态 IP 地址: 你可以创建一个自定义的 Docker 网络,并在这个网络上为容器分配静态 IP 地址。首先&#x…

分号可以用来分段么_更高效的GMX分段模拟方法:修改tpr文件

■2020-11-01 22:42:18在以前的一篇文章中, 我简单说过基于GROMACS的分段模拟方法[1]. 这种方法非常通用, 几乎能完成任意的功能, 且无须修改源代码, 但是运行效率比较差, 因为每次运行mdrun都要重新生成tpr文件. 对大分子来说, 使用grompp生成tpr还是很耗时的, 可能会成为运行…

java list拷贝_深入了解浅拷贝与深拷贝

在学习深拷贝和浅拷贝之前&#xff0c;咱们先来一个例子&#xff1a;import java.util.ArrayList;public class MyBaby implements Cloneable {/*** 私有变量*/private ArrayList<String> list new ArrayList<>();Overrideprotected Object clone() throws CloneN…

吗 极域软件可以装win10_关于win10企业版在极域电子教室软件 v4.0 2015 豪华版的全屏控制下如何取得自由...

注.可能因为系统和软件的缘故无法实现背景由于在听课过程过于自闭&#xff0c;于是想自己去网上搜点东西看下于是 经过了一番乱搞 逐渐摸索出了现方法。方案1:大力出奇迹由于电脑在刚刚进入的状态的时候有段时间是断网的并且该鬼畜的学生端可以通过任务资源管理器直接退所以可以…

python怎么启动mne_mne-python学习之一 入门介绍

mne-python脑电图和肌电图是一个开源软件分析、处理和显示。遵循bsd许可协议,由哈佛大学和共同开发的社区。主要功能包括:预处理和脑电图\/梅格信号的去噪,源估计、时频分析、统计测试,功能连接,机器学习,可视化的传感器、来源等外资支持最常见的原始数据格式。默认的(和附带的…

dcdc升压计算器excel_DC/DC升压转换器MAX8815A

DC&#xff0f;DC升压转换器MAX8815A佚名【摘要】MAX8815A具有97&#xff05;的最高效率、3OuA低静态电流以及低噪声强制PWM工作模式。该boost转换器专为2节NiMH&#xff0f;NiCdAA电池或单节Li&#xff0b;电池输入设计&#xff0c;可从1&#xff0e;2&#xff5e;5&#xff0…

python类怎么实例化rnn层_Python backend.rnn方法代码示例

本文整理汇总了Python中keras.backend.rnn方法的典型用法代码示例。如果您正苦于以下问题&#xff1a;Python backend.rnn方法的具体用法&#xff1f;Python backend.rnn怎么用&#xff1f;Python backend.rnn使用的例子&#xff1f;那么恭喜您, 这里精选的方法代码示例或许可以…

vscode删除文件夹,VSCode:删除文件中的所有注释

Is there an easy way to delete all comments from an open file in VSCode? Preferably both line and block comments.Most interested in Java, but also Python and R.解决方案Easy way:Open extensions (ctrl-shift-x)type in remove comments in the search box.Instal…

放大镜_屏幕放大镜怎么样使用方法

首先&#xff0c;打开控制面板&#xff0c;然后找到并单击“显示”&#xff0c;然后启动放大镜。放大镜的放大倍率基于原始屏幕&#xff0c;而不是矢量放大倍率。有关放大镜的详细操作&#xff0c;请单击帮助按钮&#xff0c;其中有特定说明。捷径一&#xff1a;win 可以快速调…

python清空语句_怎么清除python编译器的语句

清除python编辑器的方法&#xff1a;1、下载清屏函数clearwindow.py&#xff0c;然后复制clearwindow.py文件&#xff0c;并放在Python安装目录PythonXLibidlelib下面2、在Python XLibidlelib目录下找到config-extensions.def(IDLE扩展的配置文件)&#xff0c;用记事本打开&…

mysql字段是否存在_Mysql判断表字段或索引是否存在

判断字段是否存在&#xff1a;DROP PROCEDURE IF EXISTS schema_change;DELIMITER //CREATE PROCEDURE schema_change() BEGINDECLARE CurrentDatabase VARCHAR();SELECT DATABASE() INTO CurrentDatabase;IF NOT EXISTS (SELECT * FROM information_schema.columns WHERE tabl…

mysql取消主键_mysql如何删除主键?

当一个表中设置了主键之后&#xff0c;如果想要删除主键了要怎么做&#xff1f;下面本篇文章就给大家介绍MySQL删除主键的方法&#xff0c;希望对你们有所帮助。首先我们来看看删除主键的语法&#xff1a;ALTER TABLE TABLE_NAME DROP PRIMARY KEY;在MySQL中删除主键要考虑两种…

mysql 备份 windows_windows mysql 自动备份的几种方法

基于之前的文章方法&#xff0c;加入批处理命令即可实现自动备份。只是由于批处理命令中对于备份文件的名字按照时间命名比较特别&#xff0c;所以特别整理一文。1、复制date文件夹备份假想环境&#xff1a;MySQL 安装位置&#xff1a;C:\MySQL论坛数据库名称为&#xff1a;b…