python — управление RPi GPIO потеряно (без ошибок) при запуске скрипта из переполнения стека

Я создал небольшую программу, которая позволит мне управлять выводами GPIO через Python. Это все прошло гладко. Проблема возникает, когда я пытаюсь вызвать этот скрипт Python из PHP. Кажется, что он теряет функциональность для управления выводами GPIO и вылетает без всяких ошибок.

Существуют следующие файлы:

  • RRR.py — основной файл, который теряет перми
  • configCreator.py — генерирует файл config.ini, который
  • Файл RRR.py использует
    • config.ini — Конфигурация, которая была сгенерирована
    • install.py — устанавливает apache2 и php и создает веб-страницу, которая ссылается на файл RRR.py.
    • index.php — простая страница только с формой
    • control.php — Файл использует GET для получения переменных и создает команду для выполнения.

При запуске примера команды 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 вызываются точно такие же команды.

0

Решение

В соответствии с Доступ к контактам GPIO без рута. Нет доступа к / dev / mem. Попробуйте запустить как root! ваш скрипт на python напишет /dev/gpiomem,

Это не работает, потому что пользователь, который запускает ваш скрипт на Python (www-data) запрещено писать на это устройство:

  • Чтобы написать там, вам нужно быть пользователем root или gpio группа.
  • Пользователь www-data не является ни root ни в gpio группа.

Чтобы получить доступ к портам gpio, вам нужно поставить www-data пользователь в правильной группе:

sudo usermod -aG gpio www-data

Не забудьте перезапустить ваш http-сервер (и php-fpm если это применимо). В противном случае вы не заметите разницу.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]