Raspberry php不向arduino发送串行数据

Raspberry php不向arduino发送串行数据,php,python,arduino,raspberry-pi,pyserial,Php,Python,Arduino,Raspberry Pi,Pyserial,我在/var/www中有一个带有两个php页面的树莓,一个是led1off.php,另一个是led1on.php。我在cgi-bin-led1off.py和led1on.py中还有2个Python脚本 led1off.py #!/usr/bin/env python Import serial ser0 = serial.Serial('/dev/ttyACM0'), 9600) ser0.write('2') #!/usr/bin/env python Import serial ser

我在/var/www中有一个带有两个php页面的树莓,一个是led1off.php,另一个是led1on.php。我在cgi-bin-led1off.py和led1on.py中还有2个Python脚本

led1off.py

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

#!/usr/bin/env python 
Import serial
ser0 = serial.Serial('/dev/ttyACM0'), 9600)
ser0.write('2')
#!/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')
?>
<?php
exec('sudo -u www-data python /usr/lib/cgi-bin/led1off.py')
?>

在终端,当我这样做时,arduino上的led亮起。因此arduino上的代码是正确的,2之间有通信,Python代码是正确的。问题是,当我从浏览器加载php时,它不起作用。我做错什么了吗?我是否需要授予www data发送串行数据的特殊权限?

以超级用户身份运行命令
www data
应该在
/etc/sudoers
中-您可以检查它是否存在吗

这里也提出了类似的问题:

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

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


希望这能有所帮助。

您是否尝试过CLI中的串行命令?要查看您是否输入了正确的详细信息,您是否尝试过在不使用ur rasp pi中的php脚本的情况下建立连接?我尝试过在终端中键入:“sudo-u www-data-python/usr/lib/cgi-bin/led1on.py”,效果良好。但是如果我从phpso加载它,它就不工作了。你是从rasp键入命令的吗?您已经从PI到ADRino建立了串行连接?我已经在sudoers中添加了这一行:www data ALL=(ALL)NOPASSWD:ALLAre您是以
www data
身份登录的吗?您能用
whoami
命令确认这一点吗?另外,也许你还需要像这个线程一样设置组权限:如果我在终端中输入“whoami”,它会说我是“pi”。如果我要求php页面打印它,它会说我是“www数据”,当php已经使用
www数据
帐户时,您可能不需要在命令中提供
-u www数据
?作为
pi
在终端中很好,但在PHP中可能不需要它?请为
www-data
和NOPASSWD:ALL设置一个组,用于
/etc/sudoers