上篇开门神器,我最终用的是树莓派做控制器,因为它本身就一直开着,不让它多干些事岂不浪费(是不是有种黑心老板的节奏)。我通过连接树莓派和L298N来实现控制电机,程序上使用的Python操作端口(需要安装Python GPIO库),写了个脚本,然后再通过php调用这个脚本实现开门。
问题:
在树莓派上单独执行这个Python脚本是能开门的,但通过php调用就不行。
但用Python写个简单的建目录脚本,php调用时可以执行的。
综上分析Python GPIO 库是需要root权限的。
解决:
直接赋予Apache或nginx ROOT权限(感觉不安全 下下策)
按网上所说方法用C程序更换用户UID…编译好执行(失败,还是单独执行可以调用不可以)
变通,让这个脚本主动轮询某个文件内值,php控制这个文件(至少能用起来,但总感觉这个方法不怎么好)
修改/etc/sudoers文件,赋予特定用户特定权限(上上策)
#vi /etc/sudoers 插入下列一行
www-data ALL=(ALL) NOPASSWD: /usr/bin/python opendoor.py#php里调用
system("sudo /usr/bin/python opendoor.py")
附:
树莓派控制电机代码 opendoor.py :import RPi.GPIO as gpio
import time
gpio.setmode(gpio.BOARD)
gpio.setup(29, gpio.OUT)
gpio.setup(31, gpio.OUT)
gpio.output(29, True)
gpio.output(31, False)
time.sleep(2.5)
gpio.output(31, False)
gpio.output(29, False)
time.sleep(1)
gpio.output(31, True)
gpio.output(29, False)
time.sleep(0.7)
gpio.cleanup()