树莓 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')

--

指示灯1亮起.php

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

指示灯1熄灭.php

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

理论上应该发生的事情是当我加载 http://192.168.0.2/led1on.phpphp 脚本应该在终端中运行其代码,以便 led1on.py 执行。然后 led1on.py 应该将"1"发送到打开 LED 的 arduino。类似的事情也适用于led1off.php。

问题是我能够打字

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

在终端中,当我这样做时,arduino 上的 LED 会亮起。所以arduino上的代码是正确的,2之间有通信,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;
?>

希望这有帮助。