SPP(Serial Port Profile)协议简介

news/2025/2/21 5:11:33/文章来源:https://www.cnblogs.com/Fitz/p/18723416

SPP_UUID 是什么协议?

SPP_UUID 主要用于 经典蓝牙(Bluetooth Classic,BR/EDR) 中的 串行端口协议(SPP, Serial Port Profile),用于在蓝牙设备之间建立 虚拟串口(Serial Port) 连接,实现类似于 串口通信(UART、RS232) 的数据传输。


1. SPP(Serial Port Profile)协议简介

  • 协议类型: 经典蓝牙(Bluetooth BR/EDR,不支持 BLE)
  • 主要用途: 通过蓝牙模拟串口通信(类似 UART)
  • 应用场景:
    • 蓝牙串口模块(HC-05、HC-06、JDY-08)
    • 车载蓝牙 OBD 设备(OBD2 读码器)
    • 蓝牙打印机(票据打印、标签打印)
    • 工业设备无线通信(PLC、单片机)

SPP 允许两个设备建立点对点(P2P)连接,模拟 RS232 串口,使用 RFCOMM(Radio Frequency Communication)协议 进行数据传输。


2. SPP_UUID(串行端口 UUID)

在 SPP 中,蓝牙设备通过 UUID(通用唯一标识符) 来标识服务,其中 SPP 使用的标准 UUID 是:

00001101-0000-1000-8000-00805F9B34FB

这个 UUID 代表 "Serial Port Profile (SPP)",在蓝牙协议中是 标准化的 UUID


3. SPP 的工作原理

SPP 的数据传输流程:

  1. 设备发现(Discovery)
    • 设备 A 通过 蓝牙扫描(Bluetooth Discovery) 发现周围的设备 B。
  2. 连接建立(Pairing & Bonding)
    • 设备 A 选择设备 B 并尝试配对(某些情况下需要 PIN 码)。
  3. SPP 连接建立(RFCOMM 端口分配)
    • 设备 A 通过 00001101-0000-1000-8000-00805F9B34FB 请求 SPP 连接。
    • 设备 B 监听 RFCOMM 端口(类似串口号) 并接受连接。
  4. 数据传输
    • 设备 A & B 之间建立 双向数据通道,像 串口 一样发送/接收数据。
  5. 连接断开
    • 设备 A 或 B 主动断开连接。

4. SPP 和 BLE(低功耗蓝牙)的区别

特性SPP(Serial Port Profile)BLE(Bluetooth Low Energy)
协议 经典蓝牙(BR/EDR) 低功耗蓝牙(BLE)
UUID 00001101-0000-1000-8000-00805F9B34FB 自定义 GATT UUID
连接方式 使用 RFCOMM 端口模拟串口 使用 GATT 读/写/通知
数据传输速度 更快(最大 3 Mbps) 较慢(典型 1 Mbps)
功耗 较高(适合持续通信) 超低功耗(适合间歇通信)
应用场景 OBD、打印机、单片机无线通信 传感器、智能手环、健康设备

注意:SPP 只能用于 经典蓝牙设备(Bluetooth BR/EDR),而不能用于 BLE(低功耗蓝牙)。


5. SPP 在 Android 代码示例

(1) 连接 SPP 设备

在 Android 上使用 BluetoothSocket 连接支持 SPP 的设备:

BluetoothDevice device = bluetoothAdapter.getRemoteDevice("AA:BB:CC:DD:EE:FF");// SPP 标准 UUID
UUID SPP_UUID = UUID.fromString("00001101-0000-1000-8000-00805F9B34FB");BluetoothSocket socket = device.createRfcommSocketToServiceRecord(SPP_UUID);
socket.connect(); // 连接蓝牙设备

(2) 发送 & 接收数据

连接成功后,可以使用 InputStreamOutputStream 进行串口通信:

// 获取输入输出流
InputStream inputStream = socket.getInputStream();
OutputStream outputStream = socket.getOutputStream();// 发送数据
String message = "Hello SPP";
outputStream.write(message.getBytes());// 读取数据
byte[] buffer = new byte[1024];
int bytesRead = inputStream.read(buffer);
String received = new String(buffer, 0, bytesRead);
Log.d("SPP", "收到数据:" + received);

6. SPP 在单片机(MCU)上的应用

常见的 SPP 蓝牙串口模块

模块型号协议特点
HC-05 SPP(经典蓝牙) 可配置主/从模式
HC-06 SPP(经典蓝牙) 仅支持从机模式
JDY-08 SPP & BLE 兼容 BLE,支持 GATT

单片机(如 Arduino、ESP32)可以通过 UART 串口 连接 HC-05 模块,并与 Android 进行 SPP 通信:

void setup() {Serial.begin(9600);  // 电脑串口Serial1.begin(9600); // 蓝牙 HC-05 串口
}void loop() {if (Serial1.available()) {char c = Serial1.read();Serial.write(c);  // 发送到电脑串口}
}

7. 总结

  1. SPP_UUID (00001101-0000-1000-8000-00805F9B34FB)蓝牙串行端口协议(SPP) 的标准 UUID。
  2. SPP 适用于经典蓝牙(Bluetooth BR/EDR),用于模拟串口(UART、RS232)通信。
  3. 常见应用场景
    • 蓝牙串口模块(HC-05、HC-06)
    • 车载 OBD 蓝牙设备
    • 蓝牙打印机
    • 工业自动化设备
  4. SPP vs BLE
    • SPP(经典蓝牙) 速度快、功耗高,适合大数据传输。
    • BLE(低功耗蓝牙) 低功耗,但数据速率较低,适用于传感器数据采集。

如果你的设备是 SPP 蓝牙串口设备,那么你应该使用 SPP_UUID 进行连接,而不是 BLE 的 GATT 方式!💡

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

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

相关文章

中科蓝讯之Downloader的配置介绍(待完善)

Downloader的配置介绍(待完善)系统配置:软开关机(Soft Power On/Off)定义软开关机是指通过软件控制实现的开关机操作。它通常依赖于设备的内部逻辑和软件程序来执行开关机动作。实现方式按键开关:通过按下按键触发设备内部的软件逻辑,实现开关机。例如,智能手机的电源键…

vscode 开始 python

环境变量设置:修改各版本的文件名: vscode 安装: 安装插件:python及python-snippets(cstrap版本) setting.json:加入:"editor.mouseWheelZoom": true,"python.analysis.completeFunctionParens": true设置为命令行: 可以自定义提示补全:

用豆包+Kimi,一分钟生成想要的PPT!

大家好!在快节奏的现代社会,时间就是金钱。对于经常需要制作PPT的朋友们来说,如何快速、高效地完成演示文稿的制作一直是个头疼的问题。今天,我要给大家介绍如何利用AI工具:豆包+kimi,让你在一分钟内轻松生成想要的PPT! 如何使用豆包+kimi生成PPT? 1、确定主题和内容:…

山东布谷科技:Ludo游戏开发全流程揭秘,打造下一个爆款桌游!

还记得童年时和小伙伴们围坐在一起,掷骰子、走棋子,在Ludo棋盘上斗智斗勇的欢乐时光吗?如今,这款经典桌游正以势不可挡的姿态席卷手游市场,成为休闲娱乐的新宠! Ludo起源于印度的古老游戏Pachisi,玩法类似国内的飞行棋,是一种适合2至4人玩的战略类棋盘游戏。其游戏规则…

20250219

1. 鸡蛋开始建仓 2. 胶系迎来变盘窗口。跌破17600之前,维持反弹至18200

179 选择最有可能的句子

对比一下语言模型和机器翻译的区别如下最大的不同就是机器翻译有一个编码和解码的过程(语言模型直接使用零向量作为隐状态),可以理解为机器翻译时一个条件概率,条件就是输入的句子

【Kali】解决Kali Linux中pip安装报错问题

我们在Kali Linux中会用Python执行相关脚本。但是在运行脚本过程中,难免会遇到安装依赖的问题。 如,下面Python代码中。 import requests from bs4 import BeautifulSoup import random分别导入了requests bs4等模块。由于缺少相关模块,代码运行会报错。因此,我们首先需要通…

SAP ABAP ALSM_EXCEL_TO_INTERNAL_TABLE 导入excel 和 GUI_UPLOAD 导入 txt

ALSM_EXCEL_TO_INTERNAL_TABLE 导入excel GUI_UPLOAD 导入 txt 这两个都是比较常见的导入功能,也很好用。 可以自定义封装一个类似下图导入功能。 1.ALSM_EXCEL_TO_INTERNAL_TABLE,这个函数模块可以把用户本地 EXCEL 文件中的一个矩形块中的内容上传到一个内表中。 输入参数…

Hello World---------queue

queue引入Jar 包 activemq-all-5.15.2.jarProducepackage com.city.producer;import org.apache.activemq.ActiveMQConnectionFactory;import javax.jms.*;public class JMSProducer {//默认连接用户名private static final String USERNAME ="admin";//默认连接密码…

Msmap :一个内存 WebShell 生成器

Msmap 是一个内存 WebShell 生成器。兼容各种容器、组件、编码器、WebShell/代理/杀手和管理客户端。用法 git clone git@github.com:hosch3n/msmap.git cd msmap python generator.py编辑config/environment.py # Auto Compile auto_build = True# Base64 Encode Class File b…

【一文解读】内外网文件摆渡系统详解:跨网传输与数据安全保障

在数字化时代,企业在内外网之间传输文件已经成为日常运作的一部分。然而,如何确保在不同网络环境下高效、安全地进行文件传输,成为许多企业面临的重要挑战。内外网文件摆渡系统应运而生,成为解决跨网数据传输瓶颈和保障数据安全的关键工具。本文将深入解析内外网文件摆渡系…