Skip to content

Instantly share code, notes, and snippets.

@mattgorecki
Created July 26, 2013 01:34
Show Gist options
  • Save mattgorecki/6085344 to your computer and use it in GitHub Desktop.
Save mattgorecki/6085344 to your computer and use it in GitHub Desktop.
Python script to read RFID card from serial RFID reader attached to a Raspberry Pi. Also has a Exit button. The card swipe releases the maglock on the door.
#!/usr/bin/python2
import serial
import re, sys, signal, os, time, datetime
import RPi.GPIO as GPIO
BITRATE = 9600
GPIO.setmode(GPIO.BOARD)
GPIO.setup(7, GPIO.OUT)
GPIO.setup(3, GPIO.IN, pull_up_down=GPIO.PUD_UP)
# Lock the door on boot
GPIO.output(7, GPIO.HIGH)
pidfile = daemon.pidfile.PIDLockFile("/var/run/bearclaw.pid")
CARDS = [
'060090840715',
'840034BD3E33',
'6A003E3A2C42',
'840034D5DDB8',
'6A003E6F556E',
'840034CD324F',
'6A003E61AC99',
'6A003E247E0E',
'6A003E77BD9E',
'840034D6CEA8'
]
def signal_handler(signal, frame):
print "Closing Bearclaw"
GPIO.output(7, GPIO.LOW) # Unlock the door on program exit
GPIO.cleanup()
ser.close()
sys.exit(0)
def unlock_door(duration):
print "Unlocking door for %d seconds" % duration
GPIO.output(7, GPIO.LOW)
time.sleep(duration)
print "Locking the door"
GPIO.output(7, GPIO.HIGH)
if __name__ == '__main__':
buffer = ''
ser = serial.Serial('/dev/ttyUSB0', BITRATE, timeout=0)
rfidPattern = re.compile(b'[\W_]+')
signal.signal(signal.SIGINT, signal_handler)
while True:
# Read data from RFID reader
buffer = buffer + ser.read(ser.inWaiting())
if '\n' in buffer:
lines = buffer.split('\n')
last_received = lines[-2]
match = rfidPattern.sub('', last_received)
if match:
print match
if match in CARDS:
print 'card authorized'
unlock_door(10)
else:
print 'unauthorized card'
# Clear buffer
buffer = ''
lines = ''
# Listen for Exit Button input
if not GPIO.input(3):
print "button pressed"
unlock_door(5)
time.sleep(0.1)
@bramdeg
Copy link

bramdeg commented Sep 11, 2014

hee mattgorecki,
your code looks like something i've been looking for and its easy enough to understand.
Do you have any recommendations for a RFID reader?

Thanks in advance!
greetings Bram

@Wahyuuu
Copy link

Wahyuuu commented Apr 25, 2016

what do you have program for import serial?

@harodonfather
Copy link

harodonfather commented May 11, 2016

HI Brother,
i'm new on python i have PFE i want to controle the RFID and Insert the date , time for Entre and Exit And insert into SampleTable for calcule the duration where the employe stay in the atelier i just want how to controle this RFID Reader with raspberry Pi2 Card and inserting date,time when the employe put her carte for first one and insert date,time when he put her card for second one
this is my e-mail contact me and thank

@SravanthiAshokKumar
Copy link

Hi,
I am getting an error in the below line
ser = serial.Serial('/dev/ttyUSB0', BITRATE, timeout=0)
the error is "keyword can't be an expression"
What should I do?
Thanks in advance :)

@dentnetph
Copy link

Hi!!!
This is very nice and simple to understand..
I am making a project using RFID-RC522 on my raspberry, do you have spare time to walk me through it??
Thank you in advance!!!!

@bangka0928
Copy link

you have the complete code to this sir ? really need for our thesis ,

@bangka0928
Copy link

did you use 2x16 lcd screen for the display ?

@smartclassroomwce
Copy link

pidfile = daemon.pidfile.PIDLockFile("/var/run/bearclaw.pid")

i m using this code in my project but i got error at the above line so what can i do?

@ChucksArm
Copy link

Very nice and simple.

@alexjpanagis
Copy link

I wasn't able to get this to work with Mifare's RFID reader - would you be willing to help me out?

@lasuridze
Copy link

i have not config with serial i have pin SCA,SDL PA12, P11

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment