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

如何在ESP32上使用NimBLE蓝牙库接收蓝牙串口数据?

使用NimBLE库在ESP32上接收蓝牙数据并打印

要实现通过NimBLE接收蓝牙发来的字符串并打印,核心是给BLE特征值配置可写属性,并通过回调函数处理接收到的数据。以下是完整实现步骤和代码:

关键实现逻辑

  • 给Characteristic配置可写权限,支持客户端写入数据
  • 自定义回调类,重写onWrite方法捕获并处理收到的数据
  • 将回调绑定到目标Characteristic,启动服务并开启广播等待连接

完整代码示例

#include "NimBLEDevice.h"

// 自定义特征值回调类,处理写入的数据
class MyCharacteristicCallbacks : public NimBLECharacteristicCallbacks {
    void onWrite(NimBLECharacteristic *pCharacteristic) override {
        // 获取接收到的字符串
        std::string receivedData = pCharacteristic->getValue();
        
        if (!receivedData.empty()) {
            // 打印接收到的数据
            printf("收到蓝牙数据:%s\n", receivedData.c_str());
        }
    }
};

void app_main(void) {
    // 初始化BLE设备,设置设备名称
    NimBLEDevice::init("ESP32_NimBLE");

    // 创建BLE服务器
    NimBLEServer *pServer = NimBLEDevice::createServer();
    
    // 创建BLE服务(UUID:"ABCD")
    NimBLEService *pService = pServer->createService("ABCD");
    
    // 创建特征值,配置可写+可读属性
    // WRITE_NR表示无需响应的写入,适合串口类连续数据传输;若需可靠传输可改用WRITE
    NimBLECharacteristic *pCharacteristic = pService->createCharacteristic(
        "1234",
        NIMBLE_PROPERTY::WRITE_NR | NIMBLE_PROPERTY::READ
    );
    
    // 绑定自定义回调到特征值
    pCharacteristic->setCallbacks(new MyCharacteristicCallbacks());
    
    // 启动BLE服务
    pService->start();
    
    // 开启广播,让客户端能搜索到设备
    NimBLEAdvertising *pAdvertising = NimBLEDevice::getAdvertising();
    pAdvertising->addServiceUUID("ABCD");
    pAdvertising->start();
}

代码关键点说明

  1. 特征值属性:NIMBLE_PROPERTY::WRITE_NR允许客户端无响应发送数据,适合串口类数据传输;如果需要确保数据送达,可替换为NIMBLE_PROPERTY::WRITE(需要ESP32回复确认)。
  2. 回调触发:当客户端向该特征值写入数据时,onWrite方法会自动执行,通过pCharacteristic->getValue()可直接获取发送的字符串。
  3. 广播配置:必须启动广播并添加服务UUID,否则客户端无法搜索到ESP32设备。

测试时,用BLE调试工具(如nRF Connect)连接ESP32,找到UUID为ABCD的服务和1234的特征值,向其写入字符串,ESP32的串口控制台就会打印出收到的数据。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 18:45:30