【问题标题】:When press button, python script runs automatically on Raspberry Pi当按下按钮时,python 脚本会在树莓派上自动运行
【发布时间】:2015-12-08 06:38:52
【问题描述】:

网上找不到教程。

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

基本上,我希望脚本无需连接到 Raspberry Pi 或 GUI 的 HDMI 显示器或鼠标即可运行。只需按一下按钮。

如果有人有关于如何使用 GPIO 和代码设置按钮的图表,那将非常有帮助。

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

【问题讨论】:

    标签: python button raspberry-pi


    【解决方案1】:

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

    #!/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

    【讨论】:

      【解决方案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

      【讨论】:

        猜你喜欢
        • 2015-03-22
        • 2023-01-08
        • 2015-05-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多