繁体   English   中英

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

[英]Raspberry php not sending serial data to arduino

我在/ var / www中有一个带有2个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')

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应该向打开LED的arduino发送“ 1”。 led1off.php也是如此。

事情是我能打字

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

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

要以超级用户www-data身份运行命令,应该在/etc/sudoers -您能检查一下它是否存在吗?

在这里问了类似的问题: php exec()中的sudo

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

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

希望这可以帮助。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM