RFID – die besten Beiträge

Wie kann ich zwei MFRC522-RFID-Reader gleichzeitig mit einem Raspberry Pi 3 Model B verwenden?

Hallo zusammen,

ich versuche seit über einem Monat, zwei MFRC522-RFID-Reader gleichzeitig mit meinem Raspberry Pi 3 Model B (Version 1.2) zu betreiben, leider ohne Erfolg.

Mein Ziel ist es, dass beide Reader parallel arbeiten und unabhängig voneinander Tags erkennen und auslesen können. Ich verwende Python mit dem

spidev

-Modul und habe jedem Reader eine eigene SPI-Schnittstelle zugewiesen:

  • Reader 1: SPI0 (Bus 0, Device 0), RST auf GPIO25
  • Reader 2: SPI1 (Bus 1, Device 0), RST auf GPIO17

Beide Reader sind korrekt verkabelt. SPI1 ist über Device Tree aktiviert, und ich verwende keine gemeinsamen CS-Pins. Ich habe eine eigene Klasse für MFRC522 geschrieben, um jeweils ein SPI-Device und einen RST-Pin zu verwenden. Hier ist der relevante Python-Code:

python
import spidev
import RPi.GPIO as GPIO
import time


class MFRC522:
    def __init__(self, spi_bus, spi_device, rst_pin):
        self.spi = spidev.SpiDev()
        self.spi.open(spi_bus, spi_device)
        self.spi.max_speed_hz = 1000000
        self.spi.mode = 0
        self.rst = rst_pin


        GPIO.setwarnings(False)
        GPIO.setmode(GPIO.BCM)
        GPIO.setup(self.rst, GPIO.OUT)
        GPIO.output(self.rst, 1)
        self.reset()


    def reset(self):
        GPIO.output(self.rst, 0)
        time.sleep(0.1)
        GPIO.output(self.rst, 1)
        time.sleep(0.1)


    def send(self, addr, val):
        self.spi.xfer2([(addr << 1) & 0x7E, val])


    def read(self, addr):
        val = self.spi.xfer2([((addr << 1) & 0x7E) | 0x80, 0])
        return val[1]


    def scan_for_tag(self):
        self.send(0x01, 0x0C)  # PCD_TRANSCEIVE
        self.send(0x0D, 0x87)  # BitFramingReg


        self.send(0x0C, 0x26)  # Request idle
        time.sleep(0.01)
        return self.read(0x0A) != 0  # FIFOLevelReg


    def get_uid(self):
        self.send(0x0D, 0x87)
        self.spi.xfer2([0x93, 0x20])  # Anticollision
        time.sleep(0.01)
        resp = self.spi.xfer2([0x93, 0x20] + [0]*5)
        uid = resp[2:6]
        return ':'.join([hex(x)[2:].upper().zfill(2) for x in uid])


    def cleanup(self):
        self.spi.close()
        GPIO.cleanup(self.rst)


# Konfiguration der Reader
reader1 = MFRC522(spi_bus=0, spi_device=0, rst_pin=25)  # SPI0
reader2 = MFRC522(spi_bus=1, spi_device=0, rst_pin=17)  # SPI1


try:
    print("Starte RFID-Scanner (STRG+C zum Beenden)")
    while True:
        if reader1.scan_for_tag():
            uid1 = reader1.get_uid()
            print(f"Reader 1 UID: {uid1}")


        if reader2.scan_for_tag():
            uid2 = reader2.get_uid()
            print(f"Reader 2 UID: {uid2}")


        time.sleep(0.5)


except KeyboardInterrupt:
    print("\nBeende...")


finally:
    reader1.cleanup()
    reader2.cleanup()


Das Problem: Keiner der beiden Reader erkennt zuverlässig Tags. Der zweite reagiert manchmal, oft aber gar nicht oder liefert keine UID. Ich habe bereits unterschiedliche Polling-Intervalle, Resets und sogar die Versorgungsspannung überprüft, aber ohne Erfolg.
so habe ich meine MFRC522 Reader angeschlossen:

Hat jemand Erfahrung damit oder Ideen, wie ich beide MFRC522 zuverlässig gleichzeitig betreiben kann? Gibt es vielleicht Timing-Probleme, Konflikte zwischen den SPI-Bussen oder brauche ich spezielle Initialisierung?

Ich bin für jede Hilfe dankbar!

Bild zum Beitrag
Code, Programmiersprache, Python, RFID, RFID-Chip, Raspberry Pi, ChatGPT

Elektronische Türschlösser / Sicherheit / Woher kommen die Fortschritte?

Unser IT-Boy hat uns als „quick&dirty“ Lösung RFID-Tags und eine Android/iOS-App gebastelt, die vernetzte Türschlösser, ein RFID/NFC Passwort und 128Byte-Zufallszahlen (jeder Mitarbeiter bekommt eine eindeutige Zahl mit einem sogenannten „Hamming Abstand“ von 10bit... jedes Schloss fragt über das Netz nach, ob die jeweilige Zufallszahl berechtigt ist... die App User verwenden sogar Einmal-Zufallszahlen, die sie dann wöchentlich am Zahltag bei mir vom Bildschirm mit einer integrierten QR-Code-App abscannen...) benutzen.

Dagegen sind offenbar so gut wie alle Hoteltüren „vulnerabel“... In ziemlich lächerlich einfacher Weise... Mit Hardware von Aliexpress... und frei verfügbarer Software...

Hat unser IT-Boy uns auch so einen Bock geschossen und er schnallt es bloß (noch) nicht? Ich mein: Außer durch die App kommt man ja an die Zufallszahl eines anderen Mitarbeiters unmöglich dran... Oder?

Oder ist die Denke bei heutigen Studenten iwi anders (=um Lichtjahre fortschrittlicher)? Er erzählte immer von den allerersten Garagentor-Öffnern, die zweimal täglich das Passwort lauthals in die Nachbarschaft gebrüllt haben sollen (also über Funk... einmal morgens, wenn Vati zur Arbeit fuhr... und dann am Nachmittag nochmal, wenn er wieder kam...)...

Oder hat es iwelche Vorteile für ein Hotel, wenn die Gäste sich gegenseitig überraschen können?

Oder gibt es wirtschaftliche Gründe? Oder ist es Aufsässigkeit? Oder sind Schweizerische Ingeniöre iwi gemein sozialisiert?

Smartphone, Sicherheit, Hotel, Passwort, Hotelzimmer, Hotellerie, IT-Sicherheit, RFID, Sicherheitstechnik, NFC, Türöffner, RFID-Chip, NFC-Tag

Error bei Elegoo RFID-RC522-Sensor?

Hallo,

ich versuche von meinem Elegoo Uno R3 auf dem RFID-RC522 meinen NFC-Tag auszulesen, aber es kommt nur der folgende Error:

Card UID: BC FD E1 37
Failed to authenticate to card for reading, could not set UID: 
Timeout in communication.
New UID and contents:
Card UID: BC FD E1 37
Card SAK: 08
PICC type: MIFARE 1KB
Sector Block  0 1 2 3  4 5 6 7  8 9 10 11 12 13 14 15 AccessBits
 15   63 PCD_Authenticate() failed: Timeout in communication.
 14   59 PCD_Authenticate() failed: Timeout in communication.
 13   55 PCD_Authenticate() failed: Timeout in communication.
 12   51 PCD_Authenticate() failed: Timeout in communication.
 11   47 PCD_Authenticate() failed: Timeout in communication.
 10   43 PCD_Authenticate() failed: Timeout in communication.
  9   39 PCD_Authenticate() failed: Timeout in communication.
  8   35 PCD_Authenticate() failed: Timeout in communication.
  7   31 PCD_Authenticate() failed: Timeout in communication.
  6   27 PCD_Authenticate() failed: Timeout in communication.
  5   23 PCD_Authenticate() failed: Timeout in communication.
  4   19 PCD_Authenticate() failed: Timeout in communication.
  3   15 PCD_Authenticate() failed: Timeout in communication.
  2   11 PCD_Authenticate() failed: Timeout in communication.
  1   7 PCD_Authenticate() failed: Timeout in communication.
  0   3 PCD_Authenticate() failed: Timeout in communication.

Liegt es daran, dass ich den Tag schon mal beschrieben habe? Und wie kann ich das Problem lösen?

LG

Error, RFID, NFC, NFC-Tag, Elegoo

Meistgelesene Beiträge zum Thema RFID