树莓派系列(八):PHP之以root权限执行Python GPIO脚本

2016-01-16 浏览:7587
树莓派系列(八):PHP之以root权限执行Python GPIO脚本
评论:(2)复制地址

上篇开门神器,我最终用的是树莓派做控制器,因为它本身就一直开着,不让它多干些事岂不浪费(是不是有种黑心老板的节奏)。我通过连接树莓派和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()


评论:(2)复制地址

评论列表:

速卖通教程

评论于2016-02-10 14:10:54
[给力] - 回复该评论

夏日博客

评论于2016-02-20 16:03:48
Python 这个语言一直没搞明白。 - 回复该评论

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。