====== RFID lesen ======
{{wp>RFID}}
**Quellen:**
* http://pikiosk.tumblr.com/post/51812205794/07-reading-rfid-tags-with-the-raspberry-pi
* http://kampis-elektroecke.de/?page_id=3248
**Hardware:**
* http://www.watterott.com/de/125Khz-RFID-Empfaenger-Modul
* http://www.watterott.com/de/5-teiliges-125khz-RFID-Tag-Set
===== Anschließen des Adapters =====
Zusammenführen der richtigen Pins:
* 5V Raspi -> 5V RFID
* nicht genutzt
* GND Raspi -> GDN RFID
* nicht genutzt (TX Rasp)
* RX Raspi -> TX RFID
Dieses Anschluss Format: **5v -- GND TX RX** scheint genormt zu sein.
Dazu das Datenblatt des RFID-Lesers betrachten und die Pinbelegung.
Achtung, die Datenleitung muss mit einer Spannungsteilung angeschlossen werden!
Der Raspi arbeitet mit 3,3V der RFID-Leser mit 5V
{{:computer:raspberrypi:raspi-pins.png|}}
{{:computer:raspberrypi:rfid-spannungsteilung.jpg|}}
===== Software =====
**python-serial** installieren.
Kleine Änderung an der /etc/inittab (danach Neustart) mit **nano /etc/inittab** (Achtung, man muss dafür //root// sein ;-) ).
#Spawn a getty on Raspberry Pi serial line
T0:23:respawn:/sbin/getty -L ttyAMA0 115200 vt100
ändern in:
#Spawn a getty on Raspberry Pi serial line
#T0:23:respawn:/sbin/getty -L ttyAMA0 115200 vt100
Testprogramm (http://kampis-elektroecke.de/wp-content/uploads/2013/02/RFID.py_.txt):
Nun mit **nano rfid.py** Programieroberfläche öffnen und das untere reinschreiben
import serial
import sys
import time
from operator import xor
# UART
ID = ""
Zeichen = 0
Checksumme = 0
Tag = 0
# Flags
Startflag = "\x02"
Endflag = "\x03"
# UART oeffnen
UART = serial.Serial("/dev/ttyAMA0", 9600)
UART.open()
while True:
# Variablen loeschen
Checksumme = 0
Checksumme_Tag = 0
ID = ""
# Zeichen einlesen
Zeichen = UART.read()
# Uebertragungsstart signalisiert worden?
if Zeichen == Startflag:
# ID zusammen setzen
for Counter in range(13):
Zeichen = UART.read()
ID = ID + str(Zeichen)
# Endflag aus dem String loeschen
ID = ID.replace(Endflag, "" );
# Checksumme berechnen
for I in range(0, 9, 2):
Checksumme = Checksumme ^ (((int(ID[I], 16)) << 4) + int(ID[I+1], 16))
Checksumme = hex(Checksumme)
# Tag herausfiltern
Tag = ((int(ID[1], 16)) << 8) + ((int(ID[2], 16)) << 4) + ((int(ID[3], 16)) << 0)
Tag = hex(Tag)
# Ausgabe der Daten
print "------------------------------------------"
print "Datensatz: ", ID
print "Tag: ", Tag
print "ID: ", ID[4:10]
print "Checksumme: ", Checksumme
print "------------------------------------------"