Netzwerkfähiger RFID-Kartenleser mit Arduino, ENC28J60 Ethernet & MFRC522
Komponenten und Materialien
- 1× MFRC522 RFID-Modul (SPI, beliebiges Modul kompatibel)
- 1× Arduino UNO (oder Nano/Mega – Code anpassbar)
- 1× ENC28J60 Ethernet-Modul (für andere Module Code anpassen)
- 1× Breadboard
- 1× Jumper-Kabel (M-M, M-F)
- 1× Computer (im selben Netzwerk)
- 1× RGB-LED (gemeinsame Anode/Kathode)
- 1× 3,3 V/5 V Netzteil (>700 mA) – Wichtig: RFID & Ethernet nur 3,3 V!
Werkzeuge
- Seitenschneider / Abisolierzange
Software
- Arduino IDE
- PyCharm (für Python-Server)
- Bibliotheken: UIPEthernet, MFRC522
Über das Projekt
Professionelle RFID-Zutrittsysteme kosten 200–2000 $. Wir bauen ein netzwerkfähiges System für unter 100 $, das nicht nur Türen öffnet, sondern auch Logging/Tracking ermöglicht (ursprünglich für Schülererfassung an einer High School).
Hardware-Aufbau (SPI-Verkabelung)
- Arduino Pin 10 (SS) → Ethernet CS
- Pin 12 (MISO) → RFID MISO + Ethernet SO
- Pin 11 (MOSI) → RFID MOSI + Ethernet SI
- Pin 13 (SCK) → RFID SCK + Ethernet SCK
- Pin 9 → RFID RST
- Pin 8 → RFID SS (SDA)
- Pins 3, 4, 5 → RGB-LED (Rot, Blau, Grün) mit Vorwiderständen
- Beide Module (RFID, Ethernet) an 3,3 V vom Netzteil – niemals 5 V!
- Arduino GND mit Netzteil GND verbinden
- Ethernet-Kabel an Router/Switch (selbes Netzwerk wie PC)

Code-Konfiguration
Im Arduino-Sketch müssen folgende Netzwerkparameter angepasst werden:
- MAC-Adresse (eindeutig bei mehreren Geräten)
- IP-Adresse (z. B. 192.168.1.160)
- Gateway (Router-IP, z. B. 192.168.1.1 – per
ipconfigermitteln) - DNS (z. B. 8.8.8.8)
- Server-IP (PC mit TCP-Server, Port 23)
Funktionsweise
- Arduino initialisiert Ethernet (UIPEthernet) und RFID (MFRC522)
- Beim Erkennen einer Karte: UID lesen, als Hex-String an TCP-Server (Port 23) senden
- Server antwortet:
g= Zugriff gewährt (grüne LED), sonstbb= verweigert (rote LED) - Blaue LED = Wartezustand, Lila/rot blinkend = Boot
Python-Beispielserver (Telnet/TCP, Port 23)
import SocketServer
class MyTCPHandler(SocketServer.BaseRequestHandler):
def handle(self):
self.data = self.request.recv(1024).strip()
print("{} wrote:".format(self.client_address[0]))
print(self.data)
# Hier SQL-Prüfung: if UID in DB -> "g" else "bb"
self.request.sendall("g") # oder "bb"
if __name__ == "__main__":
HOST, PORT = "", 23
server = SocketServer.TCPServer((HOST, PORT), MyTCPHandler)
server.serve_forever()
Fehlerbehebung (Arduino hängt >30 s)
- Netzteil prüfen (700 mA+), evtl. stärkeres Netzteil
- Windows Firewall: Port 23 eingehend/ausgehend erlauben
- Router: Port 23 an PC weiterleiten
- Kabelverbindung statt WLAN testen
- IP-Adressen im Code prüfen
Erweiterung: Türöffnung
Der Code enthält keine Türsteuerung. Für ein Schloss: Relais an freiem Pin schalten bei Pass()-Signal.
Code-Repository
Aktuellste Version: GitHub InternetRFIDTags
Herstellungsprozess
- Die Grußkartenindustrie: Geschichte, Produktion und Zukunftstrends
- Kreditkarte: Geschichte, Design, Fertigung und Zukunftstrends
- Sicheres RFID-Türschloss mit Arduino & RC522 (MIFARE 13,56 MHz)
- Sicheres Arduino RFID-Schloss bauen – Schritt-für-Schritt-Anleitung
- RFID-Anwesenheitssystem mit Arduino & Python – Daten direkt in phpMyAdmin (XAMPP) speichern
- Bluetooth-gesteuerter Arduino-Spybot bauen – Überwachungsroboter mit IP-Kamera
- FlickMote: Gestensteuerung per Ultraschall & IR für Smart Home (Arduino 101)
- DIY Arduino TV-B-Gone: Universelle TV-Aus-Fernbedienung
- Einen eigenen LED-Master-Clock mit Alarm bauen – aus 12 Metern Entfernung ablesbar
- Arduino-basierter Amiga-Floppy-Lesegerät: Günstige Open-Source-Datenrettung