RuntimeError:您必须首先设置()GPIO通道

时间:2014-01-17 19:53:08

标签: python camera raspberry-pi gpio

当我使用sudo python3 program.py执行并按下de switch 1时会抛出下一个异常:

Taking picture...
Picture takeng...
Traceback (most recent call last):
  File "main.py", line 21, in <module>
    if GPIO.input(switch1):
RuntimeError: You must setup() the GPIO channel first

我为这个项目使用了一个覆盆子凸轮库和rpi.gpio库。任何人都知道我的代码中发生了什么?

import RPi.GPIO as GPIO
import time
import picamera

# initial config for gpio ports
GPIO.setwarnings(False)
GPIO.setmode(GPIO.BCM)

# input switches
switch1 = 22
switch2 = 23
switch3 = 24

# setup
GPIO.setup(switch1, GPIO.IN, pull_up_down=GPIO.PUD_UP)
GPIO.setup(switch2, GPIO.IN, pull_up_down=GPIO.PUD_UP)
GPIO.setup(switch3, GPIO.IN, pull_up_down=GPIO.PUD_UP)

# main loop
while True:
    if GPIO.input(switch1):
        print ("Taking picture...")
        with picamera.PiCamera() as camera:
            camera.resolution = (1280, 720)
            camera.start_preview()
            time.sleep(0.5)
            camera.capture("test.jpg")
        print ("Picture takeng...")
    elif GPIO.input(switch2):
        print ("Taking video...")
    elif GPIO.input(switch3):
        print ("Poweroff...")
        break

GPIO.cleanup()

2 个答案:

答案 0 :(得分:5)

错误告诉您没有将引脚设置为输入,当您尝试访问它们时,它会失败。我有一个类似的问题,据我所知,它应该工作(你毕竟设置了引脚)。

尝试将GPIO.setmode(GPIO.BCM)更改为GPIO.setmode(GPIO.BOARD)。您还必须将引脚编号更改为实际编号(您的编号为15,16和18)。 我仍然不知道为什么,但它在我的代码上做了伎俩。

答案 1 :(得分:-1)

您必须授予/dev/文件夹和mem文件的访问权限。 为此,请打开raspberry终端并输入命令

sudo chmod -R 777 /dev/ and hit enter

然后

sudo chmod -R 777 /dev/mem and hit enter that's it