UUID:
 “GATT层”中定义的所有属性都有一个UUID值,UUID是全球唯一的128位的号码,它用来识别不同的特性。

1. BTSIG UUID

蓝牙核心规范制定了两种不同的UUID,一种是基本的UUID,一种是代替基本UUID的16位UUID。 所有的蓝牙技术联盟定义UUID共用了一个基本的UUID:0x0000xxxx-0000-1000-8000-00805F9B34FB

为了进一步简化基本UUID,每一个蓝牙技术联盟定义的属性有一个唯一的16位UUID,以代替上面的基本UUID的‘x’部分。例如,心率测量特性使用0X2A37作为它的16位UUID,因此它完整的128位UUID为:

0x00002A37-0000-1000-8000-00805F9B34FB

虽然蓝牙技术联盟使用相同的基本UUID,但是16位的UUID足够唯一地识别蓝牙技术联盟所定义的各种属性。

蓝牙技术联盟所用的基本UUID不能用于任何定制的属性、服务和特性。对于定制的属性,必须使用另外完整的128位UUID。

蓝牙技术规范 Core_V4.2中是这样描述的

A UUID is a universally unique identifier that is guaranteed to be unique across all space and all time. UUIDs can be independently created in a distributed fashion. No central registry of assigned UUIDs is required. A UUID is a 128-bit value.

To reduce the burden of storing and transferring 128-bit UUID values, a range of UUID values has been pre-allocated for assignment to often-used, registered purposes. The first UUID in this pre-allocated range is known as the Bluetooth Base UUID and has the value 00000000-0000-1000-8000-00805F9B34FB, from the Bluetooth Assigned Numbers document. UUID values in the pre-allocated range have aliases that are represented as 16-bit or 32-bit values. These aliases are often called 16-bit and 32-bit UUIDs, but it is important to note that each actually represents a 128-bit UUID value.

The full 128-bit value of a 16-bit or 32-bit UUID may be computed by a simple arithmetic operation.

28_bit_value = 16_bit_value * 296 + Bluetooth_Base_UUID

128_bit_value = 32_bit_value * 296 + Bluetooth_Base_UUID

A 16-bit UUID may be converted to 32-bit UUID format by zero-extending the  16-bit value to 32-bits. An equivalent method is to add the 16-bit UUID value to a zero-valued 32-bit UUID。

蓝牙广播中对服务 UUID 格式定义都有三种 16 bit UUID、32 bit UUID、128 bit UUID。

但是熟悉安卓开发的小伙伴都知道接口都 UUID 格式,fromString 时候 16bit 的 UUID 该咋办呢?

16bit 和 32bit 的 UUID 与 128bit 的值之间转换关系:

128_bit_UUID = 16_bit_UUID * 2^96 + Bluetooth_Base_UUID

128_bit_UUID = 32_bit_UUID * 2^96 + Bluetooth_Base_UUID

其中 Bluetooth_Base_UUID 定义为 00000000-0000-1000-8000-00805F9B34FB

如果你想说这是啥呀,那我这样说你应该可以明白点:

若 16 bit UUID为xxxx,那么 128 bit UUID 为 0000xxxx-0000-1000-8000-00805F9B34FB

若 32 bit UUID为xxxxxxxx,那么 128 bit UUID 为 xxxxxxxx-0000-1000-8000-00805F9B34FB

通俗来讲

UUID 可以简单理解为编号,唯一的编号,用于区分不同的个体。服务和特性都有各自的UUID。比如经典的9527。UUID 就跟身份证一样,不管是你是局长还是科长,人人都有身份证。

这里的 Read, Notify,Write_Without_Response为该Characteristic UUID所具有的属性

二、 服务(Service) UUID

服务(Service)可以理解为组长,一个组里面至少有一个或多个特性(Characteristic),特性(Characteristic)可以理解为组员。不同的服务(Service)应该有不同的编号(UUID),用以区分不同的服务(Service)。
       我是重案组总督察黄启发, 这里已经被包围了, 限你三分钟之内投降,这里的黄Sir就是组长,组长一般是不干活的,真正干活的是组员(特性),比如谈判专家、拆弹专家和飞虎队。

三,特性(Characteristic)UUID

特性(Characteristic)是依附于某个服务(Service)的,可以理解为组员,每个组员至少要有一个编号(UUID)以及一个或多个属性(Property)每个特性(Characteristic)可以同时有一个或多个属性。
就比如 119 不光可以救火,像忘带钥匙打不开门,工头不发工资站到楼顶上想不开等等119都可以帮忙,这就是混合属性, 当然了,“Fire inthe hole”人家119 不管。

四,属性(Property)

属性的概念非常好理解,在此不多阐述,只是简单描述一下,借用古诗一首:文能提笔安天下,武能上马定乾坤,上炕认识媳妇,下炕认识鞋。

常用的属性有如下几个,我们以手机和蓝牙模块进行通讯来举栗说明:

Read: 读属性,具有该属性的UUID 是可读的,也就是说这个属性允许手机来读取一些信息。手机可以发送这个指令来读取某个具有读属性UUID的信息。

Notify: 通知属性, 具有该属性的 UUID是可以发送通知的,也就是说具有这个属性的特性(Characteristic)可以主动发送信息给手机。

Write: 写属性, 具体该属性的 UUID 是可以接收写入数据的。通常手机发送数据给蓝模块就是通过这个属性完成的。这个属性在Write 完成后,会发送写入完成结果给手机,然后手机再可以写入下一包,这个属性在写入一包数据后,需要等待应用层返回写入结果,速度比较慢。

WriteWithout Response:写属性,从字面意思上看,只是写,不需要返回写的结果,这个属性的特点是不需要应用层返回,完全依靠协议层完成,速度快,但是写入速度超过协议处理速度的时候,会丢包。

扛把子(服务)是0xFFE0, 小弟只有一个(特性)是0xFFE1,小弟(特性)0xFFE1同时具有读、通知、不需要返回结果的写属性。顺道辟个谣,有些人认为用一个UUID 来读写会造成冲突,其实并不是这样,多个属性集合到一体是可以的,蓝牙协议是允许这么做的。

BLE常用UUID 16bit和128bit相关推荐

  1. 系统性简述蓝牙以及ESP32对BLE蓝牙的使用(一)

    这里写自定义目录标题 1.蓝牙简介 1.1 蓝牙分类 1.2 蓝牙技术 1.3 蓝牙协议框架 2.BLE 低功耗蓝牙协议 2.1 BLE协议栈框架 2.2 Link Layer States 2.2. ...

  2. 【BLE】BLE中常用的UUID(标准)

    转发自 https://www.cnblogs.com/bulazhang/p/8450172.html 蓝牙低功耗BLE开发,无论是MCU端还是Android等APP端,都会涉及到一堆的UUID,对 ...

  3. 低功耗蓝牙BLE对应Gatt的UUID

    参考http://blog.csdn.net/zhangjs0322/article/details/39048939  参考http://code.taobao.org/p/watch_demo/d ...

  4. 蓝牙4.0 BLE 广播包解析

    本文转自:蓝牙4.0BLE抓包(二) – 广播包解析 - 强光手电 - 博客园 感谢原创作者! SleepingBug评论:这篇文档写的相当好,受教了,多谢了! 所有图片水印均是CSDN自动标上的,并 ...

  5. Android BLE的总结-概念篇

    Android BLE的总结 其实BLE是个通用的技术术语,与平台无关的,即ios和Android以及一些嵌入式系统或单片机都可以有BLE模块.在进行Android BLE相关的应用开发前,我们有必要 ...

  6. ESP32学习笔记(30)——BLE GATT服务端自定义服务和特征

    一.简介 1.1 低功耗蓝牙(BLE)协议栈 链路层(LL) 控制设备的射频状态,有五个设备状态:待机.广播.扫描.初始化和连接. 广播 为广播数据包,而 扫描 则是监听广播. GAP通信中角色,中心 ...

  7. ESP32学习笔记十九之BLE协议GAPGATT

    GAP GAP全名是Generic Access Profile,通用访问配置文件,它定义了蓝牙设备的角色,中心和外设,并且控制他们的连接和广播数据.广播数据有两种方式:广播数据和扫描回复数据,数据包 ...

  8. 物联网安全拔“牙”实战——低功耗蓝牙(BLE)初探

    唐朝实验室 · 2015/10/30 10:22 Author: FengGou 0x00 目录 0x00 目录 0x01 前言 0x02 BLE概述 BLE 协议栈总览 GAP-通用访问规范 GAT ...

  9. React Native BLE蓝牙通信

    由于项目需要,基于React Native 开发的App要跟BLE蓝牙设备通信. 在js.coach上搜索React Native BLE蓝牙组件,只找到三个组件: react-native-ble- ...

最新文章

  1. [C#]使用CMD命令删除文件函数
  2. 9月22日 奇怪的贸易
  3. 许式伟:毕业两年成为首席架构师,我的技术学习方法论
  4. 如何构建ASP.NET MVC4JQueryAJaxJSon示例
  5. 用MATLAB编程课程设计,matlab课程设计报告---用Mtlab编程实现句柄图形应用
  6. sqlplus必须要安装oracle吗,不安装oracle客户端使用sqlplus
  7. LeetCode--Reverse Integer(整数反转)Python
  8. idea运行SSM项目配置tomcat及启动
  9. 公鸡每只值5文钱,母鸡每只值3文钱,而三只小鸡值一文钱。用100文钱买100只鸡,问:公鸡,母鸡,小鸡各有多少只?
  10. 2022紫光展锐数字芯片提前批笔试
  11. spring cloud bus的使用及使用bus发布自定义事件
  12. LAN9252 out端口识别不到的原因排查
  13. cf网络原因服务器无响应,CF老出现网络出现异常,与服务器断开
  14. 事务处理 :本地 、全局、分布式
  15. stm32在官网下载标准库
  16. 怀旧服服务器维护后刷稀有怪么,这6件魔兽世界怀旧服值得刷但掉率低的装备,你刷了多少次刷到的...
  17. ABP zero 4.2 发布
  18. 双十一,几何画板加入购物车了吗?
  19. 公司网络出现卡顿或断网如何处理?
  20. PHP反序列化CTF例题

热门文章

  1. Praat脚本-013 | 无需标注自动切除音频首尾静音段
  2. 数仓实践:浅谈 Kimball 维度建模
  3. jpg图片损坏打不开怎么办?
  4. c++ string类判断字符串是否为空
  5. vue 中的 scoped
  6. 企微vconsole
  7. 通信专业和计算机专业的差异,通信工程专业和电信工程专业的区别
  8. java实现舞伴分配问题
  9. 【情人节快到了】程序员花里胡哨的表白方式,解锁新姿势
  10. 【Linux网络编程】TCP状态转换、半关闭、2MSL时长