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/zh-hant/n/130950.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
ZGRZ的頭像ZGRZ
上一篇 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

發表回復

登錄後才能評論