按下按钮时,python脚本会在Raspberry Pi上自动运行

时间:2015-12-08 06:38:52

标签: python button raspberry-pi

无法在线查找教程。

当我按下按钮时,我想要运行一些python脚本。我不想首先在Raspberry Pi的终端上运行python脚本,然后像某些教程提到的那样等待按下按钮。我还希望在按下按钮后运行整个脚本,而不是我必须在整个脚本运行期间按下按钮。

基本上,我希望脚本能够在不必将HDMI监视器或鼠标连接到Raspberry Pi或GUI的情况下运行。只需按一下按钮。

此外,如果有人有关于如何使用GPIO设置按钮的图表以及真正有用的代码。

我该怎么做?我找不到任何东西,看起来很简单。

2 个答案:

答案 0 :(得分:2)

您始终需要一些程序来监控输入,无论是键盘,鼠标还是连接到GPIO的按钮。在键盘和鼠标的情况下,操作系统为您提供此功能。因此,要从GPIO引脚触发程序,您需要编写如下脚本:

import RPi.GPIO as GPIO
import time
import subprocess

GPIO.setmode(GPIO.BCM)

GPIO.setup(18, GPIO.IN, pull_up_down=GPIO.PUD_UP)

while True:
    input_state = GPIO.input(18)
    if input_state == False:
        subprocess.call(something)
        # block until finished (depending on application)

这是一个按钮电路(来自this tutorial

button circuit

答案 1 :(得分:2)

轮询的一种更有效的替代方法是使用中断:

#!/usr/bin/env python2.7  
# script by Alex Eames http://RasPi.tv/  
# http://raspi.tv/2013/how-to-use-interrupts-with-python-on-the-raspberry-pi-and-rpi-gpio  
import RPi.GPIO as GPIO  
GPIO.setmode(GPIO.BCM)  

# GPIO 23 set up as input. It is pulled up to stop false signals  
GPIO.setup(23, GPIO.IN, pull_up_down=GPIO.PUD_UP)  

print "Make sure you have a button connected so that when pressed"  
print "it will connect GPIO port 23 (pin 16) to GND (pin 6)\n"  
raw_input("Press Enter when ready\n>")  

print "Waiting for falling edge on port 23"  
# now the program will do nothing until the signal on port 23   
# starts to fall towards zero. This is why we used the pullup  
# to keep the signal high and prevent a false interrupt  

print "During this waiting time, your computer is not"   
print "wasting resources by polling for a button press.\n"  
print "Press your button when ready to initiate a falling edge interrupt."  
try:  
    GPIO.wait_for_edge(23, GPIO.FALLING)  
    print "\nFalling edge detected. Now your program can continue with"  
    print "whatever was waiting for a button press."  
except KeyboardInterrupt:  
    GPIO.cleanup()       # clean up GPIO on CTRL+C exit  
GPIO.cleanup()           # clean up GPIO on normal exit  

(来自http://raspi.tv/2013/how-to-use-interrupts-with-python-on-the-raspberry-pi-and-rpi-gpio