Ошибка GPIO Python Raspberry Pi

Я запускаю следующий скрипт Python на своем Raspberry Pi:

http://www.skpang.co.uk/dl/rfid.py

Я изменил сценарий ближе к концу, чтобы получить доступ к контакту 15 GPIO и включать и выключать его. Вот мой код внизу:

def example():

rfid = SL030()
fw = rfid.get_firmware()
print("RFID reader firmware:" + fw)
print()

GPIO.setmode(GPIO.BOARD)
GPIO.setup(15, GPIO.OUT)
GPIO.output(15,True)


while True:
    rfid.wait_tag()
    print("card present")

    if rfid.select_mifare():
        type = rfid.get_type()
        print("type:" + rfid.get_typename(type))

        id = rfid.get_uidstr()
        try:
            user = cards[id]
            print(user)
            #os.system("aplay " + user)
        except KeyError:
            print("Unknown card:" + id)

    rfid.wait_notag()
    print("card removed")
    print()

Проблема, с которой я столкнулся, заключается в том, что, хотя он работает с контактом 15, скрипт останавливается со следующей ошибкой:

Traceback (most recent call last):
  File "./rfid.py", line 212, in <module>
    example()
  File "./rfid.py", line 182, in example
rfid.wait_tag()
  File "./rfid.py", line 45, in wait_tag
while not self.tag_present():
  File "./rfid.py", line 40, in tag_present
    return GPIO.input(CFG_TAG_DETECT) == False
    RPi.GPIO.InvalidChannelException: The channel sent is invalid on a Raspberry Pi

Есть идеи, что может быть не так?

Спасибо

ОБНОВЛЕНИЕ

Если я помещу код GPIO чуть ниже def example(): и выше rfid = SL030(), как показано ниже, то, похоже, он будет работать без ошибок:

def example():

    GPIO.setmode(GPIO.BOARD)
    GPIO.setup(15, GPIO.OUT)
    GPIO.output(15,True)

    rfid = SL030()

*ОБНОВЛЕНИЕ — РЕШЕНИЕ*

Благодаря Андре я изменил:

GPIO.setmode(GPIO.BOARD)

в: GPIO.setmode(GPIO.BCM)

а затем изменил порт, чтобы он соответствовал порту BCM, например:

GPIO.setup(22, GPIO.OUT)
GPIO.output(22,True)

person John    schedule 08.12.2013    source источник


Ответы (1)


Из этого вопроса видно, что для GPIO есть два режима: GPIO.BCM и GPIO.BOARD... попробуйте использовать другой:

GPIO.setmode(GPIO.BCM)
person Community    schedule 08.12.2013
comment
отлично, я изменил его на GPIO.BCM, и теперь все работает. Единственное, мне нужно было изменить номер порта, чтобы он соответствовал номеру BCM, который равен 22. - person John; 09.12.2013
comment
Это странно, потому что доска 15 такая же, как bcm 22... ? - person thommie; 23.02.2014
comment
Да, установка правильного режима помогает, особенно с помощью шпаргалки типа raspi.tv/download /RPi.GPIO-Cheat-Sheet.pdf доступны и другие. - person Simara; 22.05.2017