Raspberry php没有将串行数据发送到arduino

时间:2016-01-30 12:06:22

标签: php python arduino raspberry-pi pyserial

我在/ var / www中有2个php页面的覆盆子,一个是led1off.php,另一个是led1on.php。我在cgi-bin中也有2个Python脚本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应该向arduino发送“1”,然后打开一个led。 类似于led1off.php。

事情是我能够输入

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

在终端中,当我这样做时,arduino上的指示灯会亮起。所以arduino上的代码是正确的,2之间有通信,而Python代码是正确的。问题是当我从浏览器加载php时它不起作用。难道我做错了什么?我是否需要授予www-data特殊权限才能发送串行数据?

1 个答案:

答案 0 :(得分:1)

要以超级用户www-data应该在/etc/sudoers中运行命令 - 你能检查它是否在那里吗?

此处提出了类似的问题:sudo in php exec()

正如我们在讨论中发现的那样,此代码将正确运行:

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

希望这有帮助。