如何通过GUI [111]重新连接蓝牙:连接被拒绝

时间:2019-04-09 01:55:54

标签: python linux python-3.x bluetooth arduino

我一直在进行这个项目,目的是通过蓝牙控制自动驾驶汽车。我正在使用python和PyBluez库与与Arduino Uno接口的HC-06蓝牙接收器进行通信。我的工作正常,但随后尝试实现速度控制和蓝牙的重新连接按钮。它在应用程序启动时曾经用于连接,但是我对此感到厌烦,所以这就是我尝试创建此按钮的原因。可能应该坚持使用我拥有的东西,因为现在它根本无法连接。我不断收到两个相同的错误,要么是[111]:连接被拒绝,要么是[77]:文件描述符处于错误状态。但是,那实际上并没有提供非常有用的信息,而且我仍在尝试找出网络代码中的错误。

我以为HC-06可能已被烧坏,但我可以通过Android手机在蓝牙终端应用程序上连接到它。我尝试过在连接失败后关闭套接字,在初始化时连接套接字,设置套接字超时,并增加端口号,但是似乎没有什么不同。它确实一次成功地与我的连接按钮连接,但是我必须重新启动arduino和应用程序才能执行此操作,此后一直无法重新创建它。


    import bluetooth
    import socket

    class BTconnect:


        def __init__(self, in_address, in_port):
            self.port = in_port
            self.address = in_address
            self.sock = bluetooth.BluetoothSocket(bluetooth.RFCOMM) #initialize socket

        def connect(self):

            #tmpsock = bluetooth.BluetoothSocket(bluetooth.RFCOMM) #initialize socket
            #tmpsock.settimeout(5)
            '''try:
                self.sock.connect((self.address, self.port))
            except:
                print("Connection failed.")
                return False
                sock.shutdown(socket.SHUT_RDWR)'''
            self.sock.connect((self.address, self.port))
            print("Connection successful!")
            sock = tmpsock
            return True

        def sendData(self, data):
            self.sock.send(bytes(data, 'ascii'))
            #self.sock.listen(1)
            #echo = self.sock.recv(1024)
            #print("ECHO: %s" % echo)

        def disconnect(self):
            self.sock.close()
            print("socket closed")

    class Handler: 
        #TO-DO:
        #put all signal handlers here
        def on_window1_destroy(self, *args):
            print("quit on cancel")
            Gtk.main_quit()
            connection.disconnect() 
        def on_connect_button_clicked(self, button):
            print("Connecting...")
            tmp_connect = BTconnect(address, 2)
            #time.sleep(1)
            cstatus.set_text("Connecting...")
            #time.sleep(1)
            #connection.connect()
            time.sleep(1)
            if tmp_connect.connect():
                cstatus.set_text("Connected.")
            else:
                cstatus.set_text("Disconnected.")
            connection = tmp_connect

    address = "20:17:05:08:43:07" #input bluetooth address of receiver
    connection = BTconnect(address,22)
    connection.connect()
    Gtk.main()

我希望一旦两个设备成功对接,连接就会读出“连接成功”,但这在这里没有发生。请注意,这有点像科学怪人代码,因为我要从两个文件中提取出完整的程序范围。有什么理由会拒绝连接?还是像我的操作系统中那样的外部问题?

0 个答案:

没有答案