2013-12-08 5 views
1

Я бегу следующий сценарий питона на моем Raspberry Pi:Python Raspberry Pi GPIO ошибка

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

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

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 

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

Благодаря

UPDATE

Если я поставил код GPIO чуть ниже пример четкости() и выше РЧИД = 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) 
+0

Любая помощь кому-нибудь? – John

ответ

4

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

GPIO.setmode(GPIO.BCM) 
+0

отлично, я изменил его на GPIO.BCM и теперь все работает. Единственное, что мне нужно изменить номер порта в соответствии с номером BCM, который равен 22 – John

+1

Thats odd, потому что плата 15 такая же, как bcm 22 ...? – thommie

+0

Да, настройка правильного режима помогает, особенно с помощью cheatsheet, например http://raspi.tv/download/RPi.GPIO-Cheat-Sheet.pdf, есть другие доступные. – Simara

Смежные вопросы