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

如何在树莓派或ESP32上克隆BLE原始广播数据?

精准克隆BLE广播原始数据的实现方法(ESP32/树莓派)

ESP32 Arduino 实现

常规的BLEBeacon等封装类会自动生成广告结构,要精准克隆原始数据,需要直接操作BLE广告的原始字节序列,绕开库的自动生成逻辑:

  1. 抓取目标遥控器的完整原始广播数据
    用nRF Connect等工具扫描遥控器,复制其广播包的完整Hex字节序列(包括所有AD结构的长度、类型、数据)。

  2. 编写直接发送原始数据的代码
    调用BLE库的setData方法,直接传入原始字节数组,示例代码如下:

    #include <BLEDevice.h>
    #include <BLEUtils.h>
    #include <BLEServer.h>
    
    void setup() {
      Serial.begin(115200);
      BLEDevice::init(""); // 无需设置设备名,直接复用原始数据中的内容
    
      BLEServer* pServer = BLEDevice::createServer();
      BLEAdvertising* pAdvertising = pServer->getAdvertising();
    
      // 替换为你抓取到的遥控器原始广播Hex字节
      uint8_t rawAdvData[] = {0x18, 0xF9, 0x01, 0x02, 0x03, 0x04, 0x05};
      BLEAdvertisementData advData;
      // 将字节数组转为string传入setData,直接覆盖自动生成的广告内容
      advData.setData(std::string((char*)rawAdvData, sizeof(rawAdvData)));
    
      pAdvertising->setAdvertisementData(advData);
    
      // 如果遥控器有扫描响应数据,同样用此方式设置
      // uint8_t rawScanRespData[] = {0x0A, 0x09, 0x52, 0x65, 0x6D, 0x6F, 0x74, 0x65, 0x52, 0x63};
      // BLEAdvertisementData scanRespData;
      // scanRespData.setData(std::string((char*)rawScanRespData, sizeof(rawScanRespData)));
      // pAdvertising->setScanResponseData(scanRespData);
    
      pAdvertising->start();
      Serial.println("已启动BLE广播,发送原始克隆数据");
    }
    
    void loop() {
      delay(1000);
    }
    

树莓派 实现

利用BlueZ工具直接发送原始广告数据,有两种常用方式:

方式1:使用hcitool(适合旧版BlueZ)

  1. 先停止蓝牙服务避免冲突:
    sudo systemctl stop bluetooth
    
  2. 启用蓝牙适配器:
    sudo hciconfig hci0 up
    
  3. 设置原始广告数据(替换为你抓取的Hex字节,注意空格分隔):
    sudo hcitool -i hci0 cmd 0x08 0x0008 18 F9 01 02 03 04 05
    
    其中0x08 0x0008是HCI设置广告数据的命令,后面的字节为原始广播内容。
  4. 启动广播:
    sudo hcitool -i hci0 cmd 0x08 0x000A 00
    
    (参数00表示开启广播,01为关闭)

方式2:使用bluetoothctl(推荐,新版BlueZ支持)

进入bluetoothctl交互模式操作:

sudo bluetoothctl
power on
advertise off
# 传入原始Hex字节,用冒号分隔
advertise raw 18:F9:01:02:03:04:05
advertise on

关键注意事项

  • 确保抓取的原始数据是完整的BLE广告包,包含所有AD结构(长度+类型+数据),否则广播会无效。
  • ESP32需使用较新版本的Arduino BLE库,避免setData方法兼容性问题。
  • 树莓派若遇到权限问题,需确保操作时使用sudo,或配置蓝牙适配器的权限。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 09:27:42