TW79
Posts: 36
Joined: Wed Jul 02, 2014 4:09 pm

RuntimeError setup() GPIO

Mon Jul 14, 2014 3:38 pm

All,

I am working on an RFID reader. I need the reader to look to see if a button that is on GPIO 23 (BCM) is pressed. If so, I want it to run a script in another folder called redbutton.

Please have a look at my script. The problem area (I think) is the last portion "Check for redbutton." I am getting the error:
RuntimeError: You must setup() the GPIO channel first.

From what I can tell, the channel is set up properly. I also get this error if I change to GPIO.BOARD and change the pin number.

Code: Select all

import RPi.GPIO as GPIO
import MFRC522
import signal
import glob
GPIO.setmode (GPIO.BCM)
GPIO.setup(23, GPIO.IN, pull_up_down=GPIO.PUD_UP)
MYFILE = glob.glob('/home/pi/RXRFID/newscans/*.txt')[0]
import sys


continue_reading = True

# Capture SIGINT for cleanup when the script is aborted
def end_read(signal,frame):
    global continue_reading
    continue_reading = False


# Hook the SIGINT
signal.signal(signal.SIGINT, end_read)

# Create an object of the class MFRC522
MIFAREReader = MFRC522.MFRC522()

# This loop keeps checking for chips. If one is near it will get the UID and authenticate
while continue_reading:

    # Scan for cards
    (status,TagType) = MIFAREReader.MFRC522_Request(MIFAREReader.PICC_REQIDL)

    # If a card is found
    if status == MIFAREReader.MI_OK:
        print "Card detected"
        print MYFILE
 # Get the UID of the card
        (status,uid) = MIFAREReader.MFRC522_Anticoll()

        # If we have the UID, continue
        if status == MIFAREReader.MI_OK:

            print "Card read UID: "+str(uid[0])+","+str(uid[1])+","+str(uid[2])+","+str(uid[3])

            # Write the card UID to a file
            with open(MYFILE, 'a') as f:
                uid_str = ",".join([str(x) for x in uid])
                f.write(uid_str+"\n")

            # This is the default key for authentication
            key = [0xFF,0xFF,0xFF,0xFF,0xFF,0xFF]

            # Select the scanned tag
            MIFAREReader.MFRC522_SelectTag(uid)

            # Authenticate
            status = MIFAREReader.MFRC522_Auth(MIFAREReader.PICC_AUTHENT1A, 8, key, uid)

            # Check if authenticated
            if status == MIFAREReader.MI_OK:
                MIFAREReader.MFRC522_Read(8)
                MIFAREReader.MFRC522_StopCrypto1()

            # Check for redbutton
            import RPi.GPIO as GPIO
            GPIO.setmode (GPIO.BCM)
            GPIO.setup(23, GPIO.IN, pull_up_down=GPIO.PUD_UP)
            while True:
                if GPIO.input(23 == False):
                    import sys
                    sys.path.append("/home/pi/Adafruit-Raspberry-Pi-Python-Code/Adafruit_CharLCDPlate")
                    import redbutton

User avatar
davef21370
Posts: 897
Joined: Fri Sep 21, 2012 4:13 pm
Location: Earth But Not Grounded

Re: RuntimeError setup() GPIO

Mon Jul 14, 2014 4:14 pm

The line that reads
                if GPIO.input(23 == False):
Should be
if GPIO.input(23) == False:

Also try doing all your imports at the beginning of the script, it makes things easier to follow, and your GPIO is already imported and setup at the start of the code so no need to do it again in the function.

Dave.
Apple say... Monkey do !!

TW79
Posts: 36
Joined: Wed Jul 02, 2014 4:09 pm

Re: RuntimeError setup() GPIO

Mon Jul 14, 2014 4:27 pm

If, at the bottom of the script, I left align the "If GPIO.input.....", then I get an error that an indentation is required. If I align that line with the rest of the code, I get the error that I must setup() the GPIO.

If indentation is the problem, then I'm a bit confused on how it is to be set up exactly.

User avatar
davef21370
Posts: 897
Joined: Fri Sep 21, 2012 4:13 pm
Location: Earth But Not Grounded

Re: RuntimeError setup() GPIO

Mon Jul 14, 2014 4:29 pm

Sorry, the indentation is my mistake, it should be indented as you had it originally but the ==False part outside of the brackets.

Dave.
Apple say... Monkey do !!

TW79
Posts: 36
Joined: Wed Jul 02, 2014 4:09 pm

Re: RuntimeError setup() GPIO

Tue Jul 15, 2014 6:35 pm

Thank you. That solved the problem.

Return to “Python”