Unity下使用InTheHand 32Feet配对BrainLink显示已配对但无法连接
问题根因
你遇到的问题是32Feet库的默认配对逻辑和系统手动配对逻辑的差异导致的,核心原因有三个:
- 手动通过系统蓝牙界面配对时,Windows会自动枚举BrainLink设备支持的所有蓝牙服务,为其SPP(串口仿真协议)服务分配对应的虚拟COM口,而Neurosky.ThinkGear库本质是通过读取虚拟COM口的数据完成设备连接,所以可以正常识别设备
- 32Feet的
BluetoothSecurity.PairRequest方法默认只完成蓝牙设备的身份认证配对,不会主动触发服务枚举步骤,导致系统不会为设备分配虚拟COM口,ThinkGear库找不到对应的串口自然无法连接 - 你当前代码没有传入BrainLink的默认配对PIN,无PIN配对的授权等级不足,也会导致后续服务访问被系统拦截
修复方案
步骤1:补全配对PIN
BrainLink系列设备的默认配对PIN为0000,调用配对方法时传入该参数,保证配对授权等级符合要求:
bool paired = AttemptPair(btDevice, "0000");
步骤2:配对后主动触发SPP服务枚举
配对成功后手动调用接口枚举设备的SPP服务,强制系统完成虚拟COM口注册,修改后的AttemptPair方法参考:
private bool AttemptPair(BluetoothDeviceInfo btDevice, string pin = null) { // 检查设备是否已配对 if (btDevice.Authenticated) return true; bool result = BluetoothSecurity.PairRequest(btDevice.DeviceAddress, pin); if (result) { // SPP服务的标准UUID,所有蓝牙串口设备通用 Guid sppUuid = new Guid("00001101-0000-1000-8000-00805F9B34FB"); try { // 主动查询SPP服务,触发系统注册虚拟COM口 btDevice.GetServiceRecords(sppUuid); // 等待系统完成COM口注册,可根据实际情况调整等待时长 System.Threading.Thread.Sleep(2000); } catch (Exception ex) { Debug.LogError($"服务枚举失败:{ex.Message}"); return false; } } btDevice.Refresh(); return result; }
步骤3:检查Unity播放器权限
打开Unity的编辑 -> 项目设置 -> 播放器,切换到Windows平台配置,确保以下权限已开启:
- 蓝牙权限
- 专用网络访问权限
- 允许提升进程权限
完成上述修改后重新测试,代码配对的设备就可以被ThinkGear库正常识别。
内容的提问来源于stack exchange,提问作者The Manly Fairy
相关产品推荐
相关产品推荐

