Flutter蓝牙通信插件win_ble_backend的使用
Flutter蓝牙通信插件win_ble_backend的使用
使用方法
要使用 win_ble_backend
插件进行蓝牙通信,首先需要创建一个 WinBleCentral
实例。以下是一个完整的示例代码,展示了如何初始化插件并执行基本的蓝牙操作。
import 'package:flutter/material.dart';
import 'package:win_ble_backend/win_ble_backend.dart'; // 导入插件
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: BluetoothExample(),
);
}
}
class BluetoothExample extends StatefulWidget {
@override
_BluetoothExampleState createState() => _BluetoothExampleState();
}
class _BluetoothExampleState extends State<BluetoothExample> {
final bleCentral = WinBleCentral(); // 创建WinBleCentral实例
List<String> devicesList = []; // 存储已扫描到的蓝牙设备列表
@override
void initState() {
super.initState();
scanForDevices(); // 初始化时开始扫描蓝牙设备
}
// 扫描蓝牙设备
Future<void> scanForDevices() async {
try {
await bleCentral.startScan(); // 开始扫描
bleCentral.onDeviceDiscovered.listen((device) {
setState(() {
devicesList.add(device.name); // 将扫描到的设备名称添加到列表中
});
});
} catch (e) {
print('Error during scanning: $e');
}
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Win BLE Backend 示例'),
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Text('扫描到的蓝牙设备:', style: TextStyle(fontSize: 18)),
SizedBox(height: 20),
Expanded(
child: ListView.builder(
itemCount: devicesList.length,
itemBuilder: (context, index) {
return ListTile(
title: Text(devicesList[index]),
);
},
),
),
],
),
),
);
}
}
说明
-
导入插件
在 Dart 文件中导入win_ble_backend
插件:import 'package:win_ble_backend/win_ble_backend.dart';
-
创建实例
使用WinBleCentral()
创建蓝牙中央设备实例:final bleCentral = WinBleCentral();
更多关于Flutter蓝牙通信插件win_ble_backend的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter蓝牙通信插件win_ble_backend的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
win_ble_backend
是一个用于在 Windows 平台上进行蓝牙低功耗(BLE)通信的 Flutter 插件。它允许 Flutter 应用程序与 BLE 设备进行通信,支持扫描、连接、读取、写入和通知等操作。
以下是如何使用 win_ble_backend
插件进行蓝牙通信的基本步骤:
1. 添加依赖
首先,在 pubspec.yaml
文件中添加 win_ble_backend
插件的依赖:
dependencies:
flutter:
sdk: flutter
win_ble_backend: ^0.0.1 # 请使用最新版本
然后运行 flutter pub get
来安装依赖。
2. 初始化插件
在你的 Dart 代码中,首先需要初始化 win_ble_backend
插件:
import 'package:win_ble_backend/win_ble_backend.dart';
void main() async {
WidgetsFlutterBinding.ensureInitialized();
await WinBleBackend.initialize();
runApp(MyApp());
}
3. 扫描设备
使用 WinBleBackend
提供的 API 来扫描附近的 BLE 设备:
void scanDevices() async {
await WinBleBackend.startScan();
WinBleBackend.scanResults.listen((device) {
print('Found device: ${device.name}, RSSI: ${device.rssi}');
});
}
4. 连接设备
扫描到设备后,你可以通过设备的 id
来连接它:
void connectToDevice(String deviceId) async {
await WinBleBackend.connect(deviceId);
print('Connected to device: $deviceId');
}
5. 发现服务与特征
连接成功后,你可以发现设备提供的服务和特征:
void discoverServices(String deviceId) async {
List<BleService> services = await WinBleBackend.discoverServices(deviceId);
for (var service in services) {
print('Service: ${service.uuid}');
for (var characteristic in service.characteristics) {
print('Characteristic: ${characteristic.uuid}');
}
}
}
6. 读取和写入特征值
你可以读取或写入特定特征的值:
void readCharacteristic(String deviceId, String characteristicId) async {
List<int> value = await WinBleBackend.readCharacteristic(deviceId, characteristicId);
print('Characteristic value: $value');
}
void writeCharacteristic(String deviceId, String characteristicId, List<int> value) async {
await WinBleBackend.writeCharacteristic(deviceId, characteristicId, value);
print('Characteristic value written');
}
7. 启用通知
你可以启用特征的通知功能,以便在特征值发生变化时接收通知:
void enableNotification(String deviceId, String characteristicId) async {
await WinBleBackend.setNotification(deviceId, characteristicId, true);
WinBleBackend.onValueChanged.listen((value) {
print('Notification received: $value');
});
}
8. 断开连接
完成通信后,记得断开与设备的连接:
void disconnectDevice(String deviceId) async {
await WinBleBackend.disconnect(deviceId);
print('Disconnected from device: $deviceId');
}
9. 处理错误
在使用过程中,可能会遇到各种错误,建议添加错误处理逻辑:
void handleErrors() {
WinBleBackend.onError.listen((error) {
print('Error occurred: $error');
});
}
10. 清理资源
在应用程序退出时,确保释放资源:
void dispose() async {
await WinBleBackend.dispose();
}
示例代码
以下是一个简单的示例,展示了如何使用 win_ble_backend
插件进行 BLE 通信:
import 'package:flutter/material.dart';
import 'package:win_ble_backend/win_ble_backend.dart';
void main() async {
WidgetsFlutterBinding.ensureInitialized();
await WinBleBackend.initialize();
runApp(MyApp());
}
class MyApp extends StatelessWidget {
[@override](/user/override)
Widget build(BuildContext context) {
return MaterialApp(
home: BLEPage(),
);
}
}
class BLEPage extends StatefulWidget {
[@override](/user/override)
_BLEPageState createState() => _BLEPageState();
}
class _BLEPageState extends State<BLEPage> {
String _deviceId;
[@override](/user/override)
void initState() {
super.initState();
scanDevices();
}
void scanDevices() async {
await WinBleBackend.startScan();
WinBleBackend.scanResults.listen((device) {
print('Found device: ${device.name}, RSSI: ${device.rssi}');
if (device.name == 'YourDeviceName') {
_deviceId = device.id;
connectToDevice(_deviceId);
}
});
}
void connectToDevice(String deviceId) async {
await WinBleBackend.connect(deviceId);
print('Connected to device: $deviceId');
discoverServices(deviceId);
}
void discoverServices(String deviceId) async {
List<BleService> services = await WinBleBackend.discoverServices(deviceId);
for (var service in services) {
print('Service: ${service.uuid}');
for (var characteristic in service.characteristics) {
print('Characteristic: ${characteristic.uuid}');
if (characteristic.uuid == 'YourCharacteristicUUID') {
readCharacteristic(deviceId, characteristic.uuid);
enableNotification(deviceId, characteristic.uuid);
}
}
}
}
void readCharacteristic(String deviceId, String characteristicId) async {
List<int> value = await WinBleBackend.readCharacteristic(deviceId, characteristicId);
print('Characteristic value: $value');
}
void enableNotification(String deviceId, String characteristicId) async {
await WinBleBackend.setNotification(deviceId, characteristicId, true);
WinBleBackend.onValueChanged.listen((value) {
print('Notification received: $value');
});
}
[@override](/user/override)
void dispose() {
WinBleBackend.dispose();
super.dispose();
}
[@override](/user/override)
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('BLE Communication'),
),
body: Center(
child: Text('BLE Communication with win_ble_backend'),
),
);
}
}