СКУД, малина и чайник

#!/usr/bin/env python

import RPi.GPIO as GPIO
import MFRC522
import signal
import time

red = 11
green = 18
speaker = 16
doorlock = 12

# Список UID карт (UID карты узнаем с помощью sudo python /MFRC522-python/Read.py
card_01 = '6056197101' #white
card_02 = '148167101184' #fob
card_03 = '13652116101' #единый

#Настройка портов вывода
GPIO.setmode(GPIO.BOARD) # Это значит, что считаем пины по порядку с левого верхнего (3v3 - первый)
GPIO.setup(red, GPIO.OUT, initial=1) # Устанавливаем пин 18 на вывод
GPIO.setup(green, GPIO.OUT, initial=0) # тоже самое с пином 11
GPIO.setup(speaker, GPIO.OUT, initial=0) # пин 16
GPIO.setup(doorlock, GPIO.OUT, initial=0) # пин 12

continue_reading = True

def end_read(signal,frame): # что делать, если программу прервать и как её прервать
    global continue_reading
    print "Ctrl+C captured, ending read."
    continue_reading = False
    GPIO.cleanup()

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

while continue_reading:

# Сканируем карты - считываем их UID
    (status,TagType) = MIFAREReader.MFRC522_Request(MIFAREReader.PICC_REQIDL)

    # Если карту удалось считать, пишем "карта найдена"
    if status == MIFAREReader.MI_OK:
        print "Card detected"

    # Считываем UID карты
    (status,uid) = MIFAREReader.MFRC522_Anticoll()

    # Если считали UID, то идем дальше
    if status == MIFAREReader.MI_OK:
        # выводим UID карты на экран
        UIDcode = str(uid[0])+str(uid[1])+str(uid[2])+str(uid[3])
        print UIDcode

        # Если карта есть в списке
        if UIDcode == card_01 or UIDcode == card_03 or UIDcode == card_02:
        # то дверь открывается
        # предполагается, что замок открывается при подаче на
        # него (на реле, управляющее замком), напряжения
        # т.е. им управляет переключаемое реле
        # т.е. замок открывается при высоком значении пина doorlock
        # при этом, горит зеленая, тухнет красная и пищит динамик

                GPIO.output((red, green, speaker, doorlock), (0,1,1,1))
                print "Door open"

                # успеть дернуть за 1 секунду
                time.sleep(1)
                GPIO.output((red, green, speaker, doorlock), (1,0,0,0))

                # потом дверь закрывается, о чем нас извещают
                print "Door closed"

        # А если карты в списке нет, то моргаем и пищим
        else:
                GPIO.output((red, green, speaker, doorlock), (1,0,0,0))
                time.sleep(0.05)
                GPIO.output((red, green, speaker, doorlock), (1,0,1,0))
                time.sleep(0.05)
                GPIO.output((red, green, speaker, doorlock), (1,0,0,0))
                time.sleep(0.05)
                GPIO.output((red, green, speaker, doorlock), (1,0,1,0))
                time.sleep(0.05)
                GPIO.output((red, green, speaker, doorlock), (0,1,0,0))
                time.sleep(0.05)
                GPIO.output((red, green, speaker, doorlock), (0,1,1,0))
                time.sleep(0.05)
                GPIO.output((red, green, speaker, doorlock), (0,1,0,0))
                time.sleep(0.05)
                GPIO.output((red, green, speaker, doorlock), (0,1,1,0))
                time.sleep(0.05)
                GPIO.output((red, green, speaker, doorlock), (1,0,0,0))
                time.sleep(0.05)
                GPIO.output((red, green, speaker, doorlock), (1,0,1,0))
                time.sleep(0.05)
                GPIO.output((red, green, speaker, doorlock), (1,0,0,0))
                time.sleep(0.05)
                GPIO.output((red, green, speaker, doorlock), (1,0,1,0))
                time.sleep(0.05)
                GPIO.output((red, green, speaker, doorlock), (0,1,0,0))
                time.sleep(0.05)
                GPIO.output((red, green, speaker, doorlock), (0,1,1,0))
                time.sleep(0.05)
                GPIO.output((red, green, speaker, doorlock), (0,1,0,0))
                time.sleep(0.05)
                GPIO.output((red, green, speaker, doorlock), (0,1,1,0))
                time.sleep(0.05)
                GPIO.output((red, green, speaker, doorlock), (1,0,0,0))
                print "Unrecognised Card"


© Geektimes