Skip to content

🔌 郊狼情趣脉冲主机 V2 蓝牙协议

📝 核心概览

  • 架构特点:V2 协议采用多特性(Characteristic)分工模式,强度与波形分开控制。
  • 数据结构:数据包为 3 字节(24位),需要进行复杂的位运算拼接。
  • 关键变量S (强度), X (脉冲数), Y (间隙), Z (脉宽)。
  • 实时性:波形数据不具备记忆性,需 每 100ms 发送一次以维持输出。

📶 蓝牙特性

基础 UUID:955Axxxx-0FE2-F5AA-A094-84B8D4F3E8AD
(请将下表中的 xxxx 替换为具体的特性 UUID)

标识符服务 UUID特性 UUID属性数据长度功能描述
Battery_Level0x180A0x1500READNOTIFY1 Byte设备电量 (0-100)
PWM_AB20x180B0x1504WRITENOTIFY3 BytesAB 两通道强度控制
PWM_A340x180B0x1505WRITE3 BytesA 通道 波形数据 (X/Y/Z)
PWM_B340x180B0x1506WRITE3 BytesB 通道 波形数据 (X/Y/Z)

蓝牙名称

设备广播名称通常为:D-LAB ESTIM01

🛠️ 基本原理

郊狼 V2 通过 S (强度)X/Y/Z (波形) 四个变量来控制脉冲。

🔋 电源模块 (S)

  • 控制对象PWM_AB2
  • 数值范围0 ~ 2047 (超过此值无效)
  • 生效机制:写入即刻改变电压并保持。
  • 换算关系App显示值 = S / 7 (即 App 每增加 1,底层 S 增加 7)。

🌊 波形模块 (X, Y, Z)

  • 控制对象PWM_A34 (A通道) / PWM_B34 (B通道)
  • 时效性每组数据仅在 0.1s (100ms) 内有效
  • 控制逻辑
    • X (脉冲连发): 连续 X 毫秒,每毫秒发射 1 个脉冲。范围 0-31
    • Y (脉冲间隙): 发射完 X 个脉冲后,静默 Y 毫秒。范围 0-1023
    • Z (脉冲宽度): 单个脉冲的物理宽度。范围 0-31
      • 实际宽度 = Z * 5us
      • 体感参考:Z > 20 时刺痛感较强,Z 较小时为酥麻感。

💻 蓝牙指令与数据结构

V2 协议的数据包均为 3 Bytes (24 bits),请严格按照位分布进行拼包。

1. 强度数据包 (PWM_AB2)

字节位置Byte 2 (高位)Byte 1 (中位)Byte 0 (低位)
位图RR AAAAAAAAAAA BBBBBBBBBBB
Bit 索引23 - 1615 - 87 - 0
内容保留(2) + A高6位A低5位 + B高3位B低8位
  • Reserved: Bit [23-22]
  • Channel A: Bit [21-11] (11 bits, S值)
  • Channel B: Bit [10-0] (11 bits, S值)

2. 波形数据包 (PWM_A34 / B34)

字节位置Byte 2 (高位)Byte 1 (中位)Byte 0 (低位)
位图RRRR ZZZZZ YYYYYYYYYY XXXXX
Bit 索引23 - 1615 - 87 - 0
内容保留(4) + Z高4位Z低1位 + Y高7位Y低3位 + X全5位
  • Reserved: Bit [23-20]
  • Z (脉宽): Bit [19-15] (5 bits)
  • Y (间隙): Bit [14-5] (10 bits)
  • X (脉冲): Bit [4-0] (5 bits)

🧮 算法与示例

频率计算公式

如何通过 X 和 Y 模拟目标频率(Frequency):

Frequency (Hz)=1000X+Y \text{Frequency (Hz)} = \frac{1000}{X + Y}

为了获得最佳体感,建议使用以下算法根据目标频率反推 X 和 Y:

kotlin
// 推荐比例算法
// Frequency 取值范围:10 ~ 1000
val x = Math.sqrt(Frequency / 1000.0) * 15
val y = Frequency - x

// 注意:当 X:Y > 1:9 (例如 8:2) 时,波形能量密度过大,体感会变弱。

波形序列示例

由于 V2 没有内置波形存储,需通过 App 建立 100ms 定时器连续发送数据。

🚀 场景 1:频率渐变(引擎加速感)

步骤 (每100ms)XYZ预估频率
1513520~7 Hz
2511520~8 Hz
35952010 Hz
44662014 Hz
53372025 Hz
62182050 Hz
71920100 Hz

🥁 场景 2:双频切换(节奏打击)

text
[5, 95, 20]  -> 10Hz 酥麻
[5, 95, 20]  -> 10Hz 酥麻
[5, 95, 20]  -> 10Hz 酥麻
[5, 95, 20]  -> 10Hz 酥麻
[1, 9,  20]  -> 100Hz 爆发
[1, 9,  20]  -> 100Hz 爆发
(循环)

💪 场景 3:恒定频率,变宽(推力增强)

保持 X=1, Y=9 (100Hz),仅改变 Z 值:

text
[1, 9, 4] -> [1, 9, 8] -> [1, 9, 12] -> [1, 9, 16] -> [1, 9, 20]

💡 补充提示

⚠️ 开发核心注意事项

  1. 心跳维持:V2 协议必须每 0.1s 发送一次波形数据包。如果蓝牙写入停止,设备输出也会立即停止。
  2. 数值映射:V2 的 Z=20 大约对应 V3 的 波形强度=100
  3. 体感迟钝:人体对频率变化的感知有延迟,频率切换过快(如每 100ms 变一次频率)可能导致体感混乱,建议通过改变脉宽 (Z) 来制造瞬时节奏感。