我一直在创建一个小程序,允许我通过Python控制GPIO引脚。一切顺利。当我尝试从PHP调用此python脚本时会发生此问题。它似乎松散了控制GPIO引脚的功能,并且无任何错误地静默崩溃。
存在以下文件:
运行python3 RRR.py -c ON -r 5
的示例命令时,它可以正确控制第5个设备映射的引脚。
我可以通过放置以下网址获得相同的命令 - > 192.168.x.x/control.php?com=ON&dev=5
PHP回显显示$command
var包含以下python3 RRR.py -c ON -r 5
我使用PHP使用以下命令执行此命令 - > $output = shell_exec($command);
然后使用 - &gt;查看输出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没有正确的perms来使用GPi.GPIO python模块?任何人都知道如何解决这个问题?我会感激任何和所有的建议。我真的很想让这个项目起作用:)
tl; dr:从命令行运行FINE,但是当从PHP调用完全相同的命令时完全中断。
答案 0 :(得分:0)
根据Access GPIO pins without root. No access to /dev/mem. Try running as root!,您的python脚本将写入/dev/gpiomem
。
这不起作用,因为不允许运行python脚本(www-data
)的用户写入此设备:
gpio
组。www-data
既不是root
也不是gpio
组。要访问gpio端口,您需要将www-data
用户放在正确的组中:
sudo usermod -aG gpio www-data
不要忘记重新启动您的http服务器(如果适用,还可以php-fpm
)。否则你不会注意到差异。