我正在尝试通过蓝牙插座在2个RPI之间创建双向通信。我需要在主机上运行主程序,同时等待连接,然后有能力在任何时候从任何设备推送消息,并中断主线程在任何时候收到。收到的消息将对另一个RPi执行操作。E、 g.打开主机将根据从主机发送到从设备的信息打开从设备上的LED,反之亦然。我正在处理这个小步骤,目前正在等待连接,在这一点上只使用连接发送/接收输入。
非常感谢你为解决这一挑战而提出的任何想法。
这是圆周率大师的密码。奴隶连接良好。我的server_程序函数是基本的发送/接收握手,当进程中没有运行连接时,它工作得很好。错误发生在“data=连接接收(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")