我正在使用Raspberry Pi,它正在处理一些WS2812B RGB-LED。我可以使用neopixel库和Python控制灯光以及一切。现在很好。
我希望此Python脚本运行一个仅处理灯光管理的无限循环。调光LED,改变颜色等等。但是,我希望能够从其他脚本中获取命令。假设我要输入将更改颜色的shell命令。在我的无限Python脚本(LED处理程序)中,我将能够识别该命令并将颜色或灯光模式柔和地更改为所需的颜色。
一个想法是,如果有新命令,则要不断查找文本文件。而且我的Shell脚本能够在此文本文件中插入命令行。
但是您能告诉我,是否有更好的解决方案?
非常感谢。
答案 0 :(得分:3)
一种方法是公开一个TCP服务器,然后通过TCP与Python进程通信。这里是一个有关如何创建TCP服务器的简单示例,其中展示了服务器脚本(运行LED)和命令脚本:example
答案 1 :(得分:2)
我建议使用您的python脚本打开一个端口,并使其从该端口接收命令(网络编程)。尽管这会使您的项目更加复杂,但它是一个非常可靠的实现。
答案 2 :(得分:1)
您可以使用ZeroMQ并将其托管在本地。它提供了bindings for Python。这是一个示例脚本(发送方和接收方):
from threading import Thread
import zmq
class Sender(Thread):
def run(self):
context = zmq.Context()
socket = context.socket(zmq.PUB)
socket.connect('tcp://127.0.0.1:8000')
while True:
socket.send_string(input('Enter command: '))
class Receiver(Thread):
def run(self):
context = zmq.Context()
socket = context.socket(zmq.SUB)
socket.bind('tcp://127.0.0.1:8000')
socket.setsockopt(zmq.SUBSCRIBE, b'')
while True:
data = socket.recv().decode('ascii')
print(data) # Do stuff with data.
接收器将是控制RPi上的灯的实例,发送器将是使您输入各种命令的命令行脚本。优点是ZeroMQ支持bindings for various programming languages,并且您还可以通过网络发送/接收命令。
答案 3 :(得分:0)
另一种解决方案是允许来自网络连接的命令。带有“无限循环”的脚本将从套接字读取输入并执行命令。