Python — Raspberry php не отправляет последовательные данные в arduino

У меня есть малина с 2 php-страницами в / var / www, одна — led1off.php, другая — led1on.php. У меня также есть 2 скрипта Python в cgi-bin led1off.py & led1on.py

led1off.py

#!/usr/bin/env python
Import serial
ser0 = serial.Serial('/dev/ttyACM0'), 9600)
ser0.write('2')

led1on.py

#!/usr/bin/env python
Import serial
ser0 = serial.Serial('/dev/ttyACM0'), 9600)
ser0.write('1')

led1on.php

<?php
exec('sudo -u www-data python /usr/lib/cgi-bin/led1on.py')
?>

led1off.php

<?php
exec('sudo -u www-data python /usr/lib/cgi-bin/led1off.py')
?>

Что должно произойти в теории, когда я загружаю http://192.168.0.2/led1on.php
Скрипт php должен запустить свой код в терминале, чтобы он выполнял led1on.py.
Затем led1on.py должен отправить «1» в arduino, который включает светодиод.
Аналогичная вещь идет для led1off.php.

Дело в том, что я могу печатать

sudo -u www-data python /usr/lib/cgi-bin/led1on.py

В терминале, и когда я это делаю, загорается светодиод на ардуино. Таким образом, код на Arduino правильный, между 2 есть связь, и код Python правильный. Проблема в том, что он не работает, когда я загружаю php из браузера. Я делаю что-то неправильно? Нужно ли давать специальные разрешения для www-данных для отправки последовательных данных?

1

Решение

Для запуска команды от имени суперпользователя www-data должен быть в /etc/sudoers — не могли бы вы проверить, если это там?

Подобный вопрос был задан здесь: sudo в php exec ()

Как мы выяснили во время обсуждения, этот код будет работать правильно:

<?php
$command = escapeshellcmd('sudo /usr/lib/cgi-bin/led1on.py');
$output = shell_exec($command);
echo $output;
?>

Надеюсь это поможет.

1

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

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

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