You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ESP32 GATT Server中esp_gatt_srvc_id_t与esp_ble_adv_data_t服务UUID差异

ESP32 GATT Server:两种服务UUID的差异与作用解析

一、核心差异

  • esp_gatt_srvc_id_t 中的UUID:是GATT服务的实际身份标识,属于GATT层定义。它是设备上运行的GATT服务的"身份证",只有在BLE连接建立后才会被客户端读取。
  • esp_ble_adv_data_t 中的UUID:是广播数据里的服务宣告,属于GAP层定义。它是设备在未连接时对外"喊"的口号,告诉周围的扫描设备:我支持这个服务。

二、适用场景

  • esp_gatt_srvc_id_t UUID:
    • 调用esp_ble_gatts_create_service()时必须传入,用来创建具体的GATT服务实例,没有它就没法生成可交互的服务。
    • 连接建立后,客户端通过GATT服务发现流程获取这个UUID,进而和服务下的特征值做读写、通知等交互操作。
  • esp_ble_adv_data_t UUID:
    • 配置到广播数据中,设备处于可发现状态时,扫描端(比如手机BLE调试工具)不用连接就能看到设备支持的服务类型。
    • 用于设备筛选:比如你的APP只需要找带"温湿度服务"UUID的设备,就可以设置扫描过滤,只接收符合条件的广播包。

三、是否为连接必需

  • esp_gatt_srvc_id_t UUID:连接后交互必需,如果不创建带这个UUID的GATT服务,客户端连上来也找不到任何可操作的服务,连接毫无意义;但单纯建立BLE连接本身不需要它(连接是GAP层的流程)。
  • esp_ble_adv_data_t UUID:非连接必需,就算广播里不带这个UUID,设备照样能被扫描到并建立连接,只是扫描端没法提前知道设备能提供什么服务,得连上去之后自己发现。

四、已有GATT服务UUID时,广播UUID的作用

就算你已经用esp_gatt_srvc_id_t创建了GATT服务,广播里的UUID依然有用:

  1. 快速识别:扫描设备不用连接就能知道设备的功能,比如手机APP一眼就看出这是个蓝牙门锁设备。
  2. 提升扫描效率:客户端可以设置过滤规则,只捡包含目标UUID的广播包,不用处理一大堆无关设备的广播。
  3. 优化用户体验:在调试工具或APP的设备列表里,直接显示服务类型,用户不用挨个连接去查设备能力。

内容的提问来源于stack exchange,提问作者Anushiya

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 15:52:15