【问题标题】:Apache PHP command wont control Raspberry pi GPIOApache PHP 命令不会控制 Raspberry pi GPIO
【发布时间】:2015-12-31 01:02:26
【问题描述】:

好吧,我对 Raspberry Pi 和 Python/PHP/Apache 很陌生。我试图让我的 PHP 脚本运行我创建的 python 文件,以通过我的家庭网络激活 5v 继电器。在通过 SSH 的终端中,我可以激活 Python 脚本,它可以控制我的继电器。当我尝试通过我的 Web 服务器上的 PHP 脚本激活继电器时,我什么也得不到。我的 PHP 脚本和 Python 脚本如下。非常感谢任何帮助!

我的 Python 代码位于 /home/pi 中,名称为“garagedoorleft.py” 我的 PHP 代码位于 /var/www/html 作为“index.php”

<html>
<head>
<meta charset="UTF-8" />
<title>Example document</title>
</head>


<?php
if (isset($_POST['LeftOPEN']))
{
exec("sudo python /home/pi/garagedoorleft.py");
}
?>
<form method="post">
<button name="LeftOPEN">Left Door</button>&nbsp;


</form>
</html>



#!/usr/bin/python

# Import required Python libraries
import RPi.GPIO as GPIO
import time

# Use BCM GPIO references instead of physical pin numbers
GPIO.setmode(GPIO.BCM)

# init list with pin numbers

pinList = [2]

# loop through pins and set mode and state to 'low'

for i in pinList: 
    GPIO.setup(i, GPIO.OUT) 
    GPIO.output(i, GPIO.HIGH)

def trigger() :
        for i in pinList:
          GPIO.output(i, GPIO.LOW)
          time.sleep(0.5) 
          GPIO.output(i, GPIO.HIGH)
          GPIO.cleanup()


try: 
    trigger()


except KeyboardInterrupt:
  print "  Quit" 
  # Reset GPIO settings
  GPIO.cleanup()

【问题讨论】:

  • gpio 通常需要 sudo 权限(我看到你正在调用它......但 php 没有 TTY 所以它不能提示输入 sudo 密码......)

标签: php python linux apache


【解决方案1】:

我不确定exec 是如何与管道一起工作的,但我认为你可以做到

exec("echo SUDO_PASSWORD_FOR_MACHINE | sudo -S -p '' python my_gpio.py")

这会将 sudo 密码通过 stdin 传递给 sudo 命令...我不确定执行此类操作有多安全...

或者你可以尝试自己提升权限

如果是python脚本,添加到顶部

 import sys,os
 if os.getuid() != 0:  # not sudo so spawn as sudo
    exit(os.system("echo SUDO_PASSWORD_FOR_MACHINE | sudo -S -p '' python %s"%sys.argv))

【讨论】:

  • 嗯,刚刚用那个 exec 命令编辑了我的代码(当然是为了我自己的使用而编辑的)替换了我当前的代码,但仍然没有运气。
  • 是的,这可能意味着 exec 不是正确的工具...我会在 sevcond 中编辑另一个想法
  • 好的。这与权限有关吗?
  • 如果它不适用于您的 sudo 密码 (raspberry?) 那么 exec 不支持这种类型的东西 .... 您可以尝试回显来自 exec 调用的输出看看失败了什么......我认为python方法应该可以肯定......我认为你可以与 /sys/class/gpio 的文件进行交互,而无需成为 sudo (它的其他一些组......也许输入) ...它的速度较慢,但​​它不需要/dev/mem东西的提升权限...
  • 我通过在我的 sudoers 文件中添加“www-data ALL=(ALL) NOPASSWD:ALL”来修复它:)
猜你喜欢
  • 1970-01-01
  • 2015-04-06
  • 1970-01-01
  • 1970-01-01
  • 2015-05-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多