0

我正在编写一个网站来控制我的 Raspberry Pi 机器人。我正在使用 .py 脚本驱动两个步进电机,我称之为:

sudo ./GPS.py forward 100 30

第一个参数是要走的路,第二个是要做多少步,最后是步骤之间的延迟。

该脚本打开 location.txt 文件(它看起来像“100/50/18”)并采用坐标 x=100、y=50 和 Alpha=18 度数。然后移动,计算新的坐标并写入这个文件。

阅读脚本顶部的部分:

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。

我在我的树莓派上安装了 apache,我可以通过网页下载我的 .py 脚本,我可以打开 .txt 文件。

4

1 回答 1

1

执行此操作的经典 Web 方式是从客户端轮询,直到您被告知更改。

例如

  • 调整您的文件,使其包含更新的日期+时间。
  • 实现一个PHP 脚本来打开文件并将内容作为JSON 对象提供(更新日期,X、Y 和 Alpha 作为属性)
  • 加载页面时,加载位置并存储所有 4 个组件。
  • 当您向服务器发送移动指令时,开始轮询更改- 定期重新加载JSON 对象,直到您有一个更新日期的对象。然后您可以停止轮询。
  • 然后应存储此更新的位置并用于更新您的页面。
  • 如果达到最大值,请设置轮询和中止错误的最大次数。

假设您的主页包含

<div id="locationInfo" />

您已经实现了返回 JSON 对象的 PHP 脚本 getLocationInfo.php,如下所示:

{ 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,您可以从服务器端而不是客户端发起更新。需要的轮询更少,客户端的响应时间应该更好。

这里有一些可以为您提供基础知识的东西:

于 2013-11-13T15:23:13.260 回答