安卓BLE开发教程(一) BLE基础

我试图以一种简单的方式去把重要的事情讲清楚。目的是希望BLE协议栈和基础概念简单化,让自己及类似的安卓开发者可以在较短的时间内把握住BLE的核心及使用方法。BLE本身很复杂,但对于安卓开发而言只要抓住一些核心点,便已足够。如果你想全面了解BLE协议栈,包括分层及每层功能,那么你从这里可能得不到答案。

1、BLE协议栈层次

然而,安卓BLE开发不用理解如此复杂的分层结构。因为我们不是在开发BLE协议栈,只是使用上层的安卓API和BLE设备进行通讯。因此我们只需要关注ATT和GATT层即可。

2、属性协议层(ATT)与通用属性配置文件层(GATT)的关系

一句话总结,ATT定义了GATT的实现所需要的基础。也即“一切皆属性”。

3、属性协议层(ATT)

GATT层的实现均基于ATT层的“属性”概念,属性是一块特定的数据,用于向其他设备展示。展示或者拥有“属性”的设备称为服务器,与之配对的设备称为客户端。

4、通用属性配置文件层(GATT)

定义了使用ATT的服务框架,GATT规定了配置文件(profile)的结构。简单的包含关系:

Profile包含Service,Service包含Chracteristic,Service和Chracteristic都以属性的方式存储在Profile中。

GATT服务器上的Chracteristic及其内容和描述符均存储于属性表中(ATT Table)。属性表可以理解为一个数据库,包含了称为属性的小块数据。除了值本身,每个属性包含下列属性:

Handle—属性在列表中的地址

Type—说明代表什么数据,可以是SIG分配或自定义UUID

Permissons—权限,定义了client是否可以访问属性的值,以及特定的访问方式

5、GATT层中的关键词

(1)Profile

Profile可以理解为一种规范、一种标准的通信协议(SIG规定了一系列标准Profile),profile存在于从机中。每个Profile中会包含多个Service,每个Service代表从机的一种能力。

(2)Service

Service可以理解为一个服务,在BLE从机中,通常有多个服务,每个Service里又包含了多个Chracteristic特征值。

(3)Chracteristic

Chracteristic也称为“特性”或“特征值”,BLE的主从机通信均是通过Chracteristic来实现。

下图为GATT Profile 层级

 

 

 

 

 

 

 

 

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

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

相关文章

Linux驱动如何在不同版本上快速迭代升级

As well known,Linux内核版本更新很快,有些内核版本的迭代升级可能会导致在使用的驱动版本存在编译失败或使用的兼容性问题,如何快速定位到内核版本间变更的地方,并处理掉该问题,列一下我常用的解决方法。(…

苹果MacOS系统上安装第三方驱动失败/无效

近期不少用户在苹果系统上安装一些第三方驱动时反馈没有作用,但是驱动安装提示是完成的,并拷贝到了系统的驱动路径下;造成该问题的原因可参见如下苹果官方说明: User-Approved Kernel Extension Loading 引用下第一段官网说明 …

OpenWrt 之 MT7628 移植第三方SPI驱动

1、在OpenWrt系统上移植SPI驱动前,首先要确保SPI相关引脚未被复用为其他功能,比如GPIO;以下操作已假定该条件成立,否则请修改相关dts和c文件中复用配置; 2、打开dts配置文件进行修改,这里我是用的硬件为WR…

CH9102 USB转串口应用体验

近期使用CH9102 USB转串口芯片成功用在原有使用CP2102的产品板上,整个替换和验证过程还是很顺利的,顺带写个blog做个记录。 原项目上使用CP2102搭载ESP32实现Arduino物联网应用,采用USB转串口芯片实现串口下载,代码的Debug调试&am…

CH9101 USB转串口替换FT232R和FT230XQ

学生党一枚,前段时间跟着导师做的项目因为上面用到USB转串口芯片FT232R迟迟买不到,所以打算更换成国产USB转串口芯片CH340,对CH340的认识也很早了,很多年前开始直到现在各种开发板上基本都会标配一颗CH340,像某宝上的S…

FT230X芯片的国产化替代

之前有些项目用到FT230XQ芯片,无奈不好买(价格高),想找些替代的型号。原先使用国产CH340芯片比较多,顺带去官网找下有没有其他小封装的芯片型号。导航比较方便,从官网的产品中心,选择“USB”分类…

Java Code之多态

Java代码 package com.iteye.badpie.javacode.duotai; /** * 人民警察 */public interface IPolice { /** * 抓小偷 */public void catchThief(); }package com.iteye.badpie.javacode.duotai;/*** 人民警察*/ public interface IPolice {/*** 抓小偷*/public void catch…

最小生成树之prim

prim是设置一个初始结点,寻找其周围最小的边权值,并将该结点作为初始结点,继续寻找现在结点周围的边权值的最小值,但要注意如果这次寻找的某个边权值没有上次的小的话仍然保留上一次的边权值,即lowcast的值将会不变。 …

element-ui自定义表头;el-table自定义表头;render-header自定义表头

自定义表头有两种方式&#xff1a;一种是使用render-header 一种是通过设置 Scoped slot 来自定义表头 一、render-header方式 场景&#xff1a;给表头设置自定义按钮&#xff0c;点击时候 批量下载或做其他事件 给当前的那列设置 :render-header <el-table-column align&…

vue项目转rem;H5配置rem;px转rem

H5可以配合vant组件库书写项目&#xff0c;和使用rem后vant组件样式变小了解决办法。&#xff08;引入方式&#xff09; 以下是配置rem步骤&#xff1a; 1.安装 flexible和 postcss-px2rem&#xff08;命令行安装&#xff09; lib-flexible 会自动在为你添加 meta name“viewp…

git代码回滚到以前某一版本

1.使用 git log 查看之前提交的版本&#xff0c;每一版对应的hash值&#xff0c;默认展示几条&#xff0c;如果想查看更多&#xff0c;一直按回车。 git reset --hard 目标版本hash值 &#xff0c;注意&#xff1a;这一步操作完后&#xff0c;目标版本之后的代码将全部清掉&am…

python发送各类邮件的主要方法

From: http://www.cnblogs.com/xiaowuyi/archive/2012/03/17/2404015.html python中email模块使得处理邮件变得比较简单&#xff0c;今天着重学习了一下发送邮件的具体做法&#xff0c;这里写写自己的的心得,也请高手给些指点。 一、相关模块介绍 发送邮件主要用到了smtplib和e…

图片保持比例自适应大小;图片保持比例自动充满父元素;图片保持比例充满盒子

需求&#xff1a;经常会有一个div盒子&#xff0c;里面放入一个img图片。需要是图片保持比例&#xff0c;缩放充满div盒子。 思路&#xff1a; 1.必须给父元素设置固定的宽高。2.给img设置 object-fit: scale-down; 属性 object-fit使用学习 先看效果&#xff1a; <!DOCTYP…

Python序列之元组

系列文章目录 Python序列之列表 Python序列之元组 系列文章目录前言一、元组是什么&#xff1f;二、元组操作1.元组的创建&#xff08;1&#xff09;通过()创建。小括号可以省略。&#xff08;2&#xff09;通过tuple()函数创建。&#xff08;3&#xff09;通过生成器推导式创…

Eclipse 下载 开源项目 maven依赖丢失和 Deployment Assembly 丢失

周末下载了最新的jeecg的源码来瞅瞅&#xff0c;但是下载后发现&#xff0c;pom文件中定义的依赖都丢失了。 如下图 上网搜索了一下啊&#xff0c;发现需要先给这个项目这个项目 disable maven nature 然后再添加上再给这个项目添加maven支持。 如下图&#xff1a; 然后再查看项…

HTML CSS样式表布局

一、position&#xff1a;fixed 锁定位置&#xff08;相对于浏览器的位置&#xff09;&#xff0c;例如有些网站的右下角的弹出窗口。 示例&#xff1a; 二、position&#xff1a;absolute 1.外层没有position&#xff1a;absolute&#xff08;或relative&#xff09;&#xff…

SVN服务器搭建和使用(一)

2019独角兽企业重金招聘Python工程师标准>>> Subversion是优秀的版本控制工具,其具体的的优点和详细介绍,这里就不再多说. 感谢原文博主&#xff1a;http://www.cnblogs.com/xiaobaihome/archive/2012/03/20/2407610.html 首先来下载和搭建SVN服务器. 现在Subver…

解决vue-pdf报错TypeError: Cannot read properties of undefined (reading ‘catch‘)

使用vue-pdf插件后&#xff0c;报错 解决方法&#xff1a;找到node_modules/vue-pdf/src/pdfjsWrapper.js文件&#xff0c;注释掉下面的代码

Memcached缓存在.Net 中的使用(memcacheddotnet)

From: http://www.cnblogs.com/xibei666/p/4863604.html 缓存对于提高大数据量的网站性能无疑不是一个很好的解决方案&#xff0c;针对缓存的使用网上同仁介绍很多&#xff0c;再次我仅仅分享一下自己对Memcached使用的简单介绍。Memchached的使用通过第三方DLL来完成&#xff…

git合并代码冲突

场景&#xff1a;多人共同更改同一文件代码时候&#xff0c;可能回引发代码冲突。此时需要选择某一方或者双方代码进行合并。 采用当前更改&#xff1a;就是保留本地修改。 采用传入的更改&#xff1a;就是选择线上已有的覆盖更改。 保留双方更改&#xff1a;就是两份都保存。