如何在通过WIFI连接的另一台机器上发送linux命令?

时间:2018-04-30 08:48:45

标签: python django linux networking raspberry-pi

我的笔记本电脑上有一个Django项目。它工作得很好。现在,这个Django应用检测到一个号牌,将其与数据库匹配,如果找到匹配,那么它必须运行一个电机。

为了运行电机,我使用了Raspberry Pi。所以这就是我的问题,我必须将我的整个项目转移到Pi上,然后从那里执行我的Django服务器,Pi将能够控制电机。

我在想什么:如果我从笔记本电脑上运行Django应用程序,检测到号码牌,如果找到匹配,那么我必须向我的树莓派发送命令以运行电机。

简而言之,我希望web应用程序在machine1和motor程序上运行,以便在machine2上运行,并且它们都通过WIFI连接。

我已经看到很多方法通过ssh发送命令,但我的Pi总是要求输入密码,所以这些方法对我不起作用。有什么选择我可以做到。

2 个答案:

答案 0 :(得分:1)

解决方案1:使用SSH预共享密钥通过SSH登录,无需密码。有关如何操作,请参阅this link。正确配置后,您可以在服务器上运行命令:

ssh hostname-or-ip-of-the-raspi command arg1 arg2 ...

并将在Raspberry PI上执行command arg1 arg2 ...,而不会被提示输入密码。

解决方案2:使用TCP通信,为Raspberry PI编写服务器,为服务器编写客户端。您可以使用原始套接字或某些高级库,例如zmq

答案 1 :(得分:1)

我正在考虑你是一个简单的中间程序员,并在此基础上给你两个解决方案的优点和缺点。

解决方案1:在Raspberry PI上使用简单的Flask应用

您可以修改以下代码,以请求在PI上运行的简单应用执行任何操作。

代码:

from flask import Flask
app = Flask(__name__)

@app.route('/runMotor')
def hello_world():
    runMotor()
    # Run any script here
    return "Motor Ran"

然后,您可以使用覆盆子调用类似的内容:

<your_rasp_ip>:<port>/runMotor

优点:易于实施,您甚至可以将其进一步移动以从防火墙外部使用。

缺点:速度慢,不适合非常快速的并发请求。并发是垮台(或者您可以对请求进行排队,然后检查此问题)

解决方案2 使用MQTT:MQTT是一种机器对机器(M2M)/“物联网”连接协议。它被设计为一个非常轻量级的发布/订阅消息传输。

您可以使用自己的代码,结帐example here

优点:非常轻量级并且消除了并发开销,MQTT是一种异步消息传递协议。这最适用于实时系统。

缺点:MQTT是一种非常轻的消息传递协议,不能支持重负载。