여기에는 Raspberry Pi와 apache2가 포함되므로 여기에 질문이 가장 적합하다고 생각합니다.
이전에는 웹 소켓이나 그와 유사한 것을 사용해본 적이 없어서 길을 잃었고 지침을 기대하고 있습니다...
저는 두 가지 데이터, 즉 서보 모터의 각도와 초음파 센서에서 물체까지의 거리를 제공하는 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에 적절한 제한 사항을 추가하는 것을 잊지 마십시오.