Flutter蓝牙配置插件blufi_plugin的使用

发布于 1周前 作者 phonegap100 来自 Flutter

Flutter蓝牙配置插件blufi_plugin的使用

简介

blufi_plugin 是一个用于Flutter应用程序的插件,旨在通过蓝牙与ESP设备进行通信和配置。该插件依赖于两个平台特定的库:

  • iOS: EspBlufiForiOS
  • Android: EspBlufiForAndroid

这些库提供了与ESP设备进行蓝牙通信的功能,允许开发者在Flutter应用中实现蓝牙扫描、连接和配置等功能。

快速上手

blufi_plugin 是一个Flutter插件包,包含针对Android和iOS平台的原生实现代码。要开始使用此插件,您需要确保已经安装并配置好了Flutter开发环境。如果您是第一次使用Flutter,建议先阅读官方文档,了解如何创建和配置Flutter项目。

示例代码

以下是一个完整的示例代码,展示了如何使用 blufi_plugin 插件来实现蓝牙设备的扫描、连接和配置功能。这个示例应用程序包括了扫描设备、停止扫描、连接设备、关闭连接以及发送自定义数据的功能。

import 'dart:convert';
import 'package:flutter/material.dart';
import 'package:blufi_plugin/blufi_plugin.dart';

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

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

class _MyAppState extends State<MyApp> {
  String contentJson = 'Unknown'; // 用于显示接收到的数据
  Map<String, dynamic> scanResult = {}; // 保存扫描到的设备信息

  [@override](/user/override)
  void initState() {
    super.initState();
    initPlatformState();

    // 监听蓝牙消息
    BlufiPlugin.instance.onMessageReceived(
      successCallback: (String data) {
        print("success data: $data");
        setState(() {
          contentJson = data;
          Map<String, dynamic> mapData = json.decode(data);
          if (mapData.containsKey('key')) {
            String key = mapData['key'];
            if (key == 'ble_scan_result') {
              // 处理扫描结果
              Map<String, dynamic> peripheral = mapData['value'];
              String address = peripheral['address'];
              String name = peripheral['name'];
              int rssi = peripheral['rssi'];
              print(rssi);
              scanResult[address] = name; // 将设备地址和名称存入scanResult
            }
          }
        });
      },
      errorCallback: (String error) {
        print("error: $error"); // 处理错误
      },
    );
  }

  // 初始化平台状态
  Future<void> initPlatformState() async {
    String platformVersion;
    try {
      platformVersion = await BlufiPlugin.instance.platformVersion;
    } on PlatformException {
      platformVersion = 'Failed to get platform version.';
    }

    if (!mounted) return;
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: const Text('Plugin example app'),
        ),
        body: Column(
          children: [
            // 扫描设备按钮
            TextButton(
              onPressed: () async {
                await BlufiPlugin.instance.scanDeviceInfo(filterString: 'VCONNEX');
              }, 
              child: Text('Scan')
            ),
            // 停止扫描按钮
            TextButton(
              onPressed: () async {
                await BlufiPlugin.instance.stopScan();
              }, 
              child: Text('Stop Scan')
            ),
            // 连接设备按钮
            TextButton(
              onPressed: () async {
                if (scanResult.isNotEmpty) {
                  String firstAddress = scanResult.keys.first;
                  await BlufiPlugin.instance.connectPeripheral(peripheralAddress: firstAddress);
                } else {
                  print('No devices found to connect');
                }
              }, 
              child: Text('Connect Peripheral')
            ),
            // 关闭连接按钮
            TextButton(
              onPressed: () async {
                await BlufiPlugin.instance.requestCloseConnection();
              }, 
              child: Text('Close Connect')
            ),
            // 配置Wi-Fi按钮
            TextButton(
              onPressed: () async {
                await BlufiPlugin.instance.configProvision(username: 'ABCXYZ', password: '0913456789');
              }, 
              child: Text('Config Provision')
            ),
            // 发送自定义数据按钮
            TextButton(
              onPressed: () async {
                String command = '12345678';
                await BlufiPlugin.instance.postCustomData(command);
              }, 
              child: Text('Send Custom Data')
            ),
            // 显示接收到的数据
            Text(contentJson ?? '')
          ],
        ),
      ),
    );
  }
}

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

1 回复

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


当然,以下是一个关于如何使用Flutter蓝牙配置插件blufi_plugin的示例代码案例。这个插件通常用于配置ESP32等设备的蓝牙低功耗(BLE)功能,特别是在需要通过蓝牙进行设备配网时非常有用。请注意,具体实现可能会因插件版本和设备而有所不同,以下示例仅供参考。

首先,确保你已经在pubspec.yaml文件中添加了blufi_plugin依赖:

dependencies:
  flutter:
    sdk: flutter
  blufi_plugin: ^最新版本号  # 替换为实际最新版本号

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

接下来是示例代码,展示如何在Flutter应用中使用blufi_plugin

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

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

class MyApp extends StatefulWidget {
  @override
  _MyAppState createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  late BlufiPlugin blufiPlugin;
  bool isScanning = false;

  @override
  void initState() {
    super.initState();
    blufiPlugin = BlufiPlugin();
    blufiPlugin.init();
  }

  @override
  void dispose() {
    blufiPlugin.dispose();
    super.dispose();
  }

  void startScanning() async {
    setState(() {
      isScanning = true;
    });
    try {
      List<BluetoothDevice> devices = await blufiPlugin.startScan(timeout: Duration(seconds: 10));
      setState(() {
        isScanning = false;
      });
      devices.forEach((device) {
        print('Found device: ${device.name}, address: ${device.address}');
      });
    } catch (e) {
      setState(() {
        isScanning = false;
      });
      print('Scanning failed: $e');
    }
  }

  void connectToDevice(String address) async {
    try {
      await blufiPlugin.connectToDevice(address);
      print('Connected to device: $address');
      // 在这里可以进行下一步的配置操作,比如发送配网信息
    } catch (e) {
      print('Connection failed: $e');
    }
  }

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Blufi Plugin Example'),
        ),
        body: Center(
          child: Column(
            mainAxisAlignment: MainAxisAlignment.center,
            children: <Widget>[
              ElevatedButton(
                onPressed: isScanning ? null : startScanning,
                child: Text('Start Scanning'),
              ),
              SizedBox(height: 20),
              // 假设已经获取到了设备地址
              ElevatedButton(
                onPressed: () {
                  // 替换为实际的设备地址
                  connectToDevice('实际设备地址');
                },
                child: Text('Connect to Device'),
              ),
            ],
          ),
        ),
      ),
    );
  }
}

注意事项:

  1. 权限处理:在实际应用中,需要处理蓝牙权限请求,特别是在Android平台上。这通常需要在AndroidManifest.xml中添加相关权限,并在运行时请求权限。
  2. 错误处理:示例代码中只简单地打印了错误信息,实际应用中应提供更友好的错误提示或处理逻辑。
  3. 设备配置:一旦设备连接成功,你可以使用blufi_plugin提供的API发送配网信息或其他配置数据到设备。这部分功能需要根据你的具体需求来实现。
  4. 插件版本:确保你使用的是最新版本的blufi_plugin,因为插件的API可能会随着版本更新而变化。

这个示例代码提供了一个基本的框架,展示了如何使用blufi_plugin进行蓝牙设备扫描和连接。你可以根据实际需求进一步扩展和定制。

回到顶部