Uniapp如何解决蓝牙写入数据超过20字节

Uniapp如何解决蓝牙写入数据超过20字节

官网说明:

  1. 并行调用多次会存在写失败的可能性。
  2. APP不会对写入数据包大小做限制,但系统与蓝牙设备会限制蓝牙4.0单次传输的数据大小,超过最大字节数后会发生写入错误,建议每次写入不超过20字节。
  3. 若单次写入数据过长,iOS 上存在系统不会有任何回调的情况(包括错误回调)。

使用分片写入方法:

方案 1: 使用y-bluetooth(uni-bluetooth)工具:

npm install uni-bluetooth

github: uni-bluetooth

npm: uni-bluetooth

uni插件市场: y-bluetooth

使用文档: 文档

// 向设备写入16进制的字符串 '010041240100640000000000006a46010041240100640000000000006a46'

const value = '010041240100640000000000006a46010041240100640000000000006a46'
const ble = UniBluetooth.BLE({
    deviceId: 设备ID,
})
// 第三个参数为true时会自动分片写入蓝牙数据
ble.writeValue(value, 'hex', true) // 'hex'表示value的值是16进制的,另外还有'string' 和 'buffer' 两种类型
如果使用分片写入,又需要同时写入多个指令:
// 向设备写入16进制的字符串 '010041240100640000000000006a46010041240100640000000000006a46'

const value = '010041240100640000000000006a46'
const ble = UniBluetooth.BLE({
    deviceId: 设备ID,
})
// 使用eventListWriteValue会自动将多个方法依次写入
// 事件1
ble.eventListWriteValue({
    value,
    endDelay: 2000, // 2000ms后执行下一个eventListWriteValue
    loop: true
})
// 下面的方法会在事件1执行完毕后两秒执行
ble.eventListWriteValue({
    value,
})

方案 2: 递归写入:

function writeValue(value, startIndex = 0) {
	const packetSize = 20; // 每个小包的大小为20字节
	// const len = value.byteLength //如果value是ArrayBuffer
	const len = value.length // 如果value是String
	const endIndex = startIndex + packetSize
	uni.writeBLECharacteristicValue({
		...其他参数,
		value: value.slice(startIndex, endIndex),
		success() {
			if (len > endIndex) {
				// 递归调用
				writeValue(value, endIndex)
			}
		}
	})
}
  • 12
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要在uni-app中连接蓝牙并接收数据,您可以按照以下步骤进行操作: 1. 首先,使用uni.openBluetoothAdapter API来初始化蓝牙模块。此步骤是必需的,确保在使用其他蓝牙相关API之前调用该函数。 2. 在蓝牙模块初始化成功后,您可以使用uni.getBluetoothAdapterState API来获取当前蓝牙适配器的状态。您可以通过检查返回的res.available字段来确定蓝牙适配器是否可用。 3. 如果蓝牙适配器可用,您可以调用uni.startBluetoothDevicesDiscovery API来开始搜索附近的蓝牙设备。这将触发一个蓝牙设备发现的过程,并返回附近可用设备的列表。您可以根据设备的名称、信号强度等信息来筛选您需要连接的蓝牙设备。 4. 找到目标蓝牙设备后,您可以调用uni.createBLEConnection API来建立与该设备的蓝牙连接。您需要传入目标设备的deviceId作为参数。 5. 连接成功后,您可以使用uni.getBLEDeviceServices API来获取连接设备的所有服务。这将返回一个包含服务信息的数组。您可以根据需要的服务UUID来筛选出您需要的服务。 6. 找到目标服务后,您可以调用uni.getBLEDeviceCharacteristics API来获取该服务下的所有特征值。特征值是蓝牙设备与手机之间进行数据交互的通道。 7. 您可以使用uni.readBLECharacteristicValue API来读取特定特征值的数据。通过传入目标特征值的serviceId和characteristicId,您可以读取到相应特征值的数据。 8. 除了读取数据,您还可以使用uni.writeBLECharacteristicValue API来向特定特征值写入数据。同样,您需要传入目标特征值的serviceId、characteristicId和要写入数据。 9. 需要注意的是,由于蓝牙数据交互的异步性,您需要适当处理回调函数以确保数据的正确接收和处理。您可以在读取或写入操作完成后的回调函数中处理相应的数据。 综上所述,您可以通过上述步骤在uni-app中连接蓝牙并接收数据。请根据您的具体需求,按照上述步骤逐步实现相关功能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值