BLEGATT——蓝牙 Low Energy 通信协议

一、介绍

BLEGATT是基于蓝牙 Low Energy 技术的一种通信协议。BLEGATT协议提供了一种通用的方式来连接多个不同的设备,将数据传输到和从这些设备中读取数据。这个协议是使用搭建在标准蓝牙技术之上的标准,具有可靠性、低功耗和安全性。

二、BLEGATT的架构

BLEGATT协议之间的通信采用了基于客户端和服务端的数据模型。通常情况下,服务端提供数据和操作,而客户端将请求发送到服务端,等待查询结果。服务端可以报告数据更新、新事件或通知客户端需要采取行动的事件。在BLEGATT的框架下,数据模型包含一个服务层,服务层包含特征层,特征层包含描述符。每一个层级的数据模型都包含一些数字属性,如UUID,用于标识数据层级和服务类型。通过一个专用的区分符号(“:”)来将这些属性从服务层到数据层逐个接收成链接起来:


        /*
         * Note: The fields of this struct are structured in such a way that
         * the common members with the GattCharacteristic struct are all
         * contiguous, which makes the two structs easy to correlate in the code.
         *
         * If additions are made to this struct please consider if the way it's
         * laid out makes it harder to read.
         */
        struct GattAttribute {
            UUID uuid;
            GattAttribute *next;
            GattAttribute *prev;
            GattAttributeType_t type : 8;
            uint16_t value_handle;
            uint16_t decl_handle;
            uint16_t *cached_value_attr_data;
            uint16_t cached_value_attr_len;
            uint8_t *user_value_buf;
            uint16_t user_value_buf_len;
            uint16_t handle;
        };

三、BLEGATT服务类型

BLEGATT服务类型 经常会被认为是一种用于互联网的服务,实际上,BLEGATT服务是操作BLE设备的一个基本单元。每个服务代表一个可通过BLE进行访问的可用数据集合。这些数据集合可以是任何类型和大小的数据类型,包括字符、浮点数等。你可以使用BLEGATT协议访问这些数据,操作设备或从设备读取数据。

四、BLEGATT特性和描述符

BLEGATT特性和描述符是两种不同的数据类型,这两种数据类型分别用于服务中的数据元素和数据元素属性。特性是数据元素的基本单位,通常可以是浮点数、整数或字符串。描述符是用于定义特性某些属性及其行为的数据元素。你可以使用BLEGATT协议来自定义服务中的所有内容,包括特性和描述符。


class GattCharacteristic {
public:
    enum {
        BLE_GATT_CHAR_PROPERTIES_NONE                    = 0x00, /**< Characteristic has no property set. */
        BLE_GATT_CHAR_PROPERTIES_BROADCAST               = 0x01, /**< Characteristic is broadcastable. */
        BLE_GATT_CHAR_PROPERTIES_READ                    = 0x02, /**< Characteristic is readable. */
        BLE_GATT_CHAR_PROPERTIES_WRITE_WITHOUT_RESPONSE  = 0x04, /**< Characteristic can be written without response. */
        BLE_GATT_CHAR_PROPERTIES_WRITE                   = 0x08, /**< Characteristic can be written. */
        BLE_GATT_CHAR_PROPERTIES_NOTIFY                  = 0x10, /**< Characteristic can be notified. */
        BLE_GATT_CHAR_PROPERTIES_INDICATE                = 0x20, /**< Characteristic can be indicated. */
        BLE_GATT_CHAR_PROPERTIES_AUTHENTICATED_SIGNED_WRITES = 0x40, /**< Characteristic requires authentication for write access. */
        BLE_GATT_CHAR_PROPERTIES_EXTENDED_PROPERTIES     = 0x80  /**< Characteristic has extended properties. */
    };

    enum {
        REPORT_REF_DEFAULT_VAL_HANDLE_RANGE_START = 0x0001,
        REPORT_REF_DEFAULT_VAL_HANDLE_RANGE_END   = 0xffff
    };

    enum {
        CCCD_DEFAULT_VAL_HANDLE_RANGE_START = 0x0001,
        CCCD_DEFAULT_VAL_HANDLE_RANGE_END   = 0xffff
    };

    /**
     * Constructor.
     *
     * @param[in] uuid The UUID of this characteristic. You can use @p UUID::ShortUUIDBytes_t to create
     * a UUID from a 16-bit bluetooth.org assigned number.
     * @param[in] valuePtr The initial value of the characteristic
     * @param[in] valueSize The size of the initial value.
     * @param[in] valueCapacity The maximum capacity of the value attribute (default: @p valueSize + 1); including null-termination.
     * @param[in] security The security requirement associated with this characteristic (default: SecurityManager::SECURITY_MODE_ENCRYPTION_NO_MITM)
     * @param[in] properties The property of this characteristic (default:
     * BLE_GATT_CHAR_PROPERTIES_READ | BLE_GATT_CHAR_PROPERTIES_WRITE)
     */
    GattCharacteristic(UUID uuid, uint8_t *valuePtr = NULL, uint16_t valueLength = 0,
                        uint16_t valueCapacity = 1, uint8_t properties = BLE_GATT_CHAR_PROPERTIES_READ,
                        SecurityManager::SecurityMode_t security = SecurityManager::SECURITY_MODE_ENCRYPTION_NO_MITM);
};

五、BLEGATT的应用

BLEGATT协议在智能家居和医疗监测等领域应用广泛,可以帮助开发人员在手表上实现读取心率数据、与智能家居设备通信等功能,同时低功耗的设计也让 BLEGATT 协议在 IoT 等资源有限的场景中极具优势。

原创文章,作者:ZGRZ,如若转载,请注明出处:https://www.506064.com/n/130950.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
ZGRZZGRZ
上一篇 2024-10-03 23:42
下一篇 2024-10-03 23:42

相关推荐

  • HC-05蓝牙模块控制

    一、简介 HC-05是一款蓝牙串口模块,与典型的串口模块相似,可通过UART通信发送和接收数据。它可以很方便地与其他设备进行蓝牙通信,例如智能手机,平板电脑等,实现无线控制。HC-…

    编程 2025-04-24
  • Android蓝牙详解

    一、Android蓝牙强度 1、Android蓝牙的强度是通过RSSI值来计算的,单位为dBm。 2、可以通过使用BluetoothDevice类中的getBondState()方…

    编程 2025-04-23
  • 小程序蓝牙开发指南

    一、蓝牙技术简述 蓝牙技术是一种基于短距离无线通信的技术,它能够使设备之间进行通信,并能够在不需要电缆等连接方式的情况下让设备进行数据传输。小程序蓝牙开发就是利用这种技术,在小程序…

    编程 2025-04-23
  • hc05蓝牙模块介绍

    一、基本概述 HC-05蓝牙串口模块是一种基于蓝牙2.0协议的串口通信模块,它的数据传输速率高达2Mbps,能够满足绝大部分实际应用。它主要通过串口通信的方式,实现了与各种单片机(…

    编程 2025-04-22
  • 蓝牙HCI的详细阐述

    一、蓝牙HCI概述 蓝牙HCI(Host Controller Interface)是指蓝牙设备通过HCI与主设备进行通讯。它定义了一个标准的接口协议,以便操作系统、驱动程序和其他…

    编程 2025-04-12
  • 蓝牙调试详解

    一、蓝牙基础介绍 蓝牙技术是一种无线技术,能够实现不同设备之间的通信。蓝牙技术的优点是便携性和低功耗。蓝牙技术可以通过近距离通信(NFC)或扫描QR码来进行连接。蓝牙技术也广泛应用…

    编程 2025-04-12
  • Python蓝牙通信详解

    一、蓝牙通信基础 蓝牙无线技术是一种短距离无线通信技术,其传输距离一般不超过10米,速率也较低,适用于个人设备之间的通信。在蓝牙通信中,有一个基本概念是蓝牙设备的地址,每一个蓝牙设…

    编程 2025-04-02
  • Android蓝牙权限详解

    一、蓝牙权限的重要性 在Android系统中,蓝牙权限是非常重要的。由于蓝牙模块可以用于与其他设备进行数据交换,因此如果我们的应用要使用蓝牙功能的话,就必须要获得蓝牙权限。 And…

    编程 2025-02-25
  • HC-05蓝牙模块详解

    蓝牙技术的发展已经逐渐成为了无线通信领域中的重要技术之一。因为其运行稳定,无需经过路由器中继就可以连接,只需将数据从一个设备传输到另一个设备的身边,极大地方便了移动设备的交互使用。…

    编程 2025-02-01
  • MQTT通信协议详解

    一、MQTT的定义 MQTT即Message Queuing Telemetry Transport,是一种专门为物联网(IoT)设计的轻量级通信协议。它可以在客户端和服务端之间传…

    编程 2025-02-01

发表回复

登录后才能评论