You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过蓝牙将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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 06:48:01