ESP32-BLE2MQTT广播器支持详解:iBeacon、Eddystone与小米传感器

【免费下载链接】esp32-ble2mqtt A BLE to MQTT bridge running on an ESP32 【免费下载链接】esp32-ble2mqtt 项目地址: https://gitcode.com/gh_mirrors/es/esp32-ble2mqtt

ESP32-BLE2MQTT是一款运行在ESP32上的BLE转MQTT桥接工具,能够将蓝牙低功耗设备的广播数据无缝转换为MQTT消息,实现物联网设备的互联互通。本文将详细介绍其对iBeacon、Eddystone标准广播协议以及小米传感器的完整支持方案,帮助用户快速实现各类BLE设备的数据采集与集成。

核心广播协议支持概述

ESP32-BLE2MQTT通过模块化设计实现了对多种主流BLE广播协议的支持,其核心实现位于main/broadcasters.c文件中。系统采用统一的广播器操作接口(broadcaster_ops_t),为每种协议提供标准化的检测、元数据解析和数据转换功能。目前已支持的广播类型包括:

  • iBeacon:苹果公司推出的 proximity 信标协议
  • Eddystone:谷歌开发的多帧类型广播协议(UID/URL/TLM)
  • 小米传感器:小米生态链设备专用的MiBeacon协议
  • 第三方固件:支持ATC1441和PVVX等开源固件的小米温湿度传感器

iBeacon协议深度解析

协议结构与数据格式

iBeacon协议采用苹果公司定义的制造商特定数据格式,其数据结构在main/broadcasters.c中定义为:

typedef struct {
    uint16_t company_id;      // 0x004C (苹果公司ID)
    uint16_t beacon_type;     // 0x1502 (iBeacon类型标识)
    uint8_t proximity_uuid[16]; // 唯一标识符
    uint16_t major;           // 主标识符
    uint16_t minor;           // 次标识符
    int8_t measured_power;    // 1米处的信号强度
} __attribute__((packed)) ibeacon_t;

关键功能实现

ESP32-BLE2MQTT对iBeacon的支持包括:

  1. 设备检测:通过验证公司ID(0x004C)和信标类型(0x1502)实现iBeacon设备识别(main/broadcasters.c#L89-L90)

  2. 元数据解析:提取UUID、Major、Minor参数,并基于信号强度计算距离:

    sprintf(s, "%.2f", pow(10, (beacon->measured_power - rssi) / 20.0));
    cb("Distance", s, ctx);  // 距离计算实现
    
  3. 数据转换:将解析后的参数通过MQTT主题发布,典型输出格式为:

    {
      "UUID": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
      "Major": "1234",
      "Minor": "5678",
      "Distance": "2.50"
    }
    

Eddystone多帧类型支持

协议家族与帧结构

Eddystone协议提供三种主要帧类型,ESP32-BLE2MQTT在main/broadcasters.c#L115-L149中定义了完整的数据结构:

  • UID帧:用于标识唯一设备,包含10字节命名空间和6字节实例ID
  • URL帧:用于广播URL地址,支持协议前缀和域名缩写编码
  • TLM帧:用于传输信标状态数据,包括电池电压、温度和运行时间

URL帧特殊处理

URL帧采用特殊的编码方式以节省广播包大小,系统在main/broadcasters.c#L212-L248中实现了完整的URL解码功能:

static char *eddystone_url_scheme_get(uint8_t url_scheme) {
    if (url_scheme == 0) return "http://www.";
    if (url_scheme == 1) return "https://www.";
    if (url_scheme == 2) return "http://";
    if (url_scheme == 3) return "https://";
    // ... 其他编码处理
}

解码后的URL将通过"URL"字段发布,例如将编码后的0x03 0x67 0x6f 0x6f 0x67 0x6c 0x65转换为"https://google"。

TLM帧数据提取

TLM帧提供信标运行状态监测,系统从广播数据中提取关键信息:

sprintf(s, "%d", be16toh(eddystone->u.tlm.vbatt));
cb("Voltage", s, ctx);  // 电池电压(mV)
sprintf(s, "%d.%02ld", (int8_t)(temp >> 8), lround((temp & 0xff) * 100 / 256.0));
cb("Temperature", s, ctx);  // 温度(°C)

小米传感器全面支持

协议特点与设备覆盖

ESP32-BLE2MQTT实现了对小米MiBeacon协议的完整支持,覆盖多种流行传感器:

  • 温湿度传感器:LYWSDCGQ、LYWSD02、LYWSD03MMC
  • 植物传感器:HHCCJCY01(MiFlora)、GCLS002
  • 运动传感器:RTCGQ02LM(人体红外传感器)
  • 门窗传感器:MCCGQ02HL

协议实现位于main/broadcasters.c#L323-L616,通过服务UUID(0xFE95)识别小米设备。

数据解密支持

部分小米设备采用加密广播数据,系统使用mbedtls库实现CCM模式解密:

ret = mbedtls_ccm_auth_decrypt(&ctx, crypt_len, nonce, sizeof(nonce),
    aad, sizeof(aad), payload_start, decrypted,
    (uint8_t *)mijia_header + len - 4, 4);

用户需在配置文件中提供设备加密密钥,密钥管理通过config_ble_mikey_get函数实现。

传感器数据解析

系统能够解析多种传感器数据类型,包括:

  • 温湿度数据(类型0x0D):

    sprintf(s, "%.1f", (int16_t)le16toh(*(uint16_t *)mijia_data_entry->data) / 10.0);
    cb("Temperature", s, ctx);
    sprintf(s, "%.1f", le16toh(*(uint16_t *)(mijia_data_entry->data + 2)) / 10.0);
    cb("Humidity", s, ctx);
    
  • 光照强度(类型0x07):

    uint32_t val = mijia_data_entry->data[0] | (mijia_data_entry->data[1] << 8) | (mijia_data_entry->data[2] << 16);
    sprintf(s, "%" PRIu32, val);
    cb("Illuminance", s, ctx);
    
  • 土壤湿度(类型0x08/0x14):

    sprintf(s, "%u", *mijia_data_entry->data);
    cb("Moisture", s, ctx);
    

第三方固件扩展支持

ESP32-BLE2MQTT特别支持刷写第三方固件的小米温湿度传感器,包括:

ATC1441固件

ATC1441固件是针对LYWSD03MMC传感器的开源固件,系统在main/broadcasters.c#L690-L764中实现了数据解析,支持温度、湿度、电池电量和电压等参数的提取。

PVVX固件

PVVX固件提供更多高级功能,系统在main/broadcasters.c#L766-L840中实现了解析,支持更高精度的温湿度数据(小数点后两位)。

快速开始与配置指南

准备工作

  1. 硬件要求:ESP32开发板(推荐ESP32-C3或ESP32-S3)
  2. 开发环境:ESP-IDF 4.4及以上版本
  3. 源码获取
    git clone https://gitcode.com/gh_mirrors/es/esp32-ble2mqtt
    

核心配置文件

广播器相关配置主要通过以下文件进行:

典型应用场景

  1. 环境监测系统:集成多个小米温湿度传感器,实时监测室内环境
  2. 资产追踪:利用iBeacon的距离计算功能实现资产定位
  3. 智能办公:通过Eddystone URL广播提供位置相关信息
  4. 智慧农业:使用MiFlora传感器监测植物生长环境

结语

ESP32-BLE2MQTT通过灵活的模块化设计,为各类BLE广播设备提供了强大的支持能力。无论是标准的iBeacon/Eddystone协议设备,还是小米生态链传感器,都能通过简单配置实现数据的采集与MQTT集成。项目的开源特性也使得用户可以轻松扩展对新设备和协议的支持,为物联网应用开发提供了高效解决方案。

【免费下载链接】esp32-ble2mqtt A BLE to MQTT bridge running on an ESP32 【免费下载链接】esp32-ble2mqtt 项目地址: https://gitcode.com/gh_mirrors/es/esp32-ble2mqtt

Logo

智能硬件社区聚焦AI智能硬件技术生态,汇聚嵌入式AI、物联网硬件开发者,打造交流分享平台,同步全国赛事资讯、开展 OPC 核心人才招募,助力技术落地与开发者成长。

更多推荐