这涉及到树莓派和apache2,所以我认为这个问题最好放在这里。
以前从未使用过网络套接字和类似的东西,所以我很迷失并希望得到一些指导......
我有一个 python 脚本,它为我提供了两条数据……伺服电机的角度和物体与超声波传感器的距离。
我需要将此数据发送到我的具有雷达图像的网站。随着角度的变化,雷达图像上的扫描应该改变,并且有障碍物的地方应该显示在我的雷达上。
我的问题是如何以连续的方式将这些数据传送到网站?我的网站上运行着 apache2。现在我已经使用 Ajax 请求让电机在我的树莓派上运行(它就像一辆遥控汽车)。
import RPi.GPIO as GPIO
import time
GPIO.setmode(GPIO.BOARD)
TRIG = 22
ECHO =18
GPIO.setup(TRIG, GPIO.OUT)
GPIO.output(TRIG,0)
GPIO.setup(ECHO, GPIO.IN)
GPIO.setup(33, GPIO.OUT)
pwm=GPIO.PWM(33,100)
pwm.start(5)
time.sleep(0.1)
class rotateRead():
def To180andBackRead():
angle=0
for angle in range(0, 180, 1):
GPIO.setmode(GPIO.BOARD)
duty=float(angle)/10+2.5
pwm.ChangeDutyCycle(duty)
print angle
time.sleep(0.1)
GPIO.output(TRIG,1)
time.sleep(0.00001)
GPIO.output(TRIG,0)
while GPIO.input(ECHO) ==0:
pass
start =time.time()
while GPIO.input(ECHO) ==1:
pass
stop=time.time()
print (stop-start) *17000
angle=180
for angle in range(180, 0, -1):
GPIO.setmode(GPIO.BOARD)
duty=float(angle)/10+2.5
pwm.ChangeDutyCycle(duty)
print angle
time.sleep(0.1)
GPIO.output(TRIG,1)
time.sleep(0.00001)
GPIO.output(TRIG,0)
while GPIO.input(ECHO) ==0:
pass
start =time.time()
while GPIO.input(ECHO) ==1:
pass
stop=time.time()
print (stop-start) *17000
for x in range(0,1,1):
To180andBackRead()
GPIO.cleanup()
答案1
首先,您需要在网站中创建一个端点。最简单的方法是创建一个名为 robots_update.php 的文件,其中包含以下内容。
<?php
$input_data = file_get_contents('php://input');
$decoded_data = json_decode($input_data);
//Do something with $decoded_data, update image or write it to the database.
?>
接下来,通过 http 从 python 发送数据,如下所示
import json
import urllib2
def update_robot(angle, distance):
data = {
'angle' : angle,
'distance' : distance
}
req = urllib2.Request('http://yourwebsite.com/robot_update.php')
req.add_header('Content-Type', 'application/json')
res = urllib2.urlopen(req, json.dumps(data))
res.read()
在计算角度和距离的地方调用此函数。这会工作得很好,但请记住向您的 robots_update.php 添加适当的限制。