Estoy tratando de hacer un interruptor de luz automatizado. Para hacer esto estoy usando un motor paso a paso. El objetivo es que yo pueda acceder a mi raspberry pi desde un navegador y usar 2 botones simples, "Encender" y "Apagar", controlar el motor que encenderá el interruptor de la luz. He escrito este sencillo script en python para encender el motor, que ha sido probado desde la Pi y funciona perfectamente. Se llama stepper.py y se encuentra en /var/www/html :
import RPi.GPIO as GPIO import time GPIO.setmode(GPIO.BOARD) control_pins = [7,11,13,15] for pin in control_pins: GPIO.setup(pin, GPIO.OUT) GPIO.output(pin, 0) halfstep_seq = [ [1,0,0,0], [1,1,0,0], [0,1,0,0], [0,1,1,0], [0,0,1,0], [0,0,1,1], [0,0,0,1], [1,0,0,1] ] for i in range(256): for halfstep in range(8): for pin in range(4): GPIO.output(control_pins[pin], halfstep_seq[halfstep][pin]) time.sleep(0.001) GPIO.cleanup() print "Motor Rotation Completed" También en /var/www/html tengo páginas index.html e index.php:
index.html: <!DOCTYPE html> <html lang="en" dir="ltr"> <head> <meta charset="utf-8"> <title>Smart Light Switch</title> </head> <body> <h1>Smart Light Switch</h1> <form action="index.php" method="post"> <input type="submit" name="on" value="Turn Lights On"> <input type="submit" name="off" value="Turn Lights Off"> </form> </body> </html> index.php: <?php if ($_SERVER['REQUEST_METHOD'] == "POST" and isset($_POST['on'])) { lightOn(); } elseif ($_SERVER['REQUEST_METHOD'] == "POST" and isset($_POST['off'])) { lightOff(); } function lightOn() { $command = escapeshellcmd('python stepper.py'); $output = shell_exec($command); echo "Light Turned On"; } function lightOff() { echo "Light Turned Off"; } ?>Esencialmente, el HTML solo muestra los 2 botones y al hacer clic va al archivo php donde se alcanzan las funciones con éxito. Sin embargo, el script para encender el motor paso a paso no se ejecuta. He buscado en línea y parece que lo que tengo es la forma correcta de ejecutar un script de python desde php, pero no funciona.