我正在编写一个网站来控制我的Raspberry Pi机器人。我正在使用.py脚本驱动两个步进电机我称之为:
sudo ./GPS.py forward 100 30
拳头论证是要走的路,第二个是要做多少步骤,最后一步是步骤之间的延迟。
脚本打开location.txt文件(看起来像“100/50/18”)并采取协调x = 100,y = 50和Alpha = 18 degress。然后移动,计算新的协调并将其写入此文件。
阅读脚本顶部的部分:
fo = open("location.txt", "r")
data = fo.read()
fo.close()
coordinates= data.split("/")
temp1 = coordinates[0]
temp2 = coordinates[1]
temp3 = coordinates[2]
Alpha= float(temp3)
X = float(temp1)
Y = float(temp2)
然后它会进行所有请求的移动和计算,然后在最后将新的X,Y,Alpha保存回文件:
fo =open("location.txt", "w")
fo.write(str(X)+"/"+str(Y)+"/"+str(Alpha))
fo.close
好吧,这在Putty中非常完美,但是现在我想通过网站驱动我的机器人,所以我已经建立了网站来控制它。
但现在我遇到了问题。现在我有这样的网站:
HTTP --> Javascript --> PHP --> .PY script to move robot.
这有效,但我不知道如何从我的网站上的location.txt刷新X,Y,Alpha坐标。我有个主意:
Javascript运行.PY并等待它完成,然后JS打开.txt并获取数据,最后将新坐标设置到我的网页。但我不知道该怎么做。等待.PY结束就是杀了我。
感谢您的帮助! Yacked2
PS。
我在我的Raspberry Pi上安装了apache,我可以通过网页下载我的.py脚本,然后我可以打开.txt文件。
答案 0 :(得分:1)
这样做的经典网络方式是从客户端进行轮询,直到您被告知更改为止。
E.g。
假设您的主页包含
<div id="locationInfo" />
你已经实现了PHP脚本getLocationInfo.php,它返回一个像这样的JSON对象:
{ date_updated: "13-11-2013 15:45:98",
x_position: 105,
y_position: 120,
alpha: 123 }
在主页面中,您可以使用jQuery编写一个脚本(例如,某些内容 - 但更复杂)
$.get( "getLocationInfo.php", function( data ) {
var html = 'Location: ' + data.x_position + ', ' + data.y_position + ' @' + data.alpha
$( "#locationInfo" ).html( html );
});
上面真正缺少的是在date_updated发生变化时反复轮询和中止。
@ johnny-craig在此描述了一个简单的民意测量示例:jQuery, simple polling example
在这些示例中,只要您拥有所需的数据(通过date_updated更改识别),您就需要退出条件
它可能会起作用,实现起来非常简单,但是会受到网页上的duff请求数量的影响。虽然记住网络在很长一段时间内都在做这种事情。
或者,您可以获取有关它的所有HTML5并阅读websockets。使用websockets,您可以从服务器端而不是客户端发起更新。需要的轮询更少,客户端的响应时间应该更好。
这些内容可以为您提供基础知识: