gpt4 book ai didi

python - 如何触发Raspberry Pi 3从服务器采取行动

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:47:20 26 4
gpt4 key购买 nike

我目前正在开发一个系统,我需要向 Raspberry 发送通知以运行 Python 文件。它很像观察者模式设计,我的服务器是发布者,Raspberry 是观察者。值得注意的是,我当时实际上需要与一个 Raspberry 进行交互(即使我有几十个)。具体来说,在特定事件中,我需要警告单个 Raspberry 它必须采取行动。

我整晚都在字面上搜索它,但找不到任何有用的东西。没有什么能真正给我关于如何实现它的线索。

我能找到的最接近的答案是 this technology firm's product called PubNub这实际上可以工作。但是,由于我需要的是一对一的交互,这可能是不必要的,因为它旨在将数据发布到多个客户端。

长话短说,我需要触发树莓派根据来自服务器的一些数据,每当它收到数据时采取一些行动。

服务器在 Amazon 上运行并使用 Python 2.7 实现。

如果我遗漏了任何细节,请随时向我询问。

感谢大家的支持,


编辑

只是对我的回答进行了改进的最近更新。据我了解,套接字能够管理这个过程。例如从客户端(在我的例子中是树莓派)监听服务器和服务器发送一些数据。取自this site ,我设法在我的本地计算机上运行了一个示例。我使用端口 5000 作为他们的“交汇点”。

代码如下:

客户端.py

#!/usr/bin/env python

import socket


TCP_IP = '127.0.0.1'
TCP_PORT = 5000
BUFFER_SIZE = 1024
MESSAGE = b"Hello, World!"

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((TCP_IP, TCP_PORT))
s.send(MESSAGE)
data = s.recv(BUFFER_SIZE)
s.close()

print("received data:", data)

服务器.py

#!/usr/bin/env python

import socket


TCP_IP = '127.0.0.1'
TCP_PORT = 5000
BUFFER_SIZE = 20 # Normally 1024, but we want fast response

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind((TCP_IP, TCP_PORT))
s.listen(1)

conn, addr = s.accept()
print('Connection address:', addr)
while 1:
data = conn.recv(BUFFER_SIZE)
if not data: break
print("received data:", data)
conn.send(data) # echo
conn.close()

但是,我还有一些疑问。

首先,我想了解在我部署项目时同样的事情是否有效以及如何。如果这行得通 - 假设我有一个像“www.thisisanexampleurl.com”这样的服务器 url - 只需为其分配一个端口,行得通吗?

其次,假设第一个问题已经完成,如何让它连续,使其在接收和发送数据一次后不停止。因为目前,当它进行数据传输时,它会停止工作。

再次感谢您的所有支持,请不要犹豫向我询问我遗漏的更多详细信息。

最佳答案

你应该能够做这么简单的事情:

在你的 pi 上运行这样的东西:

import socket

s = socket.socket()
host = ""
port = 12345
s.bind((host, port))
s.listen(5)

while True:
try:
clientsock, addr = s.accept()
except OSError:
continue
message = clientsock.recv(20)

#the code you want to run
print("doing %s" % message)

clientsock.close()

每次你想让 pi 采取行动时,在你的服务器上:

import socket

s = socket.socket()
host = "0.0.0.0"
port = 12345
s.connect((host, port))
s.send("foo")
s.close()

关于python - 如何触发Raspberry Pi 3从服务器采取行动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41204441/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com