PythonスクリプトからWebサイトへのデータ

PythonスクリプトからWebサイトへのデータ

これには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に適切な制限を追加することを忘れないでください。

関連情報