Flutter蓝牙通信插件flutter_reactive_ble_backend的使用

Flutter蓝牙通信插件flutter_reactive_ble_backend的使用

在开发基于Flutter的应用程序时,如果您需要实现蓝牙通信功能,可以考虑使用flutter_reactive_ble_backend插件。该插件提供了强大的API来管理蓝牙设备的连接、数据传输等操作。

以下是详细的使用步骤和完整示例代码:


使用步骤

  1. 添加依赖
    pubspec.yaml文件中添加以下依赖项:

    dependencies:
      flutter_reactive_ble_backend: ^0.1.0
    
  2. 初始化插件
    创建一个FlutterReactiveBleCentral实例,并通过FlutterReactiveBle作为后端。

  3. 扫描蓝牙设备
    使用插件提供的API来扫描附近的蓝牙设备。

  4. 连接设备
    扫描到目标设备后,可以尝试连接设备并进行数据交互。

  5. 断开连接
    完成通信后,记得断开与设备的连接。


完整示例代码

以下是一个完整的示例代码,展示如何使用flutter_reactive_ble_backend插件进行蓝牙通信。

import 'package:flutter/material.dart';
import 'package:flutter_reactive_ble_backend/flutter_reactive_ble_backend.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: BluetoothCommunication(),
    );
  }
}

class BluetoothCommunication extends StatefulWidget {
  [@override](/user/override)
  _BluetoothCommunicationState createState() => _BluetoothCommunicationState();
}

class _BluetoothCommunicationState extends State<BluetoothCommunication> {
  final FlutterReactiveBleCentral bleCentral = FlutterReactiveBleCentral(backend: FlutterReactiveBle());

  [@override](/user/override)
  void initState() {
    super.initState();
    // 初始化蓝牙设备
    _initializeBluetooth();
  }

  Future<void> _initializeBluetooth() async {
    try {
      // 启动蓝牙适配器
      await bleCentral.startScan(timeout: Duration(seconds: 10));

      // 监听扫描到的设备
      bleCentral.scanResults.listen((scanResult) {
        print('发现设备: ${scanResult.device.name} | 地址: ${scanResult.device.id}');
      });

      // 停止扫描
      await Future.delayed(Duration(seconds: 10));
      await bleCentral.stopScan();

      // 连接设备(假设已知设备ID)
      final device = scanResult.device; // 替换为实际设备ID
      await bleCentral.connectToDevice(id: device.id);

      // 写入数据到设备
      await bleCentral.writeToCharacteristic(
        id: device.id,
        characteristicId: '0000ffe1-0000-1000-8000-00805f9b34fb',
        value: Uint8List.fromList([0x01, 0x02, 0x03]),
      );

      // 读取设备返回的数据
      final data = await bleCentral.readFromCharacteristic(
        id: device.id,
        characteristicId: '0000ffe1-0000-1000-8000-00805f9b34fb',
      );
      print('收到数据: ${data.buffer.asUint8List()}');

      // 断开连接
      await bleCentral.disconnectFromDevice(id: device.id);
    } catch (e) {
      print('蓝牙通信错误: $e');
    }
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('蓝牙通信示例'),
      ),
      body: Center(
        child: Text('正在执行蓝牙通信...'),
      ),
    );
  }
}

更多关于Flutter蓝牙通信插件flutter_reactive_ble_backend的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter蓝牙通信插件flutter_reactive_ble_backend的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


flutter_reactive_ble 是一个用于在 Flutter 应用中实现蓝牙低功耗(BLE)通信的插件。它提供了一种响应式的方式来处理蓝牙设备发现、连接、读写特征值等操作。以下是如何使用 flutter_reactive_ble 插件进行蓝牙通信的基本步骤。

1. 添加依赖

首先,在 pubspec.yaml 文件中添加 flutter_reactive_ble 依赖:

dependencies:
  flutter:
    sdk: flutter
  flutter_reactive_ble: ^5.0.0

然后运行 flutter pub get 来安装依赖。

2. 初始化插件

在你的 Dart 文件中导入 flutter_reactive_ble 并初始化插件:

import 'package:flutter_reactive_ble/flutter_reactive_ble.dart';

final flutterReactiveBle = FlutterReactiveBle();

3. 扫描蓝牙设备

你可以使用 flutterReactiveBle.scanForDevices 方法来扫描附近的蓝牙设备:

void scanForDevices() {
  flutterReactiveBle.scanForDevices(withServices: []).listen((device) {
    print('Found device: ${device.name}, ID: ${device.id}');
  }, onError: (error) {
    print('Error while scanning: $error');
  });
}

4. 连接蓝牙设备

扫描到设备后,你可以使用 flutterReactiveBle.connectToDevice 方法来连接设备:

void connectToDevice(String deviceId) {
  flutterReactiveBle.connectToDevice(id: deviceId).listen((connectionState) {
    print('Connection state: $connectionState');
  }, onError: (error) {
    print('Error while connecting: $error');
  });
}

5. 发现服务和特征值

连接成功后,你可以使用 flutterReactiveBle.discoverServices 方法来发现设备的服务和特征值:

void discoverServices(String deviceId) {
  flutterReactiveBle.discoverServices(deviceId).then((services) {
    for (var service in services) {
      print('Service: ${service.uuid}');
      for (var characteristic in service.characteristics) {
        print('Characteristic: ${characteristic.uuid}');
      }
    }
  }).catchError((error) {
    print('Error while discovering services: $error');
  });
}

6. 读写特征值

发现特征值后,你可以使用 flutterReactiveBle.readCharacteristicflutterReactiveBle.writeCharacteristic 方法来读写特征值:

void readCharacteristic(QualifiedCharacteristic characteristic) {
  flutterReactiveBle.readCharacteristic(characteristic).then((value) {
    print('Read value: $value');
  }).catchError((error) {
    print('Error while reading: $error');
  });
}

void writeCharacteristic(QualifiedCharacteristic characteristic, List<int> value) {
  flutterReactiveBle.writeCharacteristic(characteristic, value).then((_) {
    print('Write successful');
  }).catchError((error) {
    print('Error while writing: $error');
  });
}

7. 监听特征值变化

你可以使用 flutterReactiveBle.subscribeToCharacteristic 方法来监听特征值的变化:

void subscribeToCharacteristic(QualifiedCharacteristic characteristic) {
  flutterReactiveBle.subscribeToCharacteristic(characteristic).listen((value) {
    print('Characteristic value changed: $value');
  }, onError: (error) {
    print('Error while subscribing: $error');
  });
}

8. 断开连接

使用 flutterReactiveBle.disconnectDevice 方法来断开与设备的连接:

void disconnectDevice(String deviceId) {
  flutterReactiveBle.disconnectDevice(id: deviceId).then((_) {
    print('Disconnected from device');
  }).catchError((error) {
    print('Error while disconnecting: $error');
  });
}
回到顶部