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

基于flutter_blue_plus实现Flutter与ESP32的BLE数据发送问题

Flutter连接ESP32后发送BLE数据的实现方法

BLE通信的核心是通过服务UUID和可写特征UUID定位到ESP32的接收端点,以下是具体实现步骤:

1. 确认ESP32端的关键UUID

从ESP32的BLE代码中找到你定义的服务UUID和可写特征UUID,或者用BLE扫描器获取这两个值(你已验证接收功能正常,这两个值肯定存在)。

2. 扩展连接逻辑,获取可写特征

修改你原有的连接函数,在连接成功后发现设备服务并筛选出目标可写特征:

import 'dart:convert';
import 'package:flutter_blue_plus/flutter_blue_plus.dart';

BluetoothCharacteristic? _writeCharacteristic; // 保存可写特征

Future<bool> connectToDevice(String bleAddress, String targetServiceUuid, String targetCharUuid) async {
  try {
    final device = BluetoothDevice(remoteId: DeviceIdentifier(bleAddress));
    await device.connect();
    print('Connected to $bleAddress');

    // 发现设备所有BLE服务
    List<BluetoothService> services = await device.discoverServices();
    
    // 筛选目标服务
    BluetoothService targetService = services.firstWhere(
      (service) => service.serviceUuid.toString() == targetServiceUuid,
      orElse: () => throw Exception('目标服务未找到'),
    );
    
    // 筛选具备写入权限的目标特征
    _writeCharacteristic = targetService.characteristics.firstWhere(
      (char) => char.characteristicUuid.toString() == targetCharUuid && char.properties.write,
      orElse: () => throw Exception('可写特征未找到'),
    );

    return true;
  } catch (e) {
    print('连接或服务发现失败: $e');
    return false;
  }
}

3. 实现数据发送函数

基于获取到的可写特征,编写发送数据的函数:

Future<void> sendDataToESP32(String data) async {
  if (_writeCharacteristic == null) {
    print('请先连接设备并获取可写特征');
    return;
  }
  try {
    // 将字符串转为Uint8List(编码格式需与ESP32端一致,这里用UTF-8)
    Uint8List bytes = utf8.encode(data);
    await _writeCharacteristic!.write(bytes);
    print('数据发送成功: $data');
  } catch (e) {
    print('数据发送失败: $e');
  }
}

注意事项

  • 替换代码中的targetServiceUuid和targetCharUuid为ESP32端实际使用的UUID。
  • 数据编码需与ESP32的接收逻辑匹配,比如ESP端用ASCII接收的话,就用ascii.encode(data)。
  • 确保ESP32端的特征配置了可写权限(ESP代码中需设置BLECharacteristic::PROPERTY_WRITE)。

内容的提问来源于stack exchange,提问作者Yolo-cell-hash

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 11:03:16