如何通过蓝牙将Flutter应用的GPS数据发送到Arduino设备
Flutter 向Arduino传输蓝牙GPS数据实现方案
以下是对应flutter_bluetooth_serial和蓝牙BLE方案的可落地实现,完全匹配你的GPS数据传输需求:
1 经典蓝牙方案(适配Arduino HC-05/HC-06模块,对应flutter_bluetooth_serial库)
Arduino常用的HC-05/HC-06走经典蓝牙SPP串口协议,直接用该库即可实现传输:
- 第一步在
pubspec.yaml引入依赖:flutter_bluetooth_serial: ^0.4.0 - 提前配置平台权限:安卓端在
AndroidManifest.xml添加蓝牙扫描、连接、读写权限,iOS端在Info.plist添加蓝牙使用权限描述,安卓12及以上需要额外申请蓝牙相关动态权限 - 核心发送逻辑参考:
import 'dart:convert'; import 'package:flutter_bluetooth_serial/flutter_bluetooth_serial.dart'; // 先扫描配对找到名称为HC-05的目标设备,默认配对PIN为0000或1234 BluetoothDevice targetDevice = /* 扫描到的Arduino蓝牙设备实例 */; // 建立蓝牙连接 BluetoothConnection connection = await BluetoothConnection.toAddress(targetDevice.address); // 构造采集到的GPS数据,末尾加\n作为结束符,方便Arduino端分包 String gpsData = "LAT:${你的纬度值},LNG:${你的经度值}\n"; // 发送数据 connection.output.add(utf8.encode(gpsData)); await connection.output.allSent; // 传输完成后可按需关闭连接 // await connection.close();
2 BLE蓝牙方案(适配Arduino BLE模块/ESP32,对应flutter_blue衍生库)
官方原版flutter_blue已停止维护,社区衍生的flutter_blue_plus接口完全兼容原flutter_blue,可直接使用你之前查阅的flutter_blue文档:
- 第一步在
pubspec.yaml引入依赖:flutter_blue_plus: ^1.13.3 - 核心发送逻辑参考:
import 'dart:convert'; import 'package:flutter_blue_plus/flutter_blue_plus.dart'; // 扫描连接到Arduino BLE设备后,找到预设的串口服务和特征值 // HM-10等通用BLE串口模块默认服务UUID:0000ffe0-0000-1000-8000-00805f9b34fb // 默认写入特征值UUID:0000ffe1-0000-1000-8000-00805f9b34fb BluetoothCharacteristic txCharacteristic = /* 找到的可写特征值实例 */; // 构造GPS数据 String gpsData = "LAT:${你的纬度值},LNG:${你的经度值}\n"; // 写入数据 await txCharacteristic.write(utf8.encode(gpsData), withoutResponse: true);
3 Arduino端接收参考代码
以HC-05模块接SoftwareSerial为例:
#include <SoftwareSerial.h> // 蓝牙模块RX接Arduino D2,TX接Arduino D3 SoftwareSerial bluetoothSerial(2, 3); void setup() { Serial.begin(9600); // HC-05默认波特率为9600,和你自己设置的波特率保持一致即可 bluetoothSerial.begin(9600); } void loop() { if (bluetoothSerial.available()) { // 读到\n为止就是一条完整的GPS数据,避免分包混乱 String gpsData = bluetoothSerial.readStringUntil('\n'); Serial.print("收到GPS数据:"); Serial.println(gpsData); // 此处添加你自己的业务逻辑即可 } }
注意事项
- 发送数据时统一加固定结束符(比如
\n),可避免蓝牙分包导致的数据截断问题 - 经典蓝牙需要先在系统蓝牙设置中完成配对,再在应用内发起连接
内容的提问来源于stack exchange,提问作者Kofi Adu Agyekum
相关产品推荐
相关产品推荐

