两个树莓互相交流

2024-05-16 08:20:07 发布

您现在位置:Python中文网/ 问答频道 /正文

我将准备两个覆盆子通过python程序相互交谈。在开始之前,我会明白哪种方法是最简单的。更准确地说,覆盆子A接收到GPIO的输入。一个python代码读取GPIO的状态,并将一个输入发送给另一个python代码读取的raspberry B。覆盆子B python代码向覆盆子发回一条消息,说明做了什么。两颗覆盆子在同一个网络上。 如何通过网络实现两个覆盆子之间的通信?我应该使用什么来通过网络发送和接收输入? 非常感谢你的帮助


Tags: 方法代码程序网络消息覆盆子gpio状态
1条回答
网友
1楼 · 发布于 2024-05-16 08:20:07

在Raspberry B上创建一个TCP套接字服务器,在Raspberry a上创建一个相应的TCP套接字客户端。您将发现大量的示例和教程详细介绍如何执行此操作。阅读有关套接字类型和标志的python文档。

基本上,您必须导入socket库(import socket)并创建一个socket对象,如下所示:

import socket
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

在服务器端,将服务器自身的ip地址和任意未使用的端口绑定到套接字,然后开始侦听传入的请求:

sock.bind('192.168.1.35', 9050)
sock.listen(1)  # allow only 1 connection
connection, client_address = server_socket.accept()
try:
  # Receive the data
  while True:
    data = connection.recv(128)   # the buffer in this example is 128 bytes
    if data:
    :
    : do something with the received data and
    : send the modified data back as response
    :
    connection.sendall(data)
    else:
      break

finally:
  # Clean up the connection
  connection.close()

在客户端,再次首先创建相应的套接字,然后将其连接到正在侦听的远程服务器ip地址和端口。

sock.connect('192.168.1.35', 9050)  # connect to remote server

您可以在循环中监视GPIO,并使用sendall发送数据。确保服务器端的接收缓冲区足够大,可以容纳您发送的数据。

# Send data
socket.sendall(data)

# Look for the response
data = client_socket.recv(128)   # Make sure the buffer is big enough

完成后可以关闭连接:

client_socket.close()

这基本上就是您的通信所需的一切,只要您不需要异步通信或一次连接多个。由于我不知道你如何监控GPIO,以及你想对响应做什么,所以我没有深入了解客户端的更多细节。

相关问题 更多 >