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

物联网项目中,已连接HC-08模块,如何用react-native-ble-plx发送数据?

使用react-native-ble-plx向HC-08发送数据的完整指南

太棒了,你已经搞定安卓和HC-08的连接了!接下来用react-native-ble-plx给模块发数据其实没那么复杂,我给你一步步捋清楚:

前提确认

  • 确保你的安卓设备已经和HC-08建立了稳定的BLE连接
  • 提前记好HC-08的服务UUID和可写特征UUID:HC-08默认用的是串口透传服务,UUID是0000ffe0-0000-1000-8000-00805f9b34fb,对应的可写特征UUID是0000ffe1-0000-1000-8000-00805f9b34fb,要是你改过模块配置,记得换成自己设置的那组

步骤1:导入并初始化BLE管理器

先在你的React Native组件里导入库,初始化一个管理器实例:

import { BleManager } from 'react-native-ble-plx';

const bleManager = new BleManager();

步骤2:获取已连接的HC-08设备

你可以通过设备名称(HC-08默认名称就是HC-08)或者设备ID,筛选出已经连接的目标设备:

async function getConnectedHC08() {
  try {
    // 可以传入服务UUID过滤设备,精准定位HC-08
    const connectedDevices = await bleManager.connectedDevices(['0000ffe0-0000-1000-8000-00805f9b34fb']);
    const hc08Device = connectedDevices.find(device => device.name === 'HC-08');
    
    if (!hc08Device) {
      throw new Error('没找到已连接的HC-08设备哦');
    }
    return hc08Device;
  } catch (error) {
    console.error('获取设备失败:', error);
    return null;
  }
}

步骤3:发现服务与可写特征

拿到设备实例后,得先发现它的服务和特征,才能进行数据写入操作:

async function getWritableCharacteristic(device) {
  try {
    // 发现设备所有的服务和特征
    await device.discoverAllServicesAndCharacteristics();
    
    // 获取HC-08的串口服务
    const serialService = await device.serviceForUUID('0000ffe0-0000-1000-8000-00805f9b34fb');
    if (!serialService) {
      throw new Error('找不到HC-08的串口服务');
    }
    
    // 获取对应的可写特征
    const writableChar = await serialService.characteristicForUUID('0000ffe1-0000-1000-8000-00805f9b34fb');
    if (!writableChar) {
      throw new Error('找不到可写入的特征');
    }
    
    // 确认特征支持写入(两种写入模式:带响应/不带响应,至少要有一种)
    if (!writableChar.isWritableWithResponse && !writableChar.isWritableWithoutResponse) {
      throw new Error('这个特征不支持写入操作');
    }
    return writableChar;
  } catch (error) {
    console.error('获取特征失败:', error);
    return null;
  }
}

步骤4:发送数据到HC-08

BLE传输的是字节数组,所以要先把你要发的字符串转换成Uint8Array,再调用特征的写入方法:

async function sendData(dataToSend) {
  const hc08Device = await getConnectedHC08();
  if (!hc08Device) return;

  const writableChar = await getWritableCharacteristic(hc08Device);
  if (!writableChar) return;

  try {
    // 把字符串转成UTF-8编码的字节数组
    const byteData = new TextEncoder().encode(dataToSend);
    
    // 选择写入模式:writeWithResponse会等待设备响应,适合需要确认发送结果的场景;writeWithoutResponse速度更快
    await writableChar.writeWithResponse(byteData);
    console.log('数据发送成功啦!');
  } catch (error) {
    console.error('发送数据失败:', error);
  }
}

// 调用示例:发送"Hello Raspberry Pi!"
// sendData("Hello Raspberry Pi!");

关键注意事项

  • 权限要到位:安卓端要确保申请了对应的蓝牙权限,Android 12+需要BLUETOOTH_CONNECT,低版本需要ACCESS_FINE_LOCATION等,还要确保用户已经授权。
  • 波特率要匹配:树莓派上的串口配置必须和HC-08的波特率一致(默认9600),不然树莓派可能读不懂收到的数据。
  • 数据长度限制:BLE单次写入一般最多传20字节左右,要是发长数据,记得做分片处理。
  • 连接稳定性:如果发送过程中出现断开,可以在代码里加个重连逻辑,确保通信稳定。

内容的提问来源于stack exchange,提问作者Hurobaki

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 10:26:36