Как вызвать скрипт python для работы с GPIO Raspberry Pi 3 из php файла?

Есть форма на html, которая через js отправляет данные в php файл. В этом php файле есть функция shell_exec, shell_exec(escapeshellcmd('python script.py 1')); которая передает команду для запуска скрипта на python. Когда пытаюсь обработать в python скрипте простую команду, типа print(sys.argv[1]), то соответственно получаю на веб странице результат "1". Но когда дело доходит до работы с GPIO Raspberry Pi 3, то скрипт не выполняется. Даже не выполняется команда print, которую я оставил в конце скрипта для тестирования.
index.html
<!doctype html>
<head>
        <title>Title</title>
</head>
<body>
        <form id="form">
                <p>On/Off led control</p>
                <input type="checkbox" name="led-toggle" id="led-toggle" value="1">
        </form>
        <script>
                const ledToggle = document.querySelector('#led-toggle');

                async function formSend(evt) {
                        const form = document.querySelector('#form');
                        let data = new FormData(form);
                        console.log(data)

                        let response = await fetch("./index.php", {
                                method: 'post',
                                body: data

                        });

                        if (response.ok) {
                                let result = await response.json();
                                console.log(result)
                        }

                }

                ledToggle.addEventListener('change', formSend);
        </script>
</body>

index.php:
if ($_POST['led-toggle']) {
        shell_exec(escapeshellcmd('python test.py 1'));
} else {
         shell_exec(escapeshellcmd('python test.py 0'));
}

test.py
import sys
import RPi.GPIO as GPIO

GPIO.setmode(GPIO.BCM)
GPIO.setup(5, GPIO.OUT)

GPIO.output(5, sys.argv[1])


print(sys.argv[1])
  • Вопрос задан
  • 96 просмотров
Решения вопроса 1
Vindicar
@Vindicar
Подозреваю, что дело в правах - скрипт на питоне выполняется от имени пользователя веб-сервера, у которого может не быть прав на доступ к GPIO.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
SilenceOfWinter
@SilenceOfWinter
та еще зажигалка...
1. смотри примеры IO для GPIO
2. попробуй PHP порт GPIO
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы