Flutter蓝牙通信插件flutter_bluetooth_seria_changed的使用

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

Flutter蓝牙通信插件flutter_bluetooth_serial的使用

简介

flutter_bluetooth_serial

此插件为经典蓝牙(目前仅支持RFCOMM)的基本实现。

特性

该插件的主要功能包括:

  • 监控适配器状态,
  • 打开和关闭适配器,
  • 打开设置,
  • 发现设备(并请求可发现性),
  • 列出已绑定设备并配对新设备,
  • 同时连接多个设备,
  • 发送和接收数据(多连接)。

该插件目前使用串行端口配置文件通过RFCOMM移动数据,因此请确保运行的服务发现协议指向设备的SP/RFCOMM通道。最多可以有7个蓝牙连接。

目前只支持Android平台。

开始使用

添加依赖

在项目的pubspec.yaml文件中添加以下依赖项:

dependencies:
    # 其他依赖项
    flutter_bluetooth_serial: ^0.3.2
安装依赖

使用以下命令安装依赖:

# 使用pub管理器
pub get
# 或者使用Flutter
flutter pub get
导入库

在需要使用该插件的文件中导入以下库:

import 'package:flutter_bluetooth_serial/flutter_bluetooth_serial.dart';
使用示例

以下是最简单的连接示例:

try {
    // 连接到指定地址的设备
    BluetoothConnection connection = await BluetoothConnection.toAddress(address);
    print('Connected to the device');

    // 接收数据
    connection.input.listen((Uint8List data) {
        print('Data incoming: ${ascii.decode(data)}');
        connection.output.add(data); // 发送数据

        if (ascii.decode(data).contains('!')) {
            connection.finish(); // 关闭连接
            print('Disconnecting by local host');
        }
    }).onDone(() {
        print('Disconnected by remote request');
    });
}
catch (exception) {
    print('Cannot connect, exception occured');
}

注意:正在进行工作以使通信比字节流操作更简单。详情参见#41讨论。

示例应用

以下是示例应用程序的代码,展示如何连接到Arduino HC-05和Raspberry Pi的蓝牙接口。

// 示例代码:lib/main.dart
import 'package:flutter/material.dart';

import './MainPage.dart';

void main() => runApp(new ExampleApplication());

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

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

1 回复

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


当然,以下是一个关于如何使用 flutter_bluetooth_serial 插件进行蓝牙通信的示例代码。请注意,flutter_bluetooth_serial_changed 并不是一个广泛认知的插件,因此我假设你指的是 flutter_bluetooth_serial,这是一个流行的 Flutter 蓝牙通信插件。

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

dependencies:
  flutter:
    sdk: flutter
  flutter_bluetooth_serial: ^x.y.z  # 请替换为最新版本号

然后运行 flutter pub get 来获取依赖。

以下是一个简单的示例代码,展示如何使用 flutter_bluetooth_serial 进行蓝牙设备的扫描和连接,以及发送和接收数据:

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

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

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

class _MyAppState extends State<MyApp> {
  FlutterBluetoothSerial _bluetooth = FlutterBluetoothSerial();
  List<BluetoothDevice> _devices = [];
  BluetoothConnection? _connection;

  @override
  void initState() {
    super.initState();
    initBluetooth();
  }

  Future<void> initBluetooth() async {
    bool isEnabled = await _bluetooth.isEnabled();
    if (!isEnabled) {
      bool isEnabledNow = await _bluetooth.requestEnable();
      if (!isEnabledNow) {
        // 处理蓝牙未开启的情况
        return;
      }
    }

    // 开始扫描设备
    _bluetooth.startDiscovery().then((bool started) {
      if (started) {
        _bluetooth.discoveryResults.listen((BluetoothDiscoveryResult result) {
          setState(() {
            _devices.add(result.device);
          });
        }).onDone(() {
          // 扫描完成
          print('Scan completed.');
        });
      }
    });
  }

  Future<void> connectToDevice(BluetoothDevice device) async {
    _connection = await _bluetooth.connect(device.address);
    _connection!.input!.listen(_onDataReceived).onDone(() {
      print('Disconnected');
      _connection = null;
    });
  }

  void _onDataReceived(Uint8List data) {
    String receivedData = String.fromCharCodes(data);
    print('Received: $receivedData');
  }

  Future<void> sendData(String data) async {
    if (_connection != null && _connection!.isConnected!) {
      Uint8List dataToSend = Uint8List.fromList(data.codeUnits);
      await _connection!.output!.add(dataToSend);
    } else {
      print('No connection or connection is not open');
    }
  }

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Flutter Bluetooth Demo'),
        ),
        body: Column(
          children: [
            Expanded(
              child: ListView.builder(
                itemCount: _devices.length,
                itemBuilder: (context, index) {
                  return ListTile(
                    title: Text(_devices[index].name ?? 'Unknown Device'),
                    subtitle: Text(_devices[index].address),
                    onTap: () => connectToDevice(_devices[index]),
                  );
                },
              ),
            ),
            TextField(
              decoration: InputDecoration(labelText: 'Send Data'),
              onSubmitted: (data) => sendData(data),
            ),
          ],
        ),
      ),
    );
  }
}

说明:

  1. 初始化蓝牙:在 initState 方法中,检查蓝牙是否已启用,如果没有,则请求用户启用蓝牙。然后开始扫描蓝牙设备。

  2. 扫描设备:使用 _bluetooth.startDiscovery() 方法开始扫描蓝牙设备,并在 discoveryResults 流中监听扫描结果,将发现的设备添加到 _devices 列表中。

  3. 连接设备:在设备列表中,点击某个设备将尝试连接到该设备。连接成功后,监听 input 流以接收数据。

  4. 发送数据:在文本字段中输入数据,点击提交按钮(或按回车键)将数据发送到已连接的蓝牙设备。

  5. 接收数据:在 _onDataReceived 方法中处理接收到的数据。

这个示例展示了基本的蓝牙设备扫描、连接、数据发送和接收功能。根据实际需求,你可能需要添加更多的错误处理和功能。

回到顶部