玩转HarmonyOS蓝牙串口协议(SPP):设备间数据交换超简单 原创

lyc2333333
发布于 2025-6-26 21:10
浏览
0收藏

作为一个经常用蓝牙连传感器和打印机的开发者,今天必须安利HarmonyOS的SPP协议!之前做项目时用它实现手机和硬件设备的数据传输,简直像搭了座无线桥梁,现在来分享这些超实用的技巧~

一、SPP是啥?设备对话的「翻译官」

第一次接触SPP时,发现它就像蓝牙世界里的串口翻译官——能让两台设备像用数据线连接一样传数据。比如我之前做智能家居项目,温湿度传感器通过SPP把数据传给手机,不用连Wi-Fi也能实时同步,特别适合没网的场景。

SPP的核心就是建立蓝牙串口连接,常见用法包括:

  • 手机传文件到相机(户外没网时救大命)
    • 传感器实时传数据到主控设备
    • 手持设备连蓝牙打印机打小票

二、三步实现设备「手拉手」传数据

1. 服务端:先搭个「接待站」

服务端得先开个监听Socket等客户端连接,代码像这样:

// 创建设备监听,uuid是SPP的标准标识
let serverId = -1;
let sppOption = {
    uuid: '00001101-0000-1000-8000-00805f9b34fb',
    secure: true // 开启安全连接
};
socket.sppListen('server1', sppOption, (err, id) => {
    if (err) {
        console.error('监听失败啦:' + err.code);
        return;
    }
    serverId = id;
    console.log('监听成功,等客户端来连~');
});

// 等待客户端连接
let clientId = -1;
socket.sppAccept(serverId, (err, id) => {
    if (err) {
        console.error('客户端连接失败');
        return;
    }
    clientId = id;
    console.log('客户端连上啦!');
});

2. 客户端:主动「敲门」连服务端

客户端得知道服务端的地址和UUID,比如连打印机时这样做:

// 填目标设备的蓝牙地址(像MAC地址一样的字符串)
let deviceAddr = '00:11:22:33:44:55';
socket.sppConnect(deviceAddr, {
    uuid: '00001101-0000-1000-8000-00805f9b34fb',
    secure: true
}, (err, socketId) => {
    if (err) {
        console.error('连接失败,检查地址对不对呀');
        return;
    }
    console.log('连接成功!开始传数据~');
    
    // 传一段数据,比如'ABCD'
    let data = new Uint8Array([65, 66, 67, 68]);
    socket.sppWrite(socketId, data.buffer);
});

三、SPP和其他蓝牙协议怎么选?

整理了个对比表,方便大家根据场景选协议:

协议 SPP BLE(低功耗蓝牙) A2DP(音频)
适合场景 传文件、传感器数据 智能手表同步、健康设备 蓝牙耳机听歌
速度 中等(比BLE快) 较慢 适合音频流
耗电 中等(持续传数据费电) 超省电(适合电池设备) 听歌时耗电中等
我的常用场景 相机传照片到手机 智能手环传心率数据 无线耳机听歌

最后碎碎念

记得第一次用SPP连打印机时捣鼓了好久,后来发现关键是UUID要填对(就是那个很长的字符串)。现在我的开发板上常备SPP测试代码,调试硬件时特别方便~

©著作权归作者所有,如需转载,请注明出处,否则将追究法律责任
分类
标签
收藏
回复
举报
回复
    相关推荐