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 Zero | RC522 |
---|---|
Pin 24 / GPIO08 | SDA |
Pin 23 / GPIO11 | SCK |
Pin 19 / GPIO10 | MOSI |
Pin 21 / GPIO09 | MISO |
- | IRQ |
Pin 25 / GND | GND |
Pin 22 / GPIO25 | RST |
Pin 17 / 3V3 | 3.3V |
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.
Pingback: Cloud Kaffeekasse - Eine digitale Kaffekasse/Kaffeeliste • devdrik.
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‘
Vielen Dank für dieses Tutorial.
Es scheint eines er wenigen zu sein die tatsächlich aktuell funktionieren (RPi 3).
Danke für dein Feedback, freut mich zu hören, dass es funktioniert. ◉‿◉
Hi,
bei mir hat es mit der R Pi 4 geklappt. Prüfe mal die Pinbelegung, könnte vielleicht daran liegen…
Hi,
Kann es sein, dass auf manchen Modulen SDA als NSS beschriftet ist oder ist das etwas anderes?
Vielen Dank fürs Tutorial!
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
Super Anleitung! Hat bei meinem Raspberry Pi Zero einwandfrei geklappt.