HTML变量到Python fi

2024-06-01 00:44:31 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在构建一个使用Raspberry Pi的遥控车,它完全可以从ssh键盘输入的Python脚本中运行。我希望它能从手机的陀螺仪上跑出来。我创建了一个apacheweb服务器,并使用源代码:http://www.html5rocks.com/en/tutorials/device/orientation/deviceorientationsample.html来尝试获取陀螺仪信息。我正确地接收到网页上的输入,并且它正确地显示/移动图像。现在我需要将这3个变量导出到一个python脚本中,这个脚本运行在同一个Raspberry Pi上。我不知道从哪里开始,如何跨两个平台导出这些变量。另外,变量需要能够每10毫秒更新一次。我不知道这是最好的设置方法还是使用类似的节点.js会更容易些吗?任何帮助将不胜感激!在


Tags: 服务器脚本comhttp源代码wwwpissh
1条回答
网友
1楼 · 发布于 2024-06-01 00:44:31

有很多方法可以屏蔽这一点,尽管很多方法的延迟可能比你想要的要长(10ms应该是一个合理的目标,尽管我对手机的了解还不够,不知道它是否能以这种速度生成数据),但挑战在于从手机上获取数据,大概是通过无线连接到RPi,然后及时处理。一个具有较低延迟的高级方法(我不打算在这里写)将使用类似于节点.js使用websockets监听来自web页面的更新(然后需要修改网页代码以使用websockets),还可以执行python脚本正在执行的任何操作。一个更快、更脏、但纯粹的python解决方案(加上一点javascript)看起来像:

  1. 配置apache以使用cgi
  2. 在cgi-bin目录中删除以下代码
import socket
import cgi

form = cgi.FieldStorage
x = form["x"]
y = form["y"]
z = form["z"]
s = socket.socket()
s.connect(("localhost",5000))
s.send(",".join([x,y,z]))
print "Content-Type: text/text"     
print                               
print "Debug: sent",x,y,z
  1. 在javascript代码中,使用jquery,每隔10毫秒向http:///cgi-bin发出一个请求/转储数据.cgi?x=&;y=&z=(或任何要传递的值。
    编辑以添加ajax示例: 假设您使用了链接到的示例代码,在标记的某个地方,添加<script src="https://code.jquery.com/jquery-2.1.3.min.js"></script>(或者下载jquery并在您的web服务器上运行,如果您要通过wifi运行所有东西,这可能是更好的选择)

    {cd2>

    然后在deviceOrientationHandler函数中,您应该能够执行类似于

  url = "/cgi-bin/dumpdata.cgi?x="+tiltLR+"&y="+tiltFB+"&z="+dir;
$.ajax({url: url, success: function(result){
        //result will hold the results passed back by the CGI
        $("#debug").html(result);
    }});
  1. 在python脚本中(我假设它有一个事件循环),让它执行如下操作:
   import socket
   s = socket.socket()
   s.bind(("",5000))
   s.listen(5)
   while True:
      cli,addr = s.accept()
      x,y,z = cli.recv(1000).split(",")
      print "DEBUG",x,y,z
      cli.close()
      # do the rest of your loop

相关问题 更多 >