Skip to content

Instantly share code, notes, and snippets.

@kasuganosora
Created January 31, 2026 13:08
Show Gist options
  • Select an option

  • Save kasuganosora/77f56a494f7d70f3581f9b5b6142bcf3 to your computer and use it in GitHub Desktop.

Select an option

Save kasuganosora/77f56a494f7d70f3581f9b5b6142bcf3 to your computer and use it in GitHub Desktop.
WildOne 控制方式
# WildOne 设备 569805 - nRF Connect 控制指南
## 📱 设备信息
| 属性 | 值 |
|------|-----|
| **产品名称** | WildOne |
| **产品编码** | 569805 |
| **通信方式** | 2.4G (蓝牙BLE广播) |
| **蓝牙名称** | 空 (无需扫描) |
| **经销商** | WildOne |
| **官网** | https://www.ssi-japan.net/ |
---
## 🔧 控制原理
### ⚠️ 重要说明
**这不是传统的BLE连接设备!**
- ❌ 不需要扫描蓝牙设备
- ❌ 不需要建立GATT连接
- ✅ 直接通过蓝牙BLE广播发送控制指令
- ✅ 使用 Manufacturer Specific Data (厂商特定数据)
---
## 📡 蓝牙广播配置
### 基本设置
| 参数 | 值 |
|------|-----|
| **广播模式** | Advertising Mode: Low Power |
| **可连接** | Connectable: ❌ No |
| **发射功率** | Tx Power: High |
| **广播时长** | 1000 ms (1秒) |
### Manufacturer Specific Data
| 字段 | 值 |
|------|-----|
| **Company ID** | 0xFFA0 (65440) |
| **nRF Connect显示** | FFA0 |
| **Data Length** | 5 字节 |
**⚠️ 重要提示:**
- 在 nRF Connect 的 Manufacturer Data 字段中输入:`65440`
- 扫描时会看到显示为:`FFA0`
- 后跟 5 字节控制命令数据
**完整广播数据格式:**
```
FFA0 AA 0B 01 01 05
↓ ↓ ↓ ↓ ↓ ↓
厂商 命令开始...
ID 数据(5字节)
```
---
## 🎮 控制指令格式
### 指令结构(5字节)
```
字节位置 | 字节值 | 说明
--------|--------|-------------------
0 | 0xAA | 固定头部
1 | 0x0B | 经典模式命令
2 | 组号 | 1=旋转, 2=吸吮
3 | 按钮号 | 1-8 (旋转组), 1-4 (吸吮组)
4 | 强度 | 0-9 (0=停止, 1-9=强度等级)
```
### 示例
```
旋转 01,强度 5:
AA 0B 01 01 05
吸吮 03,强度 9:
AA 0B 02 03 09
停止旋转:
AA 0B 01 00 00
停止吸吮:
AA 0B 02 00 00
停止所有模式 (全局停止):
AA 14 00 00 00
```
### 完整命令协议
| 命令值 | 功能 | WildOne 支持 | 用途 |
|--------|------|--------------|------|
| 0x01 | Speech Mode | ❌ | 语音控制 |
| **0x0B** | **Classic Mode** | ✅ | 经典模式(旋转/吸吮) |
| 0x0C | Heating | ❌ | 加热功能 |
| 0x0D | Voice Switch | ❌ | 声音开关 |
| 0x0F | Critical Strike | ❌ | 爆击功能 |
| 0x10 | Alarm Clock | ❌ | 闹钟功能 |
| **0x14** | **Stop Command** | ✅ | 停止所有模式 |
| 0x1B | Electricity | ❌ | 电功能/排气 |
---
## 🔘 设备按钮配置
### 信号说明
- **on_signal**: `"组号,按钮号"` - 启动特定按钮
- **shut_signal**: `"组号,0"` - 停止特定组(按钮号设为0)
### 旋转组 (Rotation)
| 按钮 | on_signal | 指令(强度5) | shut_signal | 停止指令 | 强度等级 |
|------|-----------|--------------|-------------|----------|----------|
| 01 | "1,1" | `AA 0B 01 01 05` | "1,0" | `AA 0B 01 00 00` | 0-9 |
| 02 | "1,2" | `AA 0B 01 02 05` | "1,0" | `AA 0B 01 00 00` | 0-9 |
| 03 | "1,3" | `AA 0B 01 03 05` | "1,0" | `AA 0B 01 00 00` | 0-9 |
| 04 | "1,4" | `AA 0B 01 04 05` | "1,0" | `AA 0B 01 00 00` | 0-9 |
| 05 | "1,5" | `AA 0B 01 05 05` | "1,0" | `AA 0B 01 00 00` | 0-9 |
| 06 | "1,6" | `AA 0B 01 06 05` | "1,0" | `AA 0B 01 00 00` | 0-9 |
| 07 | "1,7" | `AA 0B 01 07 05` | "1,0" | `AA 0B 01 00 00` | 0-9 |
| 08 | "1,8" | `AA 0B 01 08 05` | "1,0" | `AA 0B 01 00 00` | 0-9 |
### 吸吮组 (Suction)
| 按钮 | on_signal | 指令(强度5) | shut_signal | 停止指令 | 强度等级 |
|------|-----------|--------------|-------------|----------|----------|
| 01 | "2,1" | `AA 0B 02 01 05` | "2,0" | `AA 0B 02 00 00` | 0-9 |
| 02 | "2,2" | `AA 0B 02 02 05` | "2,0" | `AA 0B 02 00 00` | 0-9 |
| 03 | "2,3" | `AA 0B 02 03 05` | "2,0" | `AA 0B 02 00 00` | 0-9 |
| 04 | "2,4" | `AA 0B 02 04 05` | "2,0" | `AA 0B 02 00 00` | 0-9 |
---
## 📊 设备支持的功能
根据设备配置,WildOne 569805 支持以下功能:
| 功能 | 状态 | 说明 | 底层命令 |
|------|------|------|---------|
| 经典模式 | ✅ | 自定义按钮控制 | `0x0B` |
| 视频模式 | ✅ | 视频同步控制 | `0x0B` (组号=0) |
| 声音控制 | ✅ | 麦克风音量响应 | `0x0B` (组号=0) |
| 摇晃控制 | ✅ | 摇晃检测响应 | `0x0B` (组号=0) |
| 划一笔 | ✅ | 手势绘制控制 | `0x0B` (组号=0) |
| 音乐模式 | ❌ | 不支持 | - |
| AI模式 | ❌ | 不支持 | - |
| 加热 | ❌ | 不支持 | `0x0C` |
| 放电/排气 | ❌ | 不支持 | `0x1B` |
| 爆击 | ❌ | 不支持 | `0x0F` |
| 闹钟 | ❌ | 不支持 | `0x10` |
---
## 🎯 智能模式的工作原理
虽然设备有视频、声音控制、摇晃、划一笔等智能模式,但它们**最终都使用 Classic Mode (0x0B)** 命令:
### 智能模式命令格式
```
AA 0B 00 00 强度
```
| 字节 | 值 | 说明 |
|------|-----|------|
| 0 | 0xAA | 固定头部 |
| 1 | 0x0B | Classic Mode |
| 2 | 0x00 | 组号=0(智能模式固定) |
| 3 | 0x00 | 按钮号=0(智能模式固定) |
| 4 | 强度 | 1-10(根据环境自动调节) |
### 与经典模式的区别
| 模式 | 组号 | 按钮号 | 用途 |
|------|------|--------|------|
| 经典模式 | 1(旋转) 或 2(吸吮) | 1-8 或 1-4 | 手动选择具体按钮 |
| 智能模式 | 0 | 0 | 自动调节强度,不指定具体按钮 |
**注意:** 智能模式最终调用的是**经典模式的底层命令**,只是组号和按钮号都设为0,强度值由APP根据视频、声音、摇晃等输入自动计算。
---
## 🚫 停止命令详解
### 停止特定模式
```
停止旋转: AA 0B 01 00 00
停止吸吮: AA 0B 02 00 00
```
### 全局停止命令
```
AA 14 00 00 00
```
**作用:** 停止所有正在运行的任何模式(经典、视频、声音、摇晃等)
**⚠️ 重要提示:**
- 停止命令只会停止电机运行
- **不会释放真空/阀门**
- WildOne 569805 不支持自动释放阀门(discharge=false)
- 如需释放真空,需手动操作或使用设备的物理释放按钮
---
## 🎯 快速参考表
### 旋转模式指令
| 操作 | 指令 | 十六进制 |
|------|--------|----------|
| 旋转01,强度5 | `AA 0B 01 01 05` | 0xAA0B010105 |
| 旋转02,强度7 | `AA 0B 01 02 07` | 0xAA0B010207 |
| 旋转08,强度9 | `AA 0B 01 08 09` | 0xAA0B010809 |
| 停止所有旋转 | `AA 0B 01 00 00` | 0xAA0B010000 |
### 吸吮模式指令
| 操作 | 指令 | 十六进制 |
|------|--------|----------|
| 吸吮01,强度5 | `AA 0B 02 01 05` | 0xAA0B020105 |
| 吸吮03,强度8 | `AA 0B 02 03 08` | 0xAA0B020308 |
| 吸吮04,强度9 | `AA 0B 02 04 09` | 0xAA0B020409 |
| 停止所有吸吮 | `AA 0B 02 00 00` | 0xAA0B020000 |
### 全局指令
| 操作 | 指令 | 十六进制 |
|------|--------|----------|
| 停止所有模式 | `AA 14 00 00 00` | 0xAA14000000 |
---
## ⚙️ 进阶技巧
### 1. 快速切换按钮
无需停止广播,直接修改 Data 字段:
```
当前: AA 0B 01 01 05
改为: AA 0B 01 02 05 (切换到02)
```
### 2. 同时控制多个功能
创建预设按钮(nRF Connect支持):
```
预设1: 旋转01强度5 - AA 0B 01 01 05
预设2: 吸吮02强度7 - AA 0B 02 02 07
预设3: 停止 - AA 14 00 00 00
```
### 3. 强度调节技巧
```
快速调节: 每次改变 1-2 级
慢速调节: 每次改变 3-4 级
平滑调节: 连续广播 3 个递增指令
```
### 4. 智能模式模拟
用 nRF Connect 模拟智能模式:
```
模拟摇晃强度5: AA 0B 00 00 05
模拟声音强度8: AA 0B 00 00 08
模拟视频强度10: AA 0B 00 00 0A
```
---
## 🐛 故障排除
### 问题1: 设备无响应
**可能原因:**
- Company ID 错误(应为 65440)
- Data 格式错误(应为5字节)
- 蓝牙未开启
**解决方法:**
1. 检查 Company ID: `65440` (扫描时显示为 `FFA0`)
2. 检查 Data: `AA 0B 01 01 05`
3. 确保蓝牙已开启
4. 移动手机靠近设备(< 1米)
### 问题2: 设备启动但立即停止
**可能原因:**
- 强度设置为 0
- 设备超时保护
**解决方法:**
1. 确保强度字节 ≥ 1
2. 重新发送指令
### 问题3: 只能控制旋转,无法控制吸吮
**检查指令:**
```
旋转组: 第3字节 = 1
吸吮组: 第3字节 = 2
```
### 问题4: 停止后真空未释放
**重要说明:**
- WildOne 569805 的吸吮模式**没有主动阀门**
- 停止命令 `AA 14 00 00 00` 只停止电机
- 电机停止后,真空会**通过机械方式缓慢自然泄气**
- 不需要手动释放阀门或操作物理按钮
**泄气特性:**
- 停止后真空会缓慢释放(通常 5-15 秒)
- 泄气速度取决于当前真空强度和机械结构
- 高强度停止后泄气时间更长
- 用户会感觉到逐渐放松的效果
---
## 💡 最佳实践
### 1. 广播时序
```
建议流程:
1. 开始广播 → 等待 1000ms
2. 设备执行动作
3. 如需调整,修改 Data 后重新广播
4. 完成后停止广播
```
### 2. 安全使用
```
强度建议:
- 初次使用: 1-3 级
- 常规使用: 4-6 级
- 体验使用: 7-9 级
切换模式:
- 先停止当前模式
- 等待 0.5 秒
- 启动新模式
```
### 3. 节省电量
```
设置建议:
- Advertising Mode: Low Power
- Tx Power: Medium (近距离时)
- 广播时长: 控制完成后立即停止
```
### 4. 吸吮模式使用提示
**真空释放机制:**
```
停止后自动泄气:
- 电机停止后,真空会缓慢自然泄气
- 泄气时间:通常 5-15 秒(取决于初始强度)
- 无需手动操作,等待即可自然释放
- 高强度停止后泄气时间更长
```
**优雅停止技巧:**
```
推荐流程:
1. 逐步降低强度(9→7→5→3→1)
2. 在最低强度(1)时停止
3. 等待自然泄气完成(5-10秒)
```
**快速停止流程:**
```
直接停止:
1. 发送停止命令:AA 0B 02 00 00
2. 等待自然泄气(5-15秒)
3. 设备自动恢复正常状态
```
---
## 🌐 Web Bluetooth API 限制说明
### ⚠️ Chrome Web Bluetooth API 无法控制此设备
**根本原因:**
WildOne 设备使用 **BLE 广播包** 通信,而 Chrome Web Bluetooth API 只支持 **GATT 连接** 通信,两种机制完全不兼容。
### 技术对比
| 通信方式 | Chrome Web Bluetooth API | WildOne 设备 |
|---------|----------------------|--------------|
| 角色 | Central(中心设备) | Peripheral(外设) |
| 连接方式 | GATT 连接 | BLE 广播(无需连接) |
| 数据传输 | 读写 Characteristic | 发送广播包 |
| Advertising | ❌ 不支持 | ✅ 必需 |
| Peripheral | ❌ 不支持 | ✅ 必需 |
### Chrome Web Bluetooth API 实际能力
```javascript
// ✅ 支持的功能
navigator.bluetooth.requestDevice() // 请求设备
device.gatt.connect() // GATT 连接
characteristic.writeValue() // 写入数据
characteristic.readValue() // 读取数据
// ❌ 不支持的功能
// BLE Advertising (广播) - 没有 API
// Peripheral 角色 - 只能作为 Central
// 发送广播包 - 不支持 Manufacturer Data 广播
```
### 为什么不兼容?
**传统 BLE 设备通信流程:**
```
手机/Chrome → GATT 连接 → 设备
读写 Characteristic
```
**WildOne 设备通信流程:**
```
手机 → BLE 广播包 → 设备
↓ (FFA0 AA 0B 01 01 05)
设备监听广播并响应
```
MDN 官方文档确认:
- Web Bluetooth API 只提供 GATT 相关接口
- 没有 Advertising 或 Peripheral 相关 API
- API 设计明确为 Central 角色
---
### 可行的替代方案
如果你想用 Web 技术栈控制 WildOne:
#### 1. **原生 App** ⭐ 推荐
- **Android**: 使用 `BluetoothLeAdvertiser` API
- **iOS**: 使用 `CBPeripheralManager` API
- 完整支持 BLE 广播
- 可参考文档中的 `BeaconManager.java` 代码
#### 2. **Electron 应用** ✅
- 基于 Web 技术栈(HTML/CSS/JS)
- 可以调用 Node.js 的蓝牙库
- 完整支持 BLE 广播
- 示例库:`noble` (macOS/Linux), `ble-hci-socket` (Windows)
#### 3. **Python 脚本** ✅
- 配合 USB 蓝牙适配器
- 使用 `bleak` 库(跨平台)
- 完整支持 BLE 广播
#### 4. **Web USB + 串口适配器** ⚠️ 复杂
- 购买 USB 蓝牙适配器(支持广播)
- 使用 WebUSB/WebHID API 与适配器通信
- 通过适配器发送 BLE 广播
- 需要硬件支持
#### 5. **PWA + 原生能力** ❌ 不可行
- 即使安装为 PWA
- Chrome 仍不提供 BLE 广播 API
- 无解决方案
---
### 推荐方案
| 需求 | 推荐方案 | 理由 |
|------|----------|------|
| 快速测试 | nRF Connect | 现成工具,已验证可用 |
| 跨平台桌面应用 | Electron | Web 技术栈 + 完整蓝牙支持 |
| 移动端 | 原生 App | 最佳用户体验和性能 |
| 自动化脚本 | Python | 简单直接 |
| Web 应用 | ❌ 不可行 | Web Bluetooth API 限制 |
---
## 🔗 相关资源
- **设备官网**: https://www.ssi-japan.net/
- **nRF Connect下载**:
- Android: https://play.google.com/store/apps/details?id=no.nordicsemi.android.mcp
- iOS: https://apps.apple.com/app/nrf-connect/id1054362703
- **蓝牙规范**: https://www.bluetooth.com/specifications
---
## 📝 注释
本文档基于以下分析:
- APK反编译代码分析
- 设备配置文件 (product_code: 569805)
- 蓝牙通信协议逆向工程
- 双手机测试验证
**技术栈:**
- 通信方式: BLE 4.2 Advertising
- 数据格式: Manufacturer Specific Data
- 厂商ID: 65440 (0xFFA0)
- nRF Connect显示: FFA0
- 指令长度: 5 字节
- 支持命令: 0x0B (Classic), 0x14 (Stop)
---
**最后更新**: 2026-01-31
**适用设备**: WildOne (569805)
**协议版本**: v1.1
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment