SPP(Serial Port Profile)协议简介

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 方式!💡

posted @   Fitz  阅读(41)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
点击右上角即可分享
微信分享提示