====== 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 "------------------------------------------"