目标
我有一个HITSLAM 相机快门蓝牙按钮(这是一个 AB 快门 3 设备,一种常见的蓝牙相机遥控器),我想使用蓝牙连接到我的 NVIDIA Jetson Nano,这样我就可以使用按钮的输入来完成某些任务。
我做了什么
我正在使用 PyBluez 库进行连接。我使用以下内容找出 AB Shutter 3 使用的端口和协议(target_device_address
AB Shutter 3 的设备地址在哪里):
service_matches = bt.find_service(name=None,uuid=None,address=target_device_address)
first_match = service_matches[0]
print("Port {}, Name {}, Host {}, Protocol {}".format(first_match['port'], first_match['name'], first_match['host'], first_match['protocol']))
这就是我获取要连接的端口 (17) 和它使用的协议 (L2CAP) 的方式。
现在,我尝试使用以下方法连接到它:
client_sock = bt.BluetoothSocket(bt.L2CAP)
client_sock.connect((target_device_address,port))
我还使用了 Python 的本机socket
库(产生了相同的结果):
client_sock = socket.socket(socket.AF_BLUETOOTH, socket.SOCK_SEQPACKET, socket.BTPROTO_L2CAP)
client_sock.connect((target_device_address,port))
它根据它成功连接hcitool
,之后我等待用户输入:
if target_device_address in (subprocess.getoutput("hcitool con")).split():
print('connected')
while True:
data = client_sock.recv(1024)
print(str(data))
问题
- 该设备实际上并未显示为
/dev/input/
. 当我通过 GUI 手动连接它时,它显示为/dev/input/event5
. - 连接后,我的脚本没有捕获任何输入。
我的问题
- 它如何根据
hcitool con
尚未注册为输入设备(并注册任何输入)进行连接? - 你建议做什么?我到处寻找,似乎没有得到适当的解决方案。有一种解决方法可以实现一个
bluetoothctl
用于连接蓝牙遥控器的 bash 脚本,但对我来说,为什么 Python 无法建立此连接并检索信息是没有意义的。