Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/289.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
2个RPI(主/从)之间通过蓝牙套接字的Python双向通信_Python_Sockets_Bluetooth_Bidirectional - Fatal编程技术网

2个RPI(主/从)之间通过蓝牙套接字的Python双向通信

2个RPI(主/从)之间通过蓝牙套接字的Python双向通信,python,sockets,bluetooth,bidirectional,Python,Sockets,Bluetooth,Bidirectional,我正在尝试在两个RPI之间通过蓝牙套接字创建双向通信。我需要在主机上运行主程序,同时等待连接,然后能够在任何时候从任何一个设备推送消息,并在收到消息时中断其中一个设备上的主线程。收到的消息将对其他RPi执行操作。例如,根据从主设备到从设备发送的信息,打开主设备将打开从设备上的LED,反之亦然。我正在小步解决这个问题,目前正在等待连接,此时只需使用连接发送/接收输入 我的插座在发送/接收模式下正常工作。我现在正尝试进入多进程以等待连接,这是可行的,但是我失去了连接,因为据我所知,我无法在创建连接的

我正在尝试在两个RPI之间通过蓝牙套接字创建双向通信。我需要在主机上运行主程序,同时等待连接,然后能够在任何时候从任何一个设备推送消息,并在收到消息时中断其中一个设备上的主线程。收到的消息将对其他RPi执行操作。例如,根据从主设备到从设备发送的信息,打开主设备将打开从设备上的LED,反之亦然。我正在小步解决这个问题,目前正在等待连接,此时只需使用连接发送/接收输入

我的插座在发送/接收模式下正常工作。我现在正尝试进入多进程以等待连接,这是可行的,但是我失去了连接,因为据我所知,我无法在创建连接的进程之外访问它。所以我正在努力制定下一步,我在想我应该使用线程、异步还是坚持使用进程

非常感谢您为解决这一挑战而提出的任何想法

这是Pi大师的代码。我很好。我的服务器程序功能是基本的发送/接收握手,在进程中不运行连接时工作正常。错误发生在“data=conn.recv(1024).decode()”行,因为未定义“conn”

我一直在使用多处理器管理器和值,但它们似乎无法处理套接字的连接

from multiprocessing import Pool
import socket

#----------- Processes -----------
def WaitSlaveConnection():
    print("Waiting for slave")
    hostMACAddress = 'XX:XX:XX:XX:XX:XX' # The MAC address of a Bluetooth adapter on the server.
    port = 3
    size = 1024
    server_socket = socket.socket(socket.AF_BLUETOOTH, socket.SOCK_STREAM, socket.BTPROTO_RFCOMM)
    server_socket.bind((hostMACAddress,port))
    server_socket.listen(1)

    conn, address = server_socket.accept()  # accept new connection
    print("Connection from: " + str(address))

    return "Connected"

#############################
###########  Main ###########
#############################

def server_program():

    while True:
        data = conn.recv(1024).decode()
        if not data:
            # if data is not received break
            break
        print("from connected user: " + str(data))
        data = input(' -> ')
        conn.send(data.encode())  # send data to the client

    conn.close()  # close the connection


if __name__ == '__main__':
    app_pool = Pool(processes=20)

    slave_conn = app_pool.apply_async(WaitSlaveConnection)

    while True:
        if slave_conn.get(timeout=None) == "Connected":
            print("Yes")

            server_program()

        else:
            print("Waiting for Slave")