【问题标题】:Raspberry php not sending serial data to arduinoRaspberry php 不向 arduino 发送串行数据
【发布时间】:2016-01-30 12:06:22
【问题描述】:

我有一个覆盆子,在 /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 授予特殊权限才能发送串行数据?

【问题讨论】:

  • 您是否尝试过从 CLI 进行串行?看看您输入的详细信息是否正确
  • 您是否尝试过在没有来自您的 rasp pi 的 php 脚本的情况下建立连接?
  • 我尝试在终端中输入:“sudo -u www-data python /usr/lib/cgi-bin/led1on.py”,它可以工作。但是如果我从 php 加载它就行不通
  • 所以你已经从你的锉刀上输入了那个命令?你已经从你的 PI 到你的 ADRino 建立了串行连接?

标签: php python arduino raspberry-pi pyserial


【解决方案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;
?>

希望这会有所帮助。

【讨论】:

  • 我已经在 sudoers 中添加了这一行:www-data ALL=(ALL) NOPASSWD:ALL
  • 您是否以www-data 登录?您可以使用whoami 命令来确认这一点吗?此外,也许您还需要在此线程中设置组权限:askubuntu.com/questions/192050/…
  • 如果我在终端中输入“whoami”,就说明我是“pi”。如果我要求 php 页面打印它,它说我是“www-data”
  • 当PHP已经使用www-data账户时,也许你不需要在命令中提供-u www-data?作为pi,在终端中很好,但在PHP中可能不需要?
  • 请同时为www-data 设置一个群组,并为/etc/sudoers 中的群组设置NOPASSWD:ALL
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多