EXPT1:Global

目录

一、 文件结构

二、 UUID及其延伸

1.BLE协议栈分析

2. 通信结构:client/server(C/S) 架构

3.GATT简介

4.UUID通用唯一识别码


一、 文件结构

Global.java文件中很杂,这是个囊括了BLE和WiFi全部实验用到的所有常量的文件。

        我将其分为四块:

                —三个UUID。             (进行蓝牙通信时用到)

                —节点控制命令READ_****_SENSOR (命令相应节点进行工作)

                —名字。  毫无用处

                —WiFi节点IP地址以及端口号port:4001        (进行WiFi通信时用到)

二、 UUID及其延伸

下面只重点介绍三个UUID以及他们背后的知识。

        至于节点控制命令和WiFi_IP地址这些死记硬背的东西在附件里面都有,不再赘述。

//大赛蓝牙服务:
①public static final String UUID_DS_SERVICE = "0000fff0-0000-1000-8000-00805f9b34fb";
//大赛蓝牙特征  
②public static final String UUID_DS_CHARACTERISTIC = "0000fff6-0000-1000-8000-00805f9b34fb";
//大赛特征描述
③public static final String UUID_DS_DESCRIPTOR = "00002902-0000-1000-8000-00805f9b34fb";

想要了解上面三个UUID得从整个低功耗蓝牙BLE的工作流程来。通过上面的UUID我们可以提取三个关键词:Service、Characteristic、Descriptor。那这三个有什么关系呢?

1.BLE协议栈分析

我们只需了解红框中的部分即可,剩下的在D平台的比赛中涉及不到。

2. 通信结构:client/server(C/S) 架构

客户端要访问某一个数据,就发送一个request/请求(其实就是一条命令),服务端再把相应的数据返回给客户端,这就是C/S架构。 

以蓝牙温湿度节点实验为例子,实验箱的蓝牙温湿度节点就是Server,我们的phone或者Pad就是Client。Client发送请求温湿度数据的指令,温湿度节点返回相应数据。

服务是以数据为载体的,所以说server提供服务其实就是提供各种有价值的数据

3.GATT简介

        低功耗蓝牙BLE实际上是建立在GATT数据通信协议之上的。GATT全称Generic Attribute Profile(直译即:通用属性协议),是一个在蓝牙连接之上的发送和接收较短的数据段的通用规范,这些很短的数据段被称为属性/句柄(Attribute)。

        GATT层定义了使用 ATT (数据交互协议)的服务框架和配置文件(profiles)的结构,是将ATT封装后的对外接口。BLE 中所有的数据通信都需要经过 GATT,GATT负责处理向上与应用打交道。

 Service、Characteristic、Descriptor三者的关系如下图所示。

  • 每个GATT由完成不同功能的Service组成;
  • 每个Service由不同的Characteristic组成;
  • 每个Characteristic由一个value和一个或者多个Descriptor组成;而value才真正的包含数据,Descriptor是对这个value进行的说明和描述,当然我们可以从不同角度来描述和说明,因此可以有多个Descriptor。

4.UUID通用唯一识别码

上面那么些Service、Characteristic、Descriptor,我用的时候得找到才行,这就用到了UUID。

1. Service 的UUID:用来表示蓝牙设备(在实验中为节点)所提供的服务。设备中每一个不同的 Service 都有一个 128 bit 的 UUID 作为这个 Service 的独立标志。

        Base_UUID的值为: 00000000-0000-1000-8000-00805F9B34FB。

        一个蓝牙设备可以提供多种服务,比如蓝牙音频传输等,每个服务都对应一个UUID,其中在蓝牙协议栈里,这些默认提供的profile都是有对应的UUID的,也就是默认UUID。就比如UUID_DS_CHARACTERISTIC的那个字段就是最著名的UUID,用于串口通信。
        我们可以使用自己生成的UUID来连接,别人的UUID对不上是无法进行连接的,我们也无法连接上别人的设备,要是懒的自定义就用默认的,当然这样可能会发生误连
        这里给出的三个大赛UUID作用就是让我们扫描连接蓝牙的时候只出现实验箱的蓝牙节点,其他设备(参赛选手的手机电脑)的蓝牙通通过滤掉,防止干扰我们的实验。这三个UUID已经是实验箱节点固件里已经烧好的,我们只需程序中也用使用同样的UUID便可建立与实验箱节点的连接。

2. 每一个 Characteristic 也有一个唯一的 UUID 作为标识符 

举一个简单的例子进行说明:常见的小米手环是一个BLE设备,假设它包含三个Service,分别是提供设备信息的Service、提供步数的Service、检测心率的Service;设备信息的service中包含的characteristic包括厂商信息、硬件信息、版本信息等;心率Service则包括心率characteristic等,心率characteristic中的value则真正的包含心率的数据,而descriptor则是对该value的描述说明,比如value的单位啊,描述啊,R/W权限等。

看下面的代码,就是一个外设提供的诸多服务的UUID。

public class BleConstant {

    /**
     * 服务 UUID 
     */
    public static final String SERVICE_UUID = "0000ff01-0000-1000-8000-00805f9b34fb";
    /**
     * 特性写入 UUID 
     */
    public static final String CHARACTERISTIC_WRITE_UUID = "0000ff02-0000-1000-8000-00805f9b34fb";
    /**
     * 特性读取 UUID 
     */
    public static final String CHARACTERISTIC_READ_UUID = "0000ff10-0000-1000-8000-00805f9b34fb";
    /**
     * 描述 UUID 
     */
    public static final String DESCRIPTOR_UUID = "00002902-0000-1000-8000-00805f9b34fb";
    /**
     * 电池服务 UUID
     */
    public static final String BATTERY_SERVICE_UUID = "0000180f-0000-1000-8000-00805f9b34fb";
    /**
     * 电池特征(特性)读取 UUID
     */
    public static final String BATTERY_CHARACTERISTIC_READ_UUID = "00002a19-0000-1000-8000-00805f9b34fb";
    /**
     * OTA服务 UUID 
     */
    public static final String OTA_SERVICE_UUID = "5833ff01-9b8b-5191-6142-22a4536ef123";
    /**
     * OTA特征(特性)写入 UUID
     */
    public static final String OTA_CHARACTERISTIC_WRITE_UUID = "5833ff02-9b8b-5191-6142-22a4536ef123";
    /**
     * OTA特征(特性)表示 UUID 
     */
    public static final String OTA_CHARACTERISTIC_INDICATE_UUID = "5833ff03-9b8b-5191-6142-22a4536ef123";
    /**
     * OTA数据特征(特性)写入 UUID 
     */
    public static final String OTA_DATA_CHARACTERISTIC_WRITE_UUID = "5833ff04-9b8b-5191-6142-22a4536ef123";
}

大概知识就介绍到此,具体如何用程序实现BLE通信,参考如下这篇blog

(48条消息) EXPT_1:E1BleTemperatureNodeActivity_why you learn hard?的博客-CSDN博客

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ad_m1n

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值