HarmonyOS蓝牙串口协议(SPP)详解:实现设备间可靠数据交换

news/2024/11/14 13:14:08/文章来源:https://www.cnblogs.com/samex/p/18543171

本文旨在深入探讨华为鸿蒙HarmonyOS Next系统(截止目前API12)的技术细节,基于实际开发实践进行总结。主要作为技术分享与交流载体,难免错漏,欢迎各位同仁提出宝贵意见和问题,以便共同进步。本文为原创内容,任何形式的转载必须注明出处及原作者。

在智能设备互联互通的世界里,蓝牙技术扮演着至关重要的角色。其中,蓝牙串行通信(SPP,Serial Port Profile)作为一种经典的蓝牙协议,在HarmonyOS Next中为设备间的数据传输提供了可靠且高效的解决方案。今天,我们就来深入了解一下SPP在HarmonyOS Next中的应用,看看它是如何帮助我们实现设备间的可靠数据交换的。

一、SPP概述

SPP是一种蓝牙协议,其主要作用是在蓝牙设备之间建立串行通信连接,使得设备能够像使用串口一样进行数据传输。这种传输方式简单、直接,适用于多种类型的数据交换场景,如文件传输、传感器数据采集、打印机连接等。

二、应用场景

  1. 文件传输:在没有Wi-Fi或其他高速网络连接的情况下,用户可以通过SPP将手机上的文件传输到支持蓝牙的电脑或其他设备上。例如,在户外拍摄照片后,摄影师可以使用手机与相机通过蓝牙SPP连接,快速将照片传输到手机进行编辑和分享。
  2. 传感器数据采集:对于一些使用蓝牙连接传感器的物联网设备,SPP可用于实时采集传感器数据并传输到主控设备进行分析和处理。比如,在智能家居系统中,温湿度传感器通过蓝牙SPP将环境数据发送到智能网关,以便用户实时了解室内环境状况。
  3. 连接外部设备:SPP可以让HarmonyOS设备与蓝牙打印机、蓝牙条码扫描器等外部设备进行通信。在零售行业,店员可以使用搭载HarmonyOS的手持设备通过蓝牙SPP连接打印机,快速打印销售小票;仓库管理员则可以利用蓝牙条码扫描器扫描货物信息,并通过SPP将数据传输到管理系统中。

三、使用SPP建立连接与数据传输

1. 服务端操作

首先,服务端需要创建一个监听Socket,等待客户端连接。以下是服务端代码示例:

import { socket } from '@kit.ConnectivityKit';
import { AsyncCallback, BusinessError } from '@kit.BasicServicesKit';// 创建服务器监听Socket, 返回serverId
let serverNumber = -1;
let sppOption: socket.SppOptions = {uuid: '00001101-0000-1000-8000-00805f9b34fb',secure: true,type: 0
};
socket.sppListen('server1', sppOption, (code, serverSocketID) => {if (code!= null) {console.error('sppListen error, code is'+ (code as BusinessError).code);return;} else {serverNumber = serverSocketID;console.info('sppListen success, serverNumber ='+ serverNumber);}
});// socket等待客户端连接,连接成功返回clientId
let clientNumber = -1;
socket.sppAccept(serverNumber, (code, clientSocketID) => {if (code!= null) {console.error('sppAccept error, code is'+ (code as BusinessError).code);return;} else {clientNumber = clientSocketID;console.info('accept the client success');}
})
console.info('waiting for client connection');

在上述代码中,通过sppListen函数创建了一个服务端监听Socket,并指定了UUID、安全模式和类型等参数。然后使用sppAccept函数等待客户端连接,当客户端成功连接时,会返回客户端的标识clientId

2. 客户端操作

客户端需要根据服务端的UUID等信息进行连接,并发送数据。以下是客户端代码示例:

import { socket } from '@kit.ConnectivityKit';
import { AsyncCallback, BusinessError } from '@kit.BasicServicesKit';// 连接对端设备
let deviceId = '目标设备的蓝牙地址';
socket.sppConnect(deviceId, {uuid: '00001101-0000-1000-8000-00805f9b34fb',secure: true,type: 0
}, (code, socketID) => {if (code!= null) {console.error('sppConnect error, code ='+ (code as BusinessError).code);return;}console.info('sppConnect success, socketId ='+ socketID);// 向客户端写入数据let array = new Uint8Array(990);array[0] = 'A'.charCodeAt(0);array[1] = 'B'.charCodeAt(0);array[2] = 'C'.charCodeAt(0);array[3] = 'D'.charCodeAt(0);socket.sppWrite(socketID, array.buffer);console.info('sppWrite success');
})

客户端通过sppConnect函数连接到服务端,连接成功后,使用sppWrite函数向服务端发送数据。这里简单地发送了一个包含字符“A”“B”“C”“D”的字节数组。

四、SPP与其他蓝牙数据传输模式的对比

对比项目 SPP A2DP(音频传输) HFP(免提通话) BLE(低功耗蓝牙)
传输类型 通用数据传输,可用于文件、文本等 专门用于高品质音频流传输 主要用于语音通话相关数据传输 低功耗数据传输,适用于对功耗敏感的设备和小数据量交互
传输速率 相对适中,适合一般性数据传输需求 能够满足音频的高质量传输要求,但对于大数据量非音频数据传输可能效率不高 专注于语音通信的数据速率,相对较低 传输速率较低,但在低功耗模式下能保持稳定连接
应用场景 文件传输、传感器数据采集、连接外部设备(打印机、扫描器等) 蓝牙耳机听音乐、语音通话中的音频传输 车载蓝牙免提通话、蓝牙耳机的语音控制 智能手表与手机的数据同步、健康监测设备数据传输等
功耗 功耗相对较高,不适合长时间连续运行且对功耗要求严格的场景 在音频传输过程中功耗适中,取决于音频质量和播放时长 通话期间功耗较低,但持续通话会消耗一定电量 以低功耗为主要设计目标,非常适合电池供电设备长时间运行
连接稳定性 连接相对稳定,但在复杂环境下可能受到一定干扰 对于音频传输,稳定性要求较高,通常能够提供稳定的音频播放体验 能保证通话过程中的稳定连接,但在信号较弱区域可能出现通话质量下降 连接稳定性较好,但在信号干扰较强或距离较远时可能出现连接中断

通过以上对比,我们可以看出SPP在一般性数据传输场景中具有广泛的适用性,能够满足多种设备间的数据交换需求。

在HarmonyOS Next中,蓝牙串行通信(SPP)为开发者提供了一种简单而有效的设备间数据传输方式。通过合理运用SPP,我们可以轻松实现各种设备之间的数据交互,为用户带来更加便捷、高效的智能体验。就像搭建一座桥梁,让不同的设备能够在蓝牙的世界里畅通无阻地交流数据。希望这篇文章能够帮助大家更好地理解和应用SPP协议,在HarmonyOS开发中创造出更多精彩的应用!嘿,是不是感觉设备间的数据传输变得更加有趣和容易了呢?哈哈!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/832812.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

FANUC发那科工业机器人减速器维修小细节

在现代工业生产中,FANUC发那科机器人已成为不可或缺的一部分。然而,随着时间的推移,发那科机械手减速器可能会出现故障,影响机器人的正常工作。 一、了解减速器的结构与工作原理 在开始FANUC发那科机器人维修之前,了解减速器的结构与工作原理至关重要。FANUC发那科机器人减…

太强了!14.7K star!Windows系统居然还有开源替代版了?!

在操作系统的世界里,Windows 系统一直占据着重要的地位。然而,你可能不知道的是,还有一个拥有 14.7K star 的开源替代版 ——ReactOS。 1、ReactOS 介绍 ReactOS 是一个自由开源的操作系统,其目标是实现与 Windows 系统在二进制级别上的兼容。这意味着,我们可以在这个系统…

HuggingFace 核心组件及应用实战

带着问题来学习什么是Hugging Face?它的目标是什么?Hugging Face 中包含哪些知名的预训练模型?如果我们要在 Hugging Face 中下载 BERT,那么只有一种版本,还是有多种版本可以选择?每一种版本的 BERT 中,只有一种格式还是有多种格式可以适应多种下游任务?Hugging Face 库…

AllPairs工具助力正交表测试用例设计

AllPairs工具助力正交表测试用例设计 正交表法是一种高效的测试方法,特别适用于软件测试中需要处理多个控件及其多种取值组合的情况。以下是对正交表法的详细解释: 一、正交表法概述 正交表法是一种利用正交表来设计测试用例的方法,旨在通过较少的测试次数达到较高的测试覆盖…

SAM4MLLM:结合多模态大型语言模型和SAM实现高精度引用表达分割 | ECCV24

来源:晓飞的算法工程笔记 公众号,转载请注明出处论文: SAM4MLLM: Enhance Multi-Modal Large Language Model for Referring Expression Segmentation论文地址:https://arxiv.org/abs/2409.10542 论文代码:https://github.com/AI-Application-and-Integration-Lab/SAM4MLLM…

信息时代的安全堡垒:500强企业数据安全传输案例解析

数据安全传输,这个是数据安全里一个比较细分的领域,但是包括的传输场景也是很多的,比如隔离网之间的跨网文件传输、企业内外部之间的文件安全外发、总分支之间的数据传输分发、信创环境下的高性能传输、机台等设备的数据采集传输、业务系统之间的自动化传输同步等等。 每家企…

Ubuntu 22.04 LTS 离线安装 Harbor v2.11 (附https认证,Trivy镜像扫描)

Harbor 介绍Harbor是一个开源的企业级Docker Registry服务,它提供了一个安全、可信赖的仓库来存储和管理Docker镜像。Harbor翻译为中文名称为"庇护;居住;"。可以理解为是Docker镜像的"居住环境"或者是镜像的"庇护所"。Harbor最初由VMware公司开…

reposync离线yum源

系统:open Euler 22.03-sp3-x86 reposync ;createrepo 1、配置好yum源 2、下载 下载指定repo到指定目录reposync --repoid EPOL -p /data/EPOL 3、制作镜像仓库cd EPOLcreaterepo .

叮咚!您有一份跨网域跨安全域文件传输方案待查收

跨网域跨安全域文件传输,在很多企业和机构里面,都会存在这样的场景的,比如企业内部会用网络隔离的方式,划分不同的安全域和网段,或者有些机构还有不同的分支机构,就会有不同地域的文件传输需求。 跨网域跨安全域传输的典型应用场景 跨网域跨安全域文件传输的典型应用场景…

rtthread源码completion.c no such file or dir

20241113 从gitee下载rtthread源码,bsp--->stm32--->stm32f407-atk-explorer直接编译报错,如下从百度网盘下载rtthread源码,bsp--->stm32--->stm32f407-atk-explorer编译正常,无错误如果,感到此时的自己很辛苦,那告诉自己:容易走的都是下坡路。坚持住,因为…

团队作业4——项目冲刺-3

团队作业4——项目冲刺-3信息项 内容课程名称 广工计院计科34班软工作业要求位置 作业要求作业目标 小飞棍团队对需求改进和系统设计进行讨论GitHub链接 GitHub一、团队简介队名:小飞棍队团队成员:姓名 学号罗振烘(组长) 3122004748庄崇立 3122004633李响 3121002802何昌洲…