Я создал небольшую программу, которая позволит мне управлять выводами GPIO через Python. Это все прошло гладко. Проблема возникает, когда я пытаюсь вызвать этот скрипт Python из PHP. Кажется, что он теряет функциональность для управления выводами GPIO и вылетает без всяких ошибок.
Существуют следующие файлы:
При запуске примера команды python3 RRR.py -c ON -r 5
, он должным образом берет под контроль 5-ые устройства, сопоставленные контакты.
Я могу получить ту же команду, разместив следующий URL -> 192.168.x.x/control.php?com=ON&dev=5
PHP эхо показывает мне $command
var содержит следующее python3 RRR.py -c ON -r 5
Я использую PHP для выполнения этой команды, используя следующее -> $output = shell_exec($command);
а затем просмотреть вывод с помощью -> echo "<pre>$output</pre>"
Я получаю следующий вывод:
Sending command (ON) to device (5)
Performing operation. This will take 1 second(s)...
Please wait...
Это когда контакты GPIO являются средствами управления из следующих строк в файле RRR.py:
GPIO.setup(devPin, GPIO.OUT)
GPIO.output(devPin, GPIO.LOW)
time.sleep(sleepTime)
GPIO.output(devPin, GPIO.HIGH)
куда devPin
это номер булавки GPIO, который был разработан из config.ini
, Не беспокойтесь об этой части, она отлично работает. Номера выводов по-прежнему правильны при запуске из PHP. Команды GPIO просто не работают.
Это наводит меня на мысль, что проблема полностью связана с самой первой строкой файла, однако ошибки не генерируются. Первая строка:
import RPi.GPIO as GPIO
Может быть, у PHP shell_exec нет правильных разрешений для использования модуля Python GPi.GPIO? Кто-нибудь знает, как бы я это исправить? Буду благодарен за любые предложения. Я бы очень хотел, чтобы этот проект заработал 🙂
tl; dr: Все работает FINE из командной строки, но полностью прерывается, когда из PHP вызываются точно такие же команды.
В соответствии с Доступ к контактам GPIO без рута. Нет доступа к / dev / mem. Попробуйте запустить как root! ваш скрипт на python напишет /dev/gpiomem
,
Это не работает, потому что пользователь, который запускает ваш скрипт на Python (www-data
) запрещено писать на это устройство:
gpio
группа.www-data
не является ни root
ни в gpio
группа.Чтобы получить доступ к портам gpio, вам нужно поставить www-data
пользователь в правильной группе:
sudo usermod -aG gpio www-data
Не забудьте перезапустить ваш http-сервер (и php-fpm
если это применимо). В противном случае вы не заметите разницу.
Других решений пока нет …