python – BlueZ AutoReconnect作为设备到PC

我正在使用Python中的设备上的代码处理HID蓝牙设备;目前它可以通过运行连接到PC:

os.system("hciconfig hcio class 0x002560")
os.system("hciconfig hcio name DataPaqWalk")

然后我们可以使用pybluez连接套接字并等待连接:

print("Waiting for connections")

self.scontrol=BluetoothSocket(L2CAP)
self.sinterrupt=BluetoothSocket(L2CAP)
self.scontrol.listen(1) # Limit of 1 connection
self.sinterrupt.listen(1)
self.ccontrol,cinfo = self.scontrol.accept()
self.cinterrupt, cinfo = self.sinterrupt.accept()

这有效,我们有一个线程轮询hcitool con来检测Windows PC(适配器)断开我们转储套接字并再次收听的地方. hci设置没有安全性,因此连接到它的PC会自动配对 – 这一切都有效.

但是,当设备断电时会出现问题; PC正确检测到设备已消失且仍处于配对状态.我想要做的是让设备自动连接到它配对的PC.我显然得到了PC的Mac地址,我正在尝试连接使用:
(P_CTRL为17,P_INTR为19)

self.ccontrol,cinfo = self.scontrol.connect(('C8:FF:28:79:05:D4', self.P_CTRL))
self.controlClientMac = cinfo[0]
self.controlClientPsm = cinfo[1]
print ('control is ' + self.controlClientMac + " " + str(self.controlClientPsm))

self.cinterrupt,cinfo = self.scontrol.connect(('C8:FF:28:79:05:D4', self.P_INTR))
self.interruptClientMac = cinfo[0]
self.interruptClientPsm = cinfo[1]
print ('interrupt is ' + self.interruptClientMac + " " + str(self.interruptClientPsm))

这基本上试图连接并让我回来:

Traceback (most recent call last):
  File "server/btk_server.py", line 267, in <module>
    myservice = BTKbService();
  File "server/btk_server.py", line 226, in __init__
    self.device.listen();
  File "server/btk_server.py", line 174, in listen
    self.ccontrol,cinfo = self.scontrol.connect(('C8:FF:28:79:05:D4', self.P_CTRL))
  File "<string>", line 5, in connect
bluetooth.btcommon.BluetoothError: (111, 'Connection refused')

在蓝牙窗口对话框中,您可以看到它轻触连接但直接返回配对.问题是;如何让设备连接到配对的Windows适配器?请注意,我在bluetoothctl中得到了类似的响应.

解决方法:

你能不能自动启动时在rpi上运行脚本,开始寻找蓝牙插座? https://www.dexterindustries.com/howto/run-a-program-on-your-raspberry-pi-at-startup/

上一篇:java – 蓝牙传输App在使用InputStream.read()后没有错误就停止了


下一篇:c# – 如何配置WPF项目以使用BLE?