Pi mit RFID-RC522 verbinden und einrichten

  • Lesedauer:6 min Lesezeit

Als erstes testen wir mal isoliert den RFID-RC522. Dazu verbinden wir den Raspberry Pi mit dem RFID-RC522. Er soll in der Lage sein ein RFID-Tag zu lesen und zu schreiben.

Raspberry Pi Zero W mit RFID-RC522

Hardwareseitig sieht die Sache recht einfach aus. Der RC522 kommuniziert über SPI, daher schließen wir die 4 SPI Leitungen einfach zusammen. Das einzige was bei SPI Verbindungen zu beachten ist, ist dass man MISO und MOSI richtig verschaltet. MOSI bedeutet Master Out Slave In – Es ist also der Ausgang des Pi, der auf den Eingang des RFID Moduls geht. MISO ist genau das Gegenteil. Das Problem ist aber, dass die Hersteller nicht konsistent in der Beschriftung ihrer Module sind. Normalerweise wird MISO mit MOSI und MOSI mit MISO verbunden. Bei meinem Modul z.B. ist aber die Beschriftung so gewählt, dass MOSI am Modul bedeutet, dass ich die MOSI Leitung meines Pi anschließen soll. Die gute Nachricht ist, dass man nichts kaputt macht, wenn man es falsch anschließt, es funktioniert einfach nicht. Daher kann man im Zweifel einfach ausprobieren. Dann verbinden wir noch einen GPIO des Pi mit dem RST Pin am RC522. Diese Verbindung wird benötigt, um das RFID Modul zu resetten, was die Bibliotheken für euch übernehmen. Die Spannungsversorgung des RC522 kommt aus einem 3,3 V Pin des Pi, GND an GND, Verkabelung fertig.

Pi ZeroRC522
Pin 24 / GPIO08SDA
Pin 23 / GPIO11SCK
Pin 19 / GPIO10MOSI
Pin 21 / GPIO09MISO
-IRQ
Pin 25 / GNDGND
Pin 22 / GPIO25RST
Pin 17 / 3V33.3V
Pi mit dem RFID-RC522 Verschalten - Fritzing Zeichnung
Verschaltung des Pi Zero W mit dem RFID-RC22

Software für Pi mit RFID-RC522

Pakete installieren und Bibliotheken laden

Um Python mit SPI zu verwenden benötigen wir ein SPI Modul. Nach Möglichkeit installieren wir alle Pakete über pip und nicht über die distutils. Hierzu nutzen wir den Befehl:

sudo pip3 install spidev

Damit ist SPI über Python nutzbar. Wir installieren als nächstes die Bibliothek für das RFID-RC522 Modul:

sudo pip3 install mfrc522

Danach sollten wir das Modul ansprechen können und probieren das auch gleich aus.

Erster Testcode für das RC522

Nachdem alles vorbereitet ist können wir das Modul nun über die Bibliotheken ansprechen. Mit dieser wollen ein Tag beschreiben und auslesen können. Wir fangen damit an eins zu beschreiben.

Tag beschreiben

Um das Modul anzusteuern, verwenden wir SimpleMFRC522 aus der installierten Bibliothek.

#!/usr/bin/env python3
import RPi.GPIO as GPIO
from mfrc522 import SimpleMFRC522
reader = SimpleMFRC522()
try:
        text = input('Enter tag data:')
        print("Hold tag to module")
        reader.write(text)
        print("Done...")
finally:
        GPIO.cleanup()

Dabei erstellen wir mit reader = SimpleMFRC522 eine Instanz und nutzen die .write() Methode, um Text auf dem Tag zu speichern. Die zu speichernden Daten holen wir uns erst mal aus einem Konsoleninput. Das ganze in einen try-Block gewrappt und im finally geben wir die Ressourcen wieder frei. Das ist schon das ganze Beispiel.

Tag auslesen

Damit wir die Daten Auslesen können nutzen wir ein ähnlich einfaches Beispiel.

#!/usr/bin/env python3
import RPi.GPIO as GPIO
from mfrc522 import SimpleMFRC522
reader = SimpleMFRC522()
try:
        id, text = reader.read()
        print(id)
        print(text)
finally:
        GPIO.cleanup()

Der Unterschied ist, dass wir die .read() Methode verwenden, welche uns die Daten und eine Tag spezifische Id zurück gibt. Das ganze sieht dann so aus:

Hervorragend! Funktioniert alles. Die Kommunikation des Pi Zero W mit RFID-RC522 steht, es kann also weiter gehen.

Dieser Beitrag hat 8 Kommentare

  1. Jannik

    Hey, danke für das tolle und einfache Tutorial!
    Leider funktioniert bei mir auf einem RPi4 weder das lesen, noch das schreiben des Tags.
    Hierbei wird der folgende Fehler beim Schreibversuch nach der Texteingabe angezeigt:
    Test_RFID.py:14: RuntimeWarning: No channels have been set up yet – nothing to clean up! Try cleaning up at the end of your program instead!
    GPIO.cleanup()
    Traceback (most recent call last):
    File „Test_RFID.py“, line 10, in
    reader.write(text)
    TypeError: write() missing 1 required positional argument: ‚text‘

  2. Holger-G

    Vielen Dank für dieses Tutorial.
    Es scheint eines er wenigen zu sein die tatsächlich aktuell funktionieren (RPi 3).

    1. Hendrik

      Danke für dein Feedback, freut mich zu hören, dass es funktioniert. ◉‿◉

    2. Mustafa

      Hi,
      bei mir hat es mit der R Pi 4 geklappt. Prüfe mal die Pinbelegung, könnte vielleicht daran liegen…

  3. Kai

    Hi,
    Kann es sein, dass auf manchen Modulen SDA als NSS beschriftet ist oder ist das etwas anderes?
    Vielen Dank fürs Tutorial!

    1. Hendrik

      Hallo Kai,

      das ist mir so noch nicht untergekommen. Aber je nach dem wo du das Modul so kaufst, kann es immer passieren, dass irgendwas anders ist, als bei dem hier verwendeten Modul.

      Viele Grüße
      Hendrik

  4. Laura

    Super Anleitung! Hat bei meinem Raspberry Pi Zero einwandfrei geklappt.

Schreibe einen Kommentar