Flutter模拟数据插件blemulator的使用
概述
BLEMulator
是一个用于模拟低功耗蓝牙外设(Bluetooth Low Energy peripherals)的Flutter插件。它允许开发者在iOS模拟器或Android虚拟机上测试BLE应用程序,并且可以运行自动化测试。
注意: BLEMulator
只能在与 FlutterBleLib
配合使用时工作。
BLEMulator
模拟了 MultiPlatformBleAdapter
的行为,并让你在Dart中创建模拟的外设。由于模拟是在FlutterBleLib的原生桥接层下插入的,因此你的Flutter BLE处理代码不会意识到它正在运行在一个模拟环境中。
功能
- 在iOS模拟器和Android虚拟机上开发BLE应用。
- 运行自动化测试。
如何使用
以下是使用 BLEMulator
的步骤:
- 获取
BLEMulator
实例。 - 添加一个模拟外设。
- 调用
blemulator.simulate()
方法。 - 调用
FlutterBleLib
的bleManager.createClient()
方法。
示例代码
// 导入必要的库
import 'package:blemulator/blemulator.dart';
import 'package:flutter_ble_lib/flutter_ble_lib.dart';
void main() {
// 初始化BLEMulator
Blemulator blemulator = Blemulator();
// 创建一个模拟外设
blemulator.addSimulatedPeripheral(ExamplePeripheral());
// 开始模拟
blemulator.simulate();
// 初始化BLE管理器
BleManager bleManager = BleManager();
bleManager.createClient(); // 创建原生BLE客户端实例
}
定义简单的模拟外设
以下是一个基于 Texas Instruments CC2541 SensorTag 的简单模拟外设示例。仅模拟了红外温度服务。
// 导入必要的库
import 'dart:typed_data';
import 'package:blemulator/blemulator.dart';
import 'package:flutter_ble_lib/flutter_ble_lib.dart';
// 定义模拟外设类
class SensorTag extends SimulatedPeripheral {
SensorTag({
String id = "4C:99:4C:34:DE:76",
String name = "SensorTag",
String localName = "SensorTag",
}) : super(
name: name,
id: id,
advertisementInterval: Duration(milliseconds: 800), // 广播间隔
services: [
// 模拟服务
SimulatedService(
uuid: "F000AA00-0451-4000-B000-000000000000", // UUID
isAdvertised: true, // 是否广播
characteristics: [
// 模拟特征值
SimulatedCharacteristic(
uuid: "F000AA01-0451-4000-B000-000000000000",
value: Uint8List.fromList([101, 254, 64, 12]), // 特征值
convenienceName: "IR Temperature Data", // 易读名称
),
SimulatedCharacteristic(
uuid: "F000AA02-0451-4000-B000-000000000000",
value: Uint8List.fromList([0]),
convenienceName: "IR Temperature Config",
),
SimulatedCharacteristic(
uuid: "F000AA03-0451-4000-B000-000000000000",
value: Uint8List.fromList([50]),
convenienceName: "IR Temperature Period",
),
],
convenienceName: "Temperature service",
)
],
) {
scanInfo.localName = localName; // 设置本地名称
}
// 处理连接请求
@override
Future<bool> onConnectRequest() async {
await Future.delayed(Duration(milliseconds: 200)); // 模拟延迟
return super.onConnectRequest(); // 返回连接结果
}
}
解释
advertisementInterval
: 每隔800毫秒广播一次。services
: 包含三个特征值的模拟服务。onConnectRequest
: 模拟连接请求的延迟。
修改广告数据或扫描信息
你可以通过修改 scanInfo
属性来控制广告数据。scanInfo
是自动广播的,每次广告间隔内都会发送。
class SensorTag extends SimulatedPeripheral {
// 构造函数中设置扫描信息
SensorTag({
String id = "4C:99:4C:34:DE:76",
String name = "SensorTag",
String localName = "SensorTag",
}) : super(
name: name,
id: id,
advertisementInterval: Duration(milliseconds: 800),
services: [...], // 服务定义
) {
scanInfo.rssi = -60; // RSSI值
scanInfo.isConnectable = true; // 是否可连接
scanInfo.serviceUuids = ["F000AA00-0451-4000-B000-000000000000"];
}
}
自定义特征行为
如果需要更复杂的逻辑,比如验证值或触发其他特征的变化,可以扩展 SimulatedService
或 SimulatedCharacteristic
类。
示例:限制特征值范围
class ExampleCharacteristic extends SimulatedCharacteristic {
ExampleCharacteristic({@required String uuid, String convenienceName})
: super(
uuid: uuid,
value: Uint8List.fromList([0]),
convenienceName: convenienceName,
);
@override
Future<void> write(Uint8List value, {bool sendNotification = true}) {
int valueAsInt = value[0];
if (valueAsInt != 0 && valueAsInt != 1) {
return Future.error(SimulatedBleError(
BleErrorCode.CharacteristicWriteFailed, "Unsupported value"));
} else {
return super.write(value);
}
}
}
描述符
特征值可以包含描述符,用于提供更多上下文信息。
SimulatedCharacteristic(
uuid: "F000AA13-0451-4000-B000-000000000000",
value: Uint8List.fromList([30]),
descriptors: [
SimulatedDescriptor(
uuid: "F0002901-0451-4000-B000-000000000000",
value: Uint8List.fromList([0]),
convenienceName: "Example descriptor (Characteristic User Description)",
),
],
convenienceName: "Accelerometer Period",
);
更多关于Flutter模拟数据插件blemulator的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
blemulator
是一个用于 Flutter 的模拟数据插件,特别适用于在开发过程中模拟蓝牙低功耗(BLE)设备的行为。它可以帮助开发者在没有实际硬件设备的情况下进行开发和测试。以下是使用 blemulator
的基本步骤:
1. 添加依赖
首先,你需要在 pubspec.yaml
文件中添加 blemulator
依赖:
dependencies:
flutter:
sdk: flutter
blemulator: ^1.0.0 # 请检查最新版本
然后运行 flutter pub get
来安装依赖。
2. 初始化 Blemulator
在你的 Flutter 应用中初始化 blemulator
。通常,你可以在 main.dart
文件中进行初始化:
import 'package:flutter/material.dart';
import 'package:blemulator/blemulator.dart';
void main() {
Blemulator().initialize();
runApp(MyApp());
}
3. 配置模拟设备
你可以配置一个或多个模拟的 BLE 设备。以下是一个简单的示例,展示如何配置一个模拟设备:
import 'package:blemulator/blemulator.dart';
void configureBlemulator() {
Blemulator().addDevice(
id: 'device1',
name: 'My BLE Device',
services: [
BleService(
uuid: '0000180d-0000-1000-8000-00805f9b34fb',
characteristics: [
BleCharacteristic(
uuid: '00002a37-0000-1000-8000-00805f9b34fb',
value: [0x01, 0x02, 0x03],
properties: CharacteristicProperties(
read: true,
write: true,
notify: true,
),
),
],
),
],
);
}
在 main
函数中调用 configureBlemulator
:
void main() {
Blemulator().initialize();
configureBlemulator();
runApp(MyApp());
}
4. 使用 BLE 功能
在你的应用中使用 BLE 功能时,blemulator
会模拟这些设备的行为。你可以使用 flutter_blue
或其他 BLE 插件来与这些模拟设备进行交互。
例如,使用 flutter_blue
扫描设备:
import 'package:flutter_blue/flutter_blue.dart';
void scanDevices() {
FlutterBlue flutterBlue = FlutterBlue.instance;
flutterBlue.scan().listen((scanResult) {
print('Found device: ${scanResult.device.name}');
});
}
5. 运行应用
现在你可以运行你的 Flutter 应用,并使用 blemulator
模拟的 BLE 设备进行开发和测试。
6. 调试和测试
在开发过程中,你可以通过 blemulator
提供的 API 来动态修改模拟设备的行为,以便测试不同的场景。
7. 移除模拟设备
如果你不再需要某个模拟设备,可以通过以下方式移除它:
Blemulator().removeDevice('device1');
8. 清理
在应用退出时,可以清理 blemulator
:
Blemulator().dispose();