これにはRaspberry Piとapache2が含まれているので、ここに質問が最も適していると思います。
以前は、Webソケットやそのようなものを使ったことがないので、迷子になり、指示を期待していました。
私は2つのデータ、すなわちサーボモータの角度と超音波センサーから物体までの距離を提供するPythonスクリプトを持っています。
このデータをレーダー画像を含むウェブサイトに送信する必要があります。角度が変わるにつれて、レーダー画像のスキャンも変更され、障害物がある場所がレーダーに表示されます。
私の質問は、このデータをウェブサイトに継続的に送信する方法です。私のウェブサイトでapache2が実行されています。これで、Ajaxリクエストを使用してRaspberry Piでモーターを作動させました(リモートコントロールカーのように)。
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に適切な制限を追加することを忘れないでください。