从 PHP 运行脚本时,RPi GPIO 控件丢失(没有任何错误)



我一直在创建一个小程序,允许我通过Python控制GPIO引脚。这一切都很顺利。当我尝试从 PHP 调用此 python 脚本时,就会出现问题。它似乎失去了控制GPIO引脚的功能,并且无声地崩溃而没有任何错误。

存在以下文件:

  • RRR.py - 丢失烫发的主文件
  • configCreator.py - 生成一个 config.ini 文件
  • RRR.py 文件利用
    • config.ini - 已生成的配置
    • install.py - 安装 apache2 和 php,并生成链接到 RRR.py 文件的网页。
    • index.php - 仅包含表单的简单页面
    • control.php - 文件使用 GET 检索变量并构建要执行的命令。

当运行python3 RRR.py -c ON -r 5的示例命令时,它会正确控制第 5 个器件映射引脚。

我可以通过放置以下 URL 来获取相同的命令 ->192.168.x.x/control.php?com=ON&dev=5PHP 回显向我展示了 var$command包含以下python3 RRR.py -c ON -r 5

我使用 PHP 使用以下 ->$output = shell_exec($command);来执行此命令 ,然后使用 ->echo "<pre>$output</pre>"查看输出

我得到以下输出:

Sending command (ON) to device (5)
Performing operation. This will take 1 second(s)...
Please wait...

这是 GPIO 引脚通过 RRR.py 文件中的以下行进行控制时:

GPIO.setup(devPin, GPIO.OUT)
GPIO.output(devPin, GPIO.LOW)
time.sleep(sleepTime)
GPIO.output(devPin, GPIO.HIGH)

其中devPin是从config.ini中计算出的 GPIO 引脚号。不用担心这部分,它工作正常。从 PHP 运行时,引脚号仍然正确。GPIO 命令根本不起作用。

这使我相信问题完全出在文件的第一行,但是,不会生成错误。第一行是:

import RPi.GPIO as GPIO

也许PHP的shell_exec没有使用GPi.GPIO python模块的正确perms?有人知道我会如何解决这个问题吗?我将不胜感激任何和所有的建议。我真的很想让这个项目:)


tl;dr :从命令行一切正常,但是当从PHP调用完全相同的命令时,完全中断。

根据访问 GPIO 引脚没有根。无法访问/dev/mem。尝试以根用户身份运行!你的 Python 脚本将写入/dev/gpiomem.

这是行不通的,因为运行你的python脚本(www-data)的用户不允许写入这个设备:

  • 要在那里写作,你需要是根或gpio组。
  • 用户www-data既不root也不在gpio组中。

为了访问 gpio 端口,您需要将www-data用户放在正确的组中:

sudo usermod -aG gpio www-data

不要忘记重新启动您的 http 服务器(如果适用,请重新启动php-fpm)。否则,您不会注意到差异。

相关内容

最新更新