如果搭建树莓派的服务器和PHP没有问题,可以用exec执行python程序,比如打印hello world
但是如果调用python的GPIO库,则没有反应,php代码:
<?php
// echo "hello python";
exec("python3 test1.py",$out);
foreach($out as $value)
{
echo $value."<br/>";
}
?>
以为是环境问题,所以加了个echo,发现正常,那么应该是python问题。python如下:
##树莓派IO控制基础方法
#!/usr/bin/python3
import RPi.GPIO as GPIO
import time
print("这是点灯演示")
GPIO.setmode(GPIO.BCM) ##设置为BCM模式,管脚对应的是BCM编号
print("point 1")
GPIO.setup(2, GPIO.OUT) ##设置2脚为输出
print("point 2")
GPIO.output(2, GPIO.LOW)
blinks = 0
print('开始闪烁')
while (blinks < 5):
GPIO.output(2, GPIO.HIGH) ##点灯
print("点灯")
time.sleep(0.5)
GPIO.output(2, GPIO.LOW) ##关灯
print("关灯")
time.sleep(0.5)
blinks = blinks + 1
GPIO.output(2, GPIO.LOW)
GPIO.cleanup()
print('结束闪烁')
加了两个打印点,结果point1可以出来,point2不能出来,所以是库的问题,一搜原来是sudo权限。参考:
https://blog.csdn.net/lanlz/article/details/76250999
树莓派的这个GPIO库需要sudo才能设置,所以导致在shell可以执行,而被php调用则不行。即使将php文件设置为777,由于服务器的权限是普通用户,所以仍然没用。
使用命令sudo visudo,在最后增加
www-data ALL=(ALL) NOPASSWD: ALL
相当于将服务器设置为管理员用户。
如果树莓派挂外网,肯定不行,但是自己用在内网玩浇花,所以随便了。。
这样,访问php文件后,树莓派点灯正常。