Lance Grover

Lance Grover

RFID – RDM6300 – EM4100 and Raspberry pi

Posted date:


ok, we are going to play with a little RFID…. I have messed a lot with RFID access cards, IOProx, HID, etc…. but not much with the EM4100 and EM4305 so that is what I am playing with right now. I will probably write some notes up on HID and IOProx later….

Parts:
– Raspberry Pi Zero W – with SD Card obviously
– RDM6300 module and antenne
– Logic Level Shifter
– jumper wires

Start with a headless install of a Raspberry Pi – like from these notes here

Now you need to wire up this stuff…..first the pinouts

RDM6300 – keep in mind this is a 5v chip
I liked this version someone did of the pi zero, really pinout is same as Pi 3
Level shifter – this is from sparkfun.com – lv side is 3.3v and hv side is 5v

Now we gotta wire it all together…here is my poor attempt at portraying that…. I did use this page for some help, but it is a little old – here.

clear as mud right?

You now need to enable/disable some stuff on the regular raspian image….first run “sudo raspi-config”
– Select “Interfacing Options” this was number 5 for me
– Now select “Serial” which was A7 I think….for me
– Now disable it so select “No”
You can exit out of the raspi-config now. Next we need to enable uart=1 in the /boot/config.txt file, it is usually commented out or set to uart=0 at about the bottom of the file, for me it was the last line and I just modified it to be “uart=1”

REBOOT it! just to be sure your settings went into affect.

ok, now I am working on the code…which I did take from that link above and have expanded it. The key thing of note is to change the serial port to be /dev/serial0 as opposed to the /dev/ttyAMA0 since now that is linked to some other device now…. I named the file RFID.py

import time
import serial
import RPi.GPIO as GPIO
GPIO.setmode(GPIO.BCM)
 
Tag1 = str('0000000C000C')
Tag2 = str('0000000C080C')
Tag3 = str('0000000C010C')
Tag4 = str('0000000C090C')
Tag5 = str('0000000C0A0C')
Tag6 = str('0000000C0D0C')
GPIO.setup(23,GPIO.OUT)
GPIO.setup(24,GPIO.OUT)
GPIO.output(23,False)
GPIO.output(24,False)
PortRF = serial.Serial('/dev/serial0',9600)
PortRF.reset_input_buffer()
while True:
    ID = ""
    read_byte = PortRF.read()
    if read_byte=="\x02":
        for Counter in range(12):
            read_byte=PortRF.read()
            ID = ID + str(read_byte)
            print hex(ord( read_byte))
        print ID
        if ID == Tag1:
            print "White - Ashoka"
            GPIO.output(23,True)
            GPIO.output(24,False)
            PortRF.reset_input_buffer()
            time.sleep(5)
            GPIO.output(23,False)
        elif ID == Tag2:
            print "White - Chirutt"
            GPIO.output(23,True)
            GPIO.output(24,False)
            PortRF.reset_input_buffer()
            time.sleep(5)
            GPIO.output(23,False)
        elif ID == Tag3:
            print "Red - Vader"
            GPIO.output(23,True)
            GPIO.output(24,False)
            PortRF.reset_input_buffer()
            time.sleep(5)
            GPIO.output(23,False)
        else:
            GPIO.output(23,False)
            print "Access Denied"
            GPIO.output(24,True)
            PortRF.reset_input_buffer()
            time.sleep(5)
            GPIO.output(24,False)

I just run it with “python RFID.py” and when I put one of my EM4100 or EM4305 cards/fobs/objects it will read it and display the rfid number….now time to expand and make this even better!