日B视频 亚洲,啪啪啪网站一区二区,91色情精品久久,日日噜狠狠色综合久,超碰人妻少妇97在线,999青青视频,亚洲一区二卡,让本一区二区视频,日韩网站推荐

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線(xiàn)課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

一文搞清 BLE 藍(lán)牙 UUID

矜辰所致 ? 來(lái)源:矜辰所致 ? 作者:矜辰所致 ? 2025-12-18 11:23 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

一文帶你搞清楚藍(lán)牙 UUID      ...... 矜辰所致

前言

在使用藍(lán)牙的過(guò)程中,UUID 作為通用唯一識(shí)別碼,是必須要清楚的,按理來(lái)說(shuō)它其實(shí)只是屬于一個(gè)簡(jiǎn)單的概念,但是由于藍(lán)牙協(xié)議的層次分明,對(duì)于初學(xué)者來(lái)說(shuō)很容易看得迷糊,理不清楚。所以本文就帶大家詳細(xì)認(rèn)清藍(lán)牙中的 UUID 。

我是矜辰所致,全網(wǎng)同名,盡量用心寫(xiě)好每一系列文章,不浮夸,不將就,認(rèn)真對(duì)待學(xué)知識(shí)的我們,矜辰所致,金石為開(kāi)!

一、 理論基礎(chǔ)

簡(jiǎn)單過(guò)一遍理論基礎(chǔ),UUID(通用唯一識(shí)別碼,Universally Unique Identifier) ,相當(dāng)于藍(lán)牙通信中的 “身份證”,通過(guò)標(biāo)準(zhǔn)化和自定義兩種形式,確保藍(lán)牙設(shè)備間能準(zhǔn)確識(shí)別、通信和交互。

藍(lán)牙協(xié)議通過(guò) UUID 實(shí)現(xiàn)設(shè)備間的標(biāo)準(zhǔn)化通信,使用藍(lán)牙對(duì)外提供服務(wù)的設(shè)備,需要有對(duì)應(yīng)的服務(wù)功能,服務(wù)是藍(lán)牙設(shè)備中功能劃分的單元,每個(gè)服務(wù)都對(duì)應(yīng)著一種特定的功能或數(shù)據(jù)傳輸需求。

例如,當(dāng)一個(gè)藍(lán)牙設(shè)備(如智能手環(huán))向外界廣播服務(wù)時(shí),會(huì)攜帶對(duì)應(yīng)的 UUID,其他設(shè)備(如手機(jī))通過(guò)識(shí)別這些 UUID,就能知道該設(shè)備提供哪些功能(如心率監(jiān)測(cè)、數(shù)據(jù)傳輸?shù)龋⒔⑨槍?duì)性的連接。

藍(lán)牙 UUID 用于唯一標(biāo)識(shí)藍(lán)牙服務(wù)(Service)、特征(Characteristic)和描述符(Descriptor)等
核心組件,在藍(lán)牙官方文檔中有圖:

在這里插入圖片描述

對(duì)于藍(lán)牙這個(gè) 服務(wù),特征值,描述符知識(shí)理論基礎(chǔ)大家可以自行網(wǎng)上翻閱資料,

在我以前的博文 [ESP32-C3 學(xué)習(xí)測(cè)試 藍(lán)牙 篇(三、認(rèn)識(shí)藍(lán)牙 GATT 協(xié)議)]也有過(guò)這方面的說(shuō)明。

我們的手機(jī)連接上藍(lán)牙設(shè)備,也可以看到 UUID :

在這里插入圖片描述

二、UUID 格式

藍(lán)牙 UUID 的標(biāo)準(zhǔn)格式為 128 位,通常表示為 32 個(gè)十六進(jìn)制字符,以 8-4-4-4-12 的格式分組,共 36 個(gè)字符(包括 4 個(gè)連字符):

格式:8-4-4-4-12
示例:0000180D-0000-1000-8000-00805F9B34FB

2.1 標(biāo)準(zhǔn) UUID(SIG 定義)

藍(lán)牙技術(shù)聯(lián)盟(Bluetooth SIG)定義,用于常見(jiàn)服務(wù)。

標(biāo)準(zhǔn)的UUID為:0000xxxx-0000-1000-8000-00805F9B34FB

為了節(jié)省帶寬,標(biāo)準(zhǔn) UUID 通常使用 16 位或 32 位短格式,實(shí)際通信時(shí)自動(dòng)擴(kuò)展為 128 位。每一個(gè)藍(lán)牙技術(shù)聯(lián)盟定義的屬性有一個(gè)唯一的16位 UUID,以代替上面的基本UUID的‘x’部分。

若 16 bit UUID為xxxx,那么 128 bit UUID 為 0000xxxx-0000-1000-8000-00805F9B34FB
若 32 bit UUID為xxxxxxxx,那么 128 bit UUID 為xxxxxxxx-0000-1000-8000-00805F9B34FB

比如下圖中,第一個(gè)服務(wù)就是標(biāo)準(zhǔn) UUID:

在這里插入圖片描述

2.2 自定義 UUID

用于私有服務(wù)或廠商特定功能,需開(kāi)發(fā)者自行生成,通常使用 UUID 隨機(jī)生成器生成 128 位 UUID,確保全球唯一性。

比如下圖中的最后一個(gè) Service ,使用的就是自定義的 128 位 UUID :

在這里插入圖片描述

一般應(yīng)用來(lái)說(shuō),多見(jiàn) 16bit 或者128 bit UUID ,本文后面的討論也皆在討論這兩種情況。

三、UUID 分類(lèi)

那我們上面知道,服務(wù)有 UUID ,特征有 UUID ,描述符有 UUID,而且有時(shí)候服務(wù)UUID 和 特征值 UUID 會(huì)一樣?這怎么區(qū)分開(kāi)呢?

上面這個(gè)問(wèn)題就是新手容易搞迷糊的地方,首先他們確實(shí)是共用 16-bit 或者 128 bit 編號(hào)的,而且確實(shí)存在ServiceCharacteristic UUID 一樣的情況,但是!?。ervice 和 Characteristic UUID 一樣的情況只有在使用自定義的 128-bit UUID 的情況下才會(huì)發(fā)生??!16-bit 區(qū)間被 SIG 固定了用途。

上面說(shuō)到 16-bit 區(qū)間被 SIG 固定了用途,我們平時(shí)藍(lán)牙連接設(shè)備后,幾乎大部分設(shè)備都能見(jiàn)到 16-bit UUID 為 0x1800 、0x1801 什么的,如下圖:

在這里插入圖片描述

其實(shí)這些都是藍(lán)牙聯(lián)盟規(guī)定好固定的:

  • 0x180x 開(kāi)頭 → 只能當(dāng) Service UUID
  • 0x2Axx 開(kāi)頭 → 只能當(dāng) Characteristic UUID
  • 0x29xx 開(kāi)頭 → 只能當(dāng) Descriptor UUID

只要記住這種規(guī)定,以后看到 UUID 就不會(huì)犯迷糊了,下面把常見(jiàn)的一些列出來(lái),當(dāng)做記錄,也方便自己以后查閱。

3.1 0x180x 開(kāi)頭UUID(Service UUID)

0x180x 區(qū)間只能當(dāng) Service UUID , 但是不是說(shuō) Service UUID 只能用 0x180x 這里要搞清楚,因?yàn)槲覀兛梢宰远x,也可以使用一些預(yù)留區(qū)域的值。

我們用表格記錄一下:

通用類(lèi)

16-bit服務(wù)英文名稱(chēng)中文場(chǎng)景
0x1800Generic Access必含,設(shè)備名、外觀、連接參數(shù)
0x1801Generic Attribute必含,Service Changed
0x180ADevice Information廠商字符串/版本號(hào)
0x180FBattery Service電池電量,手環(huán)/鍵鼠必備

基本上做 BLE 從機(jī),都得加上 0x1800 / 0x1801 / 0x180A / 0x180F 四件套。

傳感器與健康(手環(huán)、手表、醫(yī)療)

16-bit服務(wù)英文名稱(chēng)中文場(chǎng)景
0x180DHeart Rate心率
0x1809Health Thermometer體溫計(jì)
0x1810Blood Pressure血壓計(jì)
0x1818Cycling Power騎行功率計(jì)
0x1816Cycling Speed & Cadence踏頻/速度
0x1814Running Speed & Cadence跑步速度
0x1843Pulse Oximeter血氧儀
0x183EWeight Scale體重秤
0x183FLocation & Navigation自行車(chē)碼表
0x181BEnvironmental Sensing溫濕度/氣壓/光照
0x183BBinary Sensor門(mén)窗/煙霧開(kāi)關(guān)量

做傳感器需要用到 0x180D / 0x1809 / 0x1810 / 0x1843 / 0x183E / 0x181B 等上面這些。

HID & 音頻 & OTA

16-bit服務(wù)英文名稱(chēng)中文場(chǎng)景
0x1812Human Interface Device鍵盤(pán)/鼠標(biāo)/遙控
0x1813Scan Parameters掃描窗口參數(shù)(配合 HID)
0x1811Alert Notification Service來(lái)電/短信提醒
0x184ECommon AudioLE Audio 統(tǒng)一服務(wù)
0x181EBond Management刪除配對(duì)鍵
0x181FImmediate Alert防丟器“響鈴”
0x1825Object Transfer ServiceOTA/文件傳輸

做 BLE 鍵鼠/遙控 0x1812 必用。

手機(jī)/PC 常用后臺(tái)服務(wù)

16-bit服務(wù)英文名稱(chēng)中文場(chǎng)景
0x1802Immediate Alert防丟響鈴
0x1803Link Loss斷開(kāi)報(bào)警
0x1804Tx Power發(fā)射功率
0x1805Current Time Service同步系統(tǒng)時(shí)間
0x1806Reference Time Update網(wǎng)絡(luò)校時(shí)
0x1807Next DST Change夏令時(shí)
0x1808Glucose血糖儀
0x1815Automation IO通用 GPIO 控制
0x1817Position Quality定位精度
0x1819Location & Speed位置速度
0x183AMedia Control媒體播放控制
0x183CMesh ProvisioningMesh 配網(wǎng)
0x183DMesh ProxyMesh 代理

3.2 0x2Axx 開(kāi)頭UUID(Characteristic UUID)

0x2Axx (0x2A00 – 0x2AFF) 區(qū)間只能當(dāng) Characteristic UUID , 同上面一樣,反過(guò)來(lái)并不是必須用這個(gè)區(qū)間來(lái)做 Characteristic UUID。

通用與設(shè)備信息

UUID名稱(chēng)典型用途
0x2A00Device Name設(shè)備名稱(chēng),Generic Access 必含
0x2A01Appearance外觀圖標(biāo)(鍵盤(pán)/鼠標(biāo)/溫度計(jì)…)
0x2A04Peripheral Preferred Connection ParametersPPCP,廣播里常用
0x2A05Service ChangedGeneric Attribute 必含,OTA 必備
0x2A19Battery Level電池百分比,0-100
0x2A23System ID8 字節(jié),OUI+Vendor 自編
0x2A24Model Number String型號(hào)
0x2A25Serial Number String序列號(hào)
0x2A26Firmware Revision StringFW 版本
0x2A27Hardware Revision StringHW 版本
0x2A28Software Revision StringSW 版本
0x2A29Manufacturer Name String廠商名

傳感器與運(yùn)動(dòng)類(lèi)(手環(huán)/手表/溫度計(jì))

UUID名稱(chēng)(EN)中文說(shuō)明 / 典型用途
0x2A37Heart Rate Measurement心率測(cè)量值,一次性通知(uint8 flags + 心率 + 能量等)
0x2A38Body Sensor Location身體傳感器位置(0-6:胸、腕、指、手、耳、足、腰)
0x2A39Heart Rate Control Point心率控制點(diǎn),寫(xiě) 0x01 可重置能量消耗累計(jì)
0x2A1CTemperature Measurement溫度測(cè)量結(jié)果(float °C + 時(shí)間戳可選)
0x2A1DTemperature Type測(cè)溫位置類(lèi)型(腋下、體表、直腸等,枚舉 0-9)
0x2A1EIntermediate Temperature中間溫度值,連續(xù)測(cè)溫時(shí)周期性通知
0x2A6EPressure氣壓/壓力值(uint32,分辨率 0.1 Pa)
0x2A6FHumidity相對(duì)濕度(uint16,分辨率 0.01 %)
0x2A6DRainfall降雨量(uint16,分辨率 0.1 mm)
0x2A5BCSC Measurement騎行/步速綜合測(cè)量(輪轉(zhuǎn)速 + 曲柄轉(zhuǎn)數(shù) + 時(shí)間戳)
0x2A5CCSC FeatureCSC 支持特性位域(輪速、曲柄、多傳感等)
0x2A5DSensor Location傳感器安裝位置(曲柄、輪轂、鞋、胸等 0-15)
0x2A63Cycling Power Measurement騎行功率實(shí)時(shí)測(cè)量(功率 W + 可選踏頻、扭矩等)
0x2A64Cycling Power Vector功率矢量(各踏點(diǎn)扭矩、角度等數(shù)組,用于高階騎行分析)
0x2A65Cycling Power Feature功率計(jì)功能位域(扭矩源、矢量、多鏈輪等)
0x2A6CElevation海拔高度(uint24,分辨率 0.1 m)
0x2A6ABattery Power State電池功率狀態(tài)(位域:是否充電、電量充足、低電、臨界等)

電池與電源

UUID名稱(chēng)(EN)中文說(shuō)明 / 典型用途
0x2A19Battery Level電池剩余電量百分比(uint8,0–100)。最常用,單電池場(chǎng)景一條 Characteristic 即可。
0x2A1ABattery Power State電池“功率/狀態(tài)”位域:充電中/放電中/充滿(mǎn)/低電/臨界/故障等;與 0x2A6A 同義,二選一。
0x2A1BBattery Group Info電池組信息:組內(nèi)電池?cái)?shù)量 + 每個(gè)電池的 0/1 狀態(tài)位圖;支持多電池設(shè)備一次性匯報(bào)。

HID 與 DFU(鍵鼠、OTA)

UUID名稱(chēng)(EN)中文說(shuō)明 / 典型用途
0x2A22Boot Keyboard Input Report8 字節(jié)鍵盤(pán)輸入(BIOS 階段),位圖+修飾鍵。
0x2A32Boot Mouse Input Report3 字節(jié)鼠標(biāo)輸入(按鍵+XY 位移)。
0x2A33Boot Mouse Output Report1 字節(jié)主機(jī)→鼠標(biāo)輸出(LED 同步)。
0x2A4AHID InformationHID 版本與特性標(biāo)志(1 字節(jié) country code + 2 字節(jié) flags)。
0x2A4BHID Control Point主機(jī)寫(xiě) 0x00/0x01 讓設(shè)備 suspend/resume;無(wú)響應(yīng),純控制。
0x2A4CHID Protocol Mode切換 Boot Protocol(0x00) 與 Report Protocol(0x01)。
0x2A4DReport(HID)通用輸入/輸出/特征報(bào)告,日常鍵鼠數(shù)據(jù)就靠它。
0x2A4EReport MapHID 用途描述符,主機(jī)先讀它才能解析后續(xù) Report。
0x2AE9Object Action Control PointDFU 控制點(diǎn):執(zhí)行 Create/Execute/Verify/CRC/Abort 等動(dòng)作,寫(xiě)命令+返回響應(yīng)。
0x2AEBObject IDDFU 對(duì)象標(biāo)識(shí)(uint32),例如鏡像編號(hào)、Bank 號(hào)。
0x2AECObject Size(DFU)DFU 對(duì)象總字節(jié)數(shù)(uint32),升級(jí)前主機(jī)先讀。

安全與配對(duì)

UUID名稱(chēng)(EN)中文說(shuō)明 / 典型用途
0x2A3DSupported New Alert Category手機(jī)端支持的新增告警類(lèi)型位圖(郵件、短信、來(lái)電等 0-7 類(lèi))。
0x2A3EAlert Category ID單條告警的類(lèi)別編號(hào)(1 字節(jié)枚舉)。
0x2A3FAlert Category ID Bit Mask批量告警類(lèi)別位掩碼,每位對(duì)應(yīng) 0x2A3E 的一個(gè)類(lèi)別。
0x2A40Alert Level告警級(jí)別:無(wú)(0)、溫和(1)、高(2),用于立即提醒或震動(dòng)。
0x2A41Alert Notification Control Point寫(xiě)命令控制:使能/禁能某類(lèi)告警、立即清除未讀計(jì)數(shù)等。
0x2A42Unread Alert Status未讀計(jì)數(shù)器:類(lèi)別 ID + 未讀條數(shù)(uint8)。
0x2A43New Alert新增告警:類(lèi)別 ID + 字符串內(nèi)容(UTF-8),一次性通知。
0x2A4FScan Refresh掃描刷新:寫(xiě) 0x00 通知外設(shè)“可重新開(kāi)始廣播”,用于減小廣播窗口。
0x2A31Scan Interval Window主機(jī)建議的掃描間隔與窗口(各 2 字節(jié),單位 0.625 ms),外設(shè)可采納以節(jié)電。
0x2A55Bond Management Control Point綁定管理控制點(diǎn):刪除指定綁定、刪除所有綁定、清除密鑰等,寫(xiě)命令+返回結(jié)果。
0x2A56Bond Management Feature綁定管理特性位域:支持刪除單個(gè)/全部/授權(quán)列表等能力標(biāo)志。

3.2.1 鍵盤(pán)鼠標(biāo) UUID 說(shuō)明

記錄到這里,還想說(shuō)明一個(gè)問(wèn)題,我們發(fā)現(xiàn)有的 UUID 在 Service 里面之專(zhuān)門(mén)給某個(gè)東西的,在 Characteristic 里面也有專(zhuān)門(mén)給這個(gè)東西的,比如鍵盤(pán)鼠標(biāo),比如傳感器,為什么 SIG 要在服務(wù)和特征里面“重復(fù)”用 UUID 標(biāo)定?這里專(zhuān)門(mén)分一小節(jié)說(shuō)明一下。

Service 的 0x1812 是 “功能集合” 名稱(chēng) 。
告訴客戶(hù)端“本設(shè)備提供 HID 功能,下面可以放鍵盤(pán)、鼠標(biāo)、消費(fèi)級(jí)遙控器甚至電池報(bào)告。

Characteristic 0x2A22 / 0x2A32 / 0x2A33是 “數(shù)據(jù)槽” 名稱(chēng) 。
告訴客戶(hù)端 “ 這個(gè)槽放的是 Boot 鍵盤(pán)輸入報(bào)告,長(zhǎng)度 8 字節(jié),格式固定 ”。

名字里帶“Keyboard/Mouse”只是告訴你“這條管道按 Boot 協(xié)議走固定格式”;
.
UUID 數(shù)字本身不帶格式,格式由 Report Map Descriptor(UUID 0x2A4E)里那張 80~200 字節(jié)的“小字節(jié)碼”定義。
.
真正決定“是鍵盤(pán)還是鼠標(biāo)”的是 Report Map 描述符,不是 UUID 名字;
那里才寫(xiě)“Usage Page = Generic Desktop,Usage = Keyboard,Report Size = 8,Report Count = 6”。
這個(gè)在后期學(xué)習(xí)鍵盤(pán)鼠標(biāo)報(bào)表的時(shí)候會(huì)遇到。

如果是鍵盤(pán),手機(jī)端展開(kāi) 0x1812 Human Interface Device 服務(wù)后:

HandleUUID角色手機(jī) UI 常見(jiàn)文字
0x00330x2A4EReport Map“Report Map”
0x00360x2A4DReport“Input Report”
0x00390x2A4DReport“Output Report”
0x003C0x2A22Boot Keyboard Input Report“Boot KB In”
0x003F0x2A32Boot Keyboard Output Report“Boot KB Out”
0x00420x2A4AHID Information“HID Information”
0x00450x2A4CProtocol Mode“Protocol Mode”
0x00480x2A4BHID Control Point“Control Point”

→ Service 的 0x1812 只出現(xiàn)在最頂層,
→ 下面的 0x2A4D / 0x2A22 分配在這個(gè) 0x1812 的 Service 下面的不同 Characteristic 上,

手機(jī)端查看層次如下圖所示:
在這里插入圖片描述

還是要再次說(shuō)明,真正告訴手機(jī)“這是鍵盤(pán)”的是 Report Map 里的描述符,不是 UUID。因?yàn)檫@里我們主要討論 UUID ,就不展開(kāi)討論。

3.3 0x29xx 開(kāi)頭UUID(Descriptor UUID)

0x29xx 開(kāi)頭只能當(dāng) Descriptor UUID ,而且描述符 UUID 并不多。截至 Bluetooth v5.4,0x2900 ~ 0x290D 是當(dāng)前已發(fā)布的標(biāo)準(zhǔn)描述符 UUID 。

下面的比上面的記錄多了變量名,是根據(jù)WCH CH585 示例工程中的定義來(lái)列舉的:

變量名(代碼)UUID標(biāo)準(zhǔn)名稱(chēng)(EN)簡(jiǎn)單用途(含必選提示)
charExtPropsUUID0x2900Characteristic Extended Properties擴(kuò)展屬性位;可選
charUserDescUUID0x2901Characteristic User Description用戶(hù)文字說(shuō)明;可選
clientCharCfgUUID0x2902Client Characteristic Configuration開(kāi)/關(guān)通知或指示;通知/指示特征必備
servCharCfgUUID0x2903Server Characteristic Configuration服務(wù)器端廣播指示;極少用
charFormatUUID0x2904Characteristic Presentation Format數(shù)值格式與單位;可選
charAggFormatUUID0x2905Characteristic Aggregate Format組合多個(gè)格式;可選
validRangeUUID0x2906Valid Range合法最小最大值;可選
extReportRefUUID0x2907External Report Reference指向外部服務(wù);HID 可選
reportRefUUID0x2908Report ReferenceReport ID 與類(lèi)型;HID 可選

至于新增加的 0x2908 后面的描述符,大家可自行網(wǎng)上查找。

我們這里看一個(gè)示例架構(gòu),幫助大家理解一下上面的分類(lèi):

在這里插入圖片描述

3.4 0xFFxx開(kāi)頭 UUID(Vendor Specific)

0xFF00 ~ 0xFFFF 區(qū)間為SIG 的公共預(yù)留池(Vendor-Specific 區(qū)間) 任何廠商都可以臨時(shí)借用。

這個(gè)區(qū)間 SIG 作為公共預(yù)留區(qū)間,一般用作示例測(cè)試參考,屬于臨時(shí)方案,想要作為產(chǎn)品,要么去 SIG 申請(qǐng)正式分配,要么直接用 128-bit 自建 UUID。

額外說(shuō)明。使用 16bit UUID 那么久必須保證同一份規(guī)范表里 Service、Characteristic 不能重復(fù)。這是官方文檔規(guī)定好的。

CH585 例程把 0xFFE0 當(dāng) Service,再把 0xFFE1-0xFFE5 當(dāng) Characteristic,作為示例演示使用,如下圖:

在這里插入圖片描述

當(dāng)然,除了 0xFF00 ~ 0xFFFF 區(qū)間,如果想用其他數(shù)值,比如0xCCC0、0xAAA1 這種,他們并不在 SIG 已經(jīng)劃出用途的 “ 固定區(qū)間 ”里,能不能用?會(huì)怎么樣?

首先,單協(xié)議角度看,拿 0xCCC0 / 0xAAA1 當(dāng) Service 或 Characteristic 用,沒(méi)什么問(wèn)題,芯片例程、調(diào)試 Demo 里這么干只要自己知道自己的設(shè)定,也能夠調(diào)試解析。

但是僅限于例程,產(chǎn)品不建議,它們?nèi)允?SIG 的公共編號(hào)池資源,只是目前還沒(méi)輪到給 0xCCC0 分配名字而已,指不定哪天 SIG 把 0xCCC0 分配成“某官方服務(wù)”,你就得跟著改,否則后續(xù)過(guò)認(rèn)證、做 BQB 測(cè)試就會(huì)出問(wèn)題。

做產(chǎn)品最規(guī)范的途徑只有兩條:

  • 去 SIG 花錢(qián)申請(qǐng)正式分配(16/32-bit);
  • 直接用 128-bit 自建 UUID。

所以 0xCCC0、0xAAA1 這種臨時(shí)使用可以,本質(zhì)上和 0xFF00 ~ 0xFFFF 的公共預(yù)留區(qū)差不多,屬于 SIG 公共編號(hào)區(qū),目前沒(méi)人使用,但是隨時(shí)可能有用。

還要記住,整個(gè) 16-bit 空間都由 Bluetooth SIG 的官方文檔 《16-bit UUID Numbers Document》統(tǒng)一管理, 所有的 16-bit 空間 ?。?! 所有的 16-bit 空間 !?。?/p>

經(jīng)過(guò)上面的說(shuō)明相信大家以后在看到藍(lán)牙設(shè)備的 UUID ,能夠清楚的識(shí)別是什么類(lèi)型。

四、WCH 藍(lán)牙示例中 UUID 對(duì)應(yīng)體現(xiàn)

最后一小節(jié)我們來(lái)簡(jiǎn)單看看一下在 WCH 藍(lán)牙芯片例程中與 UUID 相關(guān)的地方。

我們打開(kāi)從機(jī)工程:

在這里插入圖片描述

詳細(xì)的從機(jī)例程會(huì)有對(duì)應(yīng)的從機(jī)示例解析博文(博主還沒(méi)寫(xiě)= =! 等寫(xiě)了以后放上鏈接,大家可以自己查看網(wǎng)上其他資料~)

我們要看的地方是static gattAttribute_t simpleProfileAttrTbl[] 這個(gè)數(shù)組,因?yàn)樗苯雍臀覀兪謾C(jī)連接上設(shè)備看到的框架圖對(duì)應(yīng)起來(lái)。

4.1 0x28XX 開(kāi)頭UUID

在第一欄我們就能看到一個(gè)名為primaryServiceUUID 的東西,但是跳轉(zhuǎn)過(guò)去,我們是找不到這個(gè)定義的,因?yàn)樗且粋€(gè)指針,指向一個(gè) UUID 的地址,但是這個(gè)地址是一個(gè) Flash 的固定地址,就等于說(shuō),CH585 示例種這個(gè) UUID 數(shù)據(jù)是燒錄完后就會(huì)保存在固定地址的一個(gè)數(shù)據(jù)。

既然官方都定義為 UUID ,而且固定起來(lái)了,說(shuō)明他肯定是標(biāo)準(zhǔn)的 UUID ,于是上網(wǎng)查了一下:

0x28xx 一共只有 4 個(gè)(SIG 已全部分配完畢),它們是 GATT 的“骨架”UUID,永遠(yuǎn)不參與用戶(hù)數(shù)據(jù),只用來(lái)告訴客戶(hù)端我這條屬性是干什么的:這里是服務(wù)頭 / 特征頭 / 引用頭。

16-bit名字在屬性表里的作用
0x2800Primary Service“一個(gè)主服務(wù)開(kāi)始了”
0x2801Secondary Service“一個(gè)次級(jí)服務(wù)開(kāi)始了” (極少用)
0x2802Include“這里包含另一個(gè)服務(wù)” (跨服務(wù)引用)
0x2803Characteristic“后面跟的是一條特征”

在示例代碼中的體現(xiàn):

在這里插入圖片描述

在有些地方會(huì)有如下定義:

/**
 * GATT Declarations
 */
#define GATT_PRIMARY_SERVICE_UUID       0x2800 // Primary Service
#define GATT_SECONDARY_SERVICE_UUID     0x2801 // Secondary Service
#define GATT_INCLUDE_UUID               0x2802 // Include
#define GATT_CHARACTER_UUID             0x2803 // Characteristic

不參與用戶(hù)數(shù)據(jù),作為框架存在,所以我們?cè)谑謾C(jī)端是看不到這幾個(gè) UUID 的,但是我們?cè)跉v程中,定義的時(shí)候確實(shí)是需要用到,而且位置是固定的,用的時(shí)候照抄常量,我們只需要記?。?/p>

  • 0x2800 只放在 服務(wù)第一行
  • 0x2803 只放在 每條特征第一行

如下:

// 1. 主服務(wù)聲明 → UUID 用 0x2800
{
  {ATT_BT_UUID_SIZE, primaryServiceUUID},   // type = 0x2800
  GATT_PERMIT_READ,
  0,
  (uint8_t *)&devInfoService        // 值 = 0x180A
},

// 2. 每條特征必須先放 0x2803 聲明
{
  {ATT_BT_UUID_SIZE, characterUUID},        // type = 0x2803
  GATT_PERMIT_READ,
  0,
  &devInfoMfrNameProps                      // 屬性+句柄+真正UUID
},

4.2 示例對(duì)應(yīng)圖

我們這里上一下從機(jī)示例中的個(gè)人做的分析框圖,這些會(huì)在我的從機(jī)服務(wù)分析文章中內(nèi)容有詳細(xì)說(shuō)明,由于涉及到了 UUID,這里也放一遍加深印象。

首先是整體的框架圖:

在這里插入圖片描述
還有服務(wù) UUID 和 特征 UUID 在程序中定義方式是不同的,如下圖:

在這里插入圖片描述

這里還有一個(gè)簡(jiǎn)單的框架示例程序,幫助大家加深印象:

// 1. 0x28xx 骨架 UUID
const uint8_t primaryServiceUUID[2]    = { 0x00, 0x28 };
const uint8_t characterUUID[2]         = { 0x03, 0x28 };

// 2. 0x180x 服務(wù) UUID
const uint8_t envServUUID[2]           = { 0x1A, 0x18 };   // 0x181A

// 3. 0x2Axx 特征 UUID
const uint8_t tempUUID[2]              = { 0x6E, 0x2A };
const uint8_t humiUUID[2]              = { 0x6F, 0x2A };
const uint8_t battUUID[2]              = { 0x19, 0x2A };

// 4. 0x29xx 描述符 UUID
const uint8_t descCCC[2]               = { 0x02, 0x29 };
const uint8_t descUser[2]              = { 0x01, 0x29 };
const uint8_t descFormat[2]            = { 0x03, 0x29 };

// 5. 屬性表 —— 與上面 0~9 行一一對(duì)應(yīng)
static gattAttribute_t envAttrTbl[] = {
  /*0*/ {{ATT_BT_UUID_SIZE, primaryServiceUUID}, GATT_PERMIT_READ, 0, (uint8_t *)&envService},
  /*1*/ {{ATT_BT_UUID_SIZE, characterUUID},    GATT_PERMIT_READ, 0, &tempProps},
  /*2*/ {{ATT_BT_UUID_SIZE, tempUUID},         GATT_PERMIT_READ, 0, (uint8_t *)&tempVal},
  /*3*/ {{ATT_BT_UUID_SIZE, descCCC},          GATT_PERMIT_READ|GATT_PERMIT_WRITE, 0, (uint8_t *)tempCCC},
  /*4*/ {{ATT_BT_UUID_SIZE, characterUUID},    GATT_PERMIT_READ, 0, &humiProps},
  /*5*/ {{ATT_BT_UUID_SIZE, humiUUID},         GATT_PERMIT_READ, 0, (uint8_t *)&humiVal},
  /*6*/ {{ATT_BT_UUID_SIZE, characterUUID},    GATT_PERMIT_READ, 0, &battProps},
  /*7*/ {{ATT_BT_UUID_SIZE, battUUID},         GATT_PERMIT_READ, 0, (uint8_t *)&battVal},
  /*8*/ {{ATT_BT_UUID_SIZE, descUser},         GATT_PERMIT_READ, 0, (uint8_t *)battUserDesc},
  /*9*/ {{ATT_BT_UUID_SIZE, descFormat},       GATT_PERMIT_READ, 0, (uint8_t *)battFormat}
};

結(jié)語(yǔ)

本文詳細(xì)的說(shuō)明了一下 BLE 藍(lán)牙的 UUID,應(yīng)該算是特別全面了。

最后再總結(jié)一下:

  • 0x280x 只當(dāng)“標(biāo)簽”,對(duì)用戶(hù)不可見(jiàn)
  • 0x180x / 0x2Axx 是用戶(hù)數(shù)據(jù)分別對(duì)應(yīng)服務(wù)(0x180x)和特征(0x2Axx)
  • 0x29xx 只是附加說(shuō)明
  • 其他沒(méi)有定義的區(qū)間,測(cè)試可以臨時(shí)用
  • 所有的16-bit UUID 都由 SIG 的官方文檔 《16-bit UUID Numbers Document》統(tǒng)一管理
  • 自定義的 128-bit UUID,服務(wù) UUID 可以和 特征 UUID 一樣,16-bit 的服務(wù)和特征值的 UUID 不能一樣
  • 同一設(shè)備,不同特征 UUID 任何時(shí)候都不能一樣

好了,本文就到這里吧,謝謝大家! <3 △ <3

審核編輯 黃宇

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 藍(lán)牙
    +關(guān)注

    關(guān)注

    119

    文章

    6399

    瀏覽量

    179368
  • BLE
    BLE
    +關(guān)注

    關(guān)注

    13

    文章

    813

    瀏覽量

    66594
  • UUID
    +關(guān)注

    關(guān)注

    0

    文章

    25

    瀏覽量

    8613
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    關(guān)于藍(lán)牙UUID

    藍(lán)牙的各個(gè)服務(wù)的UUID怎么查詢(xún)?像血壓,血糖,心率等都有固定的UUID,測(cè)量體重(weight scale profile)的UUID是多少?
    發(fā)表于 08-20 18:12

    如何給BLE添加新的uuid?

    如題,如何給BLE添加新的uuid?// Register with Link DB to receive link status change callbackVOID
    發(fā)表于 04-06 10:43

    ESP32 BLE藍(lán)牙使用AT指令與其他BLE藍(lán)牙模塊透?jìng)鞯姆椒?/a>

    提示:文章寫(xiě)完后,目錄可以自動(dòng)生成,如何生成可參考右邊的幫助文檔ESP32 BLE藍(lán)牙 使用AT指令與其他BLE藍(lán)牙模塊透?jìng)?配置教程前言
    發(fā)表于 01-27 06:57

    CH579藍(lán)牙BLE主機(jī)用SIMPLEPROFILE_CHAR4_UUID寫(xiě)入失敗是為什么?

    CH579藍(lán)牙BLE主機(jī)用例程默認(rèn)SIMPLEPROFILE_CHAR1_UUID寫(xiě)入就可以,改為SIMPLEPROFILE_CHAR4_UUID寫(xiě)入就不行,麻煩看下要怎么修改才可以用
    發(fā)表于 08-11 07:30

    【FireBeetle 2 ESP32-S3開(kāi)發(fā)板體驗(yàn)】藍(lán)牙BLE控制LED

    、目的 使用Micropython開(kāi)發(fā),控制FireBeetle 2 ESP32-S3開(kāi)發(fā)板上的藍(lán)牙,從而與手機(jī)APP通信。 二、BLE 藍(lán)牙通訊技術(shù)不必多贅述。
    發(fā)表于 08-03 13:30

    讀懂藍(lán)牙低功耗BLE的應(yīng)用市場(chǎng)

    藍(lán)牙低功耗BLE(Bluetooth Low Energy)技術(shù),也稱(chēng)為Bluetooth? Smart,從藍(lán)牙V4.0開(kāi)始作為核心規(guī)范的部分,顧名思義,它可以滿(mǎn)足小型電池供電的設(shè)備
    發(fā)表于 05-10 11:38 ?9次下載

    詳細(xì)介紹ble藍(lán)牙4.2模塊的基本特征和參數(shù)

    詳細(xì)介紹ble藍(lán)牙4.2模塊的基本特征和參數(shù)。目前市面上還沒(méi)有 ble 藍(lán)牙 5.0 模塊,
    發(fā)表于 02-09 09:34 ?13次下載

    總結(jié)ble藍(lán)牙透?jìng)髂K可以實(shí)現(xiàn)哪些功能支持

    總結(jié)ble藍(lán)牙透?jìng)髂K可以實(shí)現(xiàn)哪些功能支持。藍(lán)牙模塊又叫藍(lán)牙透?jìng)髂K,是
    發(fā)表于 02-09 09:45 ?16次下載

    知道BLE5.0藍(lán)牙模塊的區(qū)別

    藍(lán)牙模塊的種類(lèi)非常多,從芯片方案到藍(lán)牙協(xié)議,通信距離,工作頻率,功能特點(diǎn)等各不相同,今天主要針對(duì)BLE5.0藍(lán)牙模塊的區(qū)別進(jìn)行簡(jiǎn)單的介紹,方便大家選購(gòu)和使用。
    的頭像 發(fā)表于 11-17 16:48 ?8437次閱讀

    關(guān)于藍(lán)牙服務(wù)UUID自定義的簡(jiǎn)單介紹

    目前市面流行的在BLE應(yīng)用中,UUID“Universally Unique Identifier”用于標(biāo)識(shí)藍(lán)牙服務(wù)以及通訊特征訪(fǎng)問(wèn)屬性,不同的藍(lán)牙服務(wù)和屬性使用不同的訪(fǎng)問(wèn)方法,就像人
    發(fā)表于 01-29 15:17 ?5716次閱讀

    ESP32 BLE藍(lán)牙 使用AT指令與其他BLE藍(lán)牙模塊透?jìng)?配置教程

    提示:文章寫(xiě)完后,目錄可以自動(dòng)生成,如何生成可參考右邊的幫助文檔ESP32 BLE藍(lán)牙 使用AT指令與其他BLE藍(lán)牙模塊透?jìng)?配置教程前言
    發(fā)表于 12-03 17:36 ?44次下載
    ESP32 <b class='flag-5'>BLE</b><b class='flag-5'>藍(lán)牙</b> 使用AT指令與其他<b class='flag-5'>BLE</b><b class='flag-5'>藍(lán)牙</b>模塊透?jìng)?配置教程

    低功耗藍(lán)牙模塊(BLE),智能家居/消費(fèi)類(lèi)電子應(yīng)用廣泛

    在物聯(lián)網(wǎng)產(chǎn)業(yè)中,藍(lán)牙BLE低功耗應(yīng)用開(kāi)發(fā),都會(huì)涉及到UUID,用于標(biāo)識(shí)藍(lán)牙服務(wù)以及通訊特征訪(fǎng)問(wèn)屬性。低功耗
    的頭像 發(fā)表于 09-15 18:53 ?2908次閱讀
    低功耗<b class='flag-5'>藍(lán)牙</b>模塊(<b class='flag-5'>BLE</b>),智能家居/消費(fèi)類(lèi)電子應(yīng)用廣泛

    讀懂,什么是BLE?

    讀懂,什么是BLE
    的頭像 發(fā)表于 11-27 17:11 ?4880次閱讀
    <b class='flag-5'>一</b><b class='flag-5'>文</b>讀懂,什么是<b class='flag-5'>BLE</b>?

    看懂BLE Mesh

    看懂BLE Mesh
    的頭像 發(fā)表于 12-06 16:24 ?2813次閱讀
    <b class='flag-5'>一</b><b class='flag-5'>文</b>看懂<b class='flag-5'>BLE</b> Mesh

    藍(lán)牙打印機(jī)電路怎么設(shè)計(jì)?芯片如何選型?APP和小程序的BLE通訊協(xié)議如何制定?

    藍(lán)牙芯片通訊的BLE協(xié)議怎么制定?藍(lán)牙BLE芯片如何選型?給你講解清楚
    的頭像 發(fā)表于 09-08 10:02 ?1413次閱讀
    <b class='flag-5'>藍(lán)牙</b>打印機(jī)電路怎么設(shè)計(jì)?芯片如何選型?APP和小程序的<b class='flag-5'>BLE</b>通訊協(xié)議如何制定?
    五寨县| 威海市| 文化| 东乡县| 黄梅县| 托克托县| 九龙城区| 安仁县| 平潭县| 茂名市| 当阳市| 开江县| 武平县| 法库县| 拉萨市| 永和县| 平乐县| 成都市| 砚山县| 棋牌| 东乡| 东丽区| 临沭县| 建平县| 大理市| 金华市| 福建省| 通海县| 高淳县| 融水| 怀宁县| 那坡县| 平陆县| 鄂州市| 南郑县| 都匀市| 鹤壁市| 洪洞县| 册亨县| 临泽县| 铜梁县|