Python – 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

Betreff: Desktop-App (Mac/Win) mit Qt & komplexer UI – Python oder C++ für Hobby-Entwickler mit KI-Fokus?

allo zusammen,

ich plane eine persönliche Desktop-Aufgabenverwaltungs-App für Mac & Windows. Langfristig soll sie eine komplexe UI bekommen (Kanban-Board mit Drag & Drop, Kalender mit OS-Integration). Mein Hauptziel ist es, eine Technologie zu wählen, die das packt, um einen späteren kompletten Rewrite der GUI wegen Framework-Limitierungen zu vermeiden.

Nach viel Recherche habe ich mich für Qt als UI-Framework entschieden, da es die nötige Mächtigkeit und den Qt Designer (den ich gut finde) bietet.

Jetzt stehe ich aber vor der großen Frage: Soll ich Qt mit Python (PySide6) oder mit C++ nutzen?

Kurz zu meinem Hintergrund:

  • Ich entwickle als Hobby, nicht beruflich.
  • Ich setze sehr stark auf KI-Unterstützung für die konkrete Code-Erstellung.
  • Meine C++ Erfahrung ist minimal: Bei sehr kleinen Windows-Tools (mit WinAPI, nicht Qt) hat die KI den Code geschrieben, ich habe primär Fehler mit der KI behoben. Ich kann C++ also nicht wirklich.
  • Meine Go Erfahrung ist auch kaum vorhanden (nur mal ein Fyne-Fenster testweise).
  • Ich habe aber einen (von KI geschriebenen) Python-Backend-Dienst für eine andere iOS Swift App. Python ist also schon entfernt in meinem technischen Umfeld, und ich habe auch Interesse an Pentesting (wo Python nützlich ist).
  • Für die Aufgaben-App selbst ist ein Installer/Abhängigkeiten okay. (Der Wunsch nach kleinen, einzelnen 
  • .exe
  • -Dateien betrifft andere, zukünftige, kleine Windows-Tools, für die ich dann wahrscheinlich Go oder C++/WinAPI nehmen würde – das ist also ein getrenntes Thema.)

Meine Zwickmühle mit Python/Qt vs. C++/Qt:

  • Python/Qt (PySide6):
  • Pro: Bietet die volle Qt-Power. Python ist deutlich zugänglicher für mich als C++. Ich habe die genannten Synergien (anderer Dienst, Pentesting). Die KI kann mich bei Python/Qt sicher gut unterstützen, und der Qt Designer hilft beim UI-Bau.
  • Mein großes Problem: Ich habe einen hartnäckigen "faden Beigeschmack" / ein starkes Unbehagen, Python für GUI-Programmierung zu nutzen, auch wenn meine frühere Hauptsorge (Performance) bei Qt-GUIs wohl unbegründet ist.
  • C++/Qt:
  • Pro: Wäre Qt "nativ", und mein Python-GUI-Unbehagen wäre weg.
  • Meine große Sorge: Die extreme Lernkurve von C++ von meinem jetzigen Stand. Ich habe Angst, hier monatelang nur mit der Sprache zu kämpfen (auch mit KI) und nicht bei der App voranzukommen, was für mich "verschwendete Zeit" wäre.

Meine Frage an euch: Ich will jetzt "richtig anfangen" mit Version 0.0.1 meiner App (Fenster, Eingabe, Button, Liste). Was ratet ihr mir in dieser spezifischen Situation für den Start mit Qt? Sollte ich versuchen, meine Python-GUI-Aversion (mit viel KI-Hilfe und Fokus auf den Qt Designer) zu überwinden, um die Vorteile der zugänglicheren Sprache und der Synergien zu nutzen? Oder haltet ihr den Weg mit C++/Qt (trotz des immensen Lernaufwands für mich) für realistischer oder langfristig besser, um Qt ohne Python-GUI-Unbehagen zu nutzen? Mein Hauptziel bleibt, die App mit Kanban & Co. sicher umsetzen zu können, ohne in einer Sackgasse zu landen.

Vielen Dank für eure Einschätzungen!

CPP, künstliche Intelligenz, Programmiersprache, Python, Qt Creator

Meistgelesene Beiträge zum Thema Python