我有一个通过RF遥控器打开的投影机,我想通过arduino或rpi克隆特定的开机触发器。
我已经做了一些测试,看起来遥控器是一个标准的蓝牙HID,工作原理就像任何蓝牙配对输入设备时,投影机是开着的,它的"板载Android引导.但是,当投影机关闭时,显然没有配对的BT连接。所以我推测RC上的电源按钮必须发送一个单独的射频信号。当我开始通过BLE扫描仪应用程序嗅闻遥控器发送的蓝牙信号时,我注意到,在按下电源按钮时它首先发送特定类型的分组(其看起来是标准BT信号),但随后在立即意识到不存在配对的设备时(2秒)切换到另一个BLE数据包。我假设 * 这 * 触发电源打开。
我已经研究了非配对BLE信号、广告、UUID、信标,但无法通过使用不同的iOS应用程序(听起来有希望能够广告UUID)以及随机插入我可以通过Bluetooth Smart Scanner App从RC读取的内容来重现投影仪上的相同行为(开机):
- 一读
{
kCBAdvDataIsConnectable = 1;
kCBAdvDataLocalName = "BLuetooth 4.0 RC";
kCBAdvDataRxPrimaryPHY = 129;
kCBAdvDataRxSecondaryPHY = 0;
kCBAdvDataServiceUUIDs = (
"Human Interface Device"
);
kCBAdvDataTimestamp = "657062407.4927959";
}
- 二读:
{kCBAdvData是可连接的= 1;kCBAdvData本地名称="蓝牙4.0 RC";kCBAdvData制造商数据=〈0d00ffff 42415634 2e3337〉;kCBAdvDataRx主要物理层= 129;kCBAdvDataRx辅助物理层= 0;kCBAdvDataServiceUUID =("人机接口设备");kCBAdvData时间戳="657078255.763785";}
我可以用我的iPhone或RPI4原型克隆/复制这个信号吗?如果可以,我需要哪些信息来做广告?
谢谢大家!
3条答案
按热度按时间wwtsj6pe1#
了解人机接口设备(UID)服务是一个标准的蓝牙LE GATT服务。它通常用于为键盘、鼠标、游戏控制器或遥控器交换数据。
蓝牙LE GATT服务比蓝牙LE广告更复杂--您不能只发送蓝牙LE数据包(例如信标广告)并期望它触发HID服务中的某些内容。
两个BLE设备中的一个必须建立BLE连接。对各种GATT特征的读/写操作用于通过此连接交换数据。虽然HID服务有一个specification,您可以通过阅读来理解,但投影机肯定有一个使用HID服务的专有方法。您必须对此进行逆向工程。嗅探器可能会帮助您。
如果您只对上电操作感兴趣,逆向工程过程可能并不复杂。很可能是单个特性写入导致上电。您需要弄清楚是哪个特性以及应该写入什么值。
对遥控器使用HID服务的方式进行逆向工程后,您肯定可以使用CoreBluetooth API在iOS中实现该功能,或使用Linux BlueZ API在Raspberry Pi上实现该功能。
mnowg1ta2#
在ubertooth的帮助下,我可以扫描XGIMI Elfin投影机远程电源开/关按钮的BLE广告。现在我可以使用
我不知道其他XGIMI投影机的其他XGIMI遥控器是否使用了相同的BLE广告数据,但我认为打开投影机的机制是相同的。
如果您拥有XGIMI投影机,您可以使用EFR Connect BLE移动应用程序(Silicon Laboratories)测试发送BLE广告。希望以下截图显示了我使用的设置:
Screenshot 1Screenshot 2
nle07wnf3#
我还设法打开**Xgimi Halo +**投影仪从Android手机和nRF连接移动应用程序(HID模拟是not supported在iOS上)。
除了指定制造商数据和服务之外,我还必须指定扫描响应数据。
以下是我使用的方法:
0x1812
感谢@Helge为我指出正确的方向。再次查看遥控器的nRF嗅探器日志后,我从
ADV_IND
和SCAN_RSP
消息中提取了数据,并使用发现的值在nRF Connect应用程序中创建了广告。