Hallo zusammen,
in der Hoffnung hier im Forum mit meinem Thema nicht all zu falsch zu sein hätte ich folgende Frage
Zur Erkennung von RFID Karten/Chips, nutze ich den D1 Mini und MFRC522. Als Software verwende ich micropython (was anderes kann ich nicht )
Im Prinzip war die Schaltung einfach vollzogen, und als Python Funktionen benutze ich diese hier (mfrc522.py):
https://github.com/wendlers/micropython-mfrc522
Zum Lesen der Karte wird dann diese Datei aufgerufen:
import mfrc522
from os import uname
import time
global rdr
if uname()[0] == 'WiPy':
rdr = mfrc522.MFRC522("GP14", "GP16", "GP15", "GP22", "GP17")
elif uname()[0] == 'esp8266':
rdr = mfrc522.MFRC522(0, 2, 4, 5, 14)
else:
raise RuntimeError("Unsupported platform")
print("")
print("Place card before reader to read from address 0x08")
print("")
def uid(raw_uid):
return "0x%02x%02x%02x%02x" % (raw_uid[0], raw_uid[1], raw_uid[2], raw_uid[3])
def readCard():
(stat, tag_type) = rdr.request(rdr.REQIDL)
if stat == rdr.OK:
(stat, raw_uid) = rdr.anticoll()
# print(stat, raw_uid)
if stat == rdr.OK:
# print("New card detected")
print('----------------')
print(raw_uid)
print(uid(raw_uid))
print("")
else:
print('rdr.anticoll XXXX')
else:
print('rdr.OK XXXX')
def do_read():
try:
i=0
while True:
i=i+1
print(i)
readCard()
except KeyboardInterrupt:
print("Bye")
Alles anzeigen
--> das sieht layouttechnisch nicht fein aus - sorry dafür!!! Auf die Schnelle weiß ich nicht wie man vernünftig Code einfügen kann... read1.py
Jedenfalls die Einrückungen sind OK und der Code funktioniert, zumindest fast...
Der Ergebnis soll sein, dass bei einer erkannten Karte die UID ausgegeben wird und bei einer nicht erkannten Karte XXXX... davor kommt jeweils eine laufende Zahl ...
Mein Problem besteht nun darin, dass, wenn ich eine Karte auf den Reader drauf lege, so würde ich vermuten, müsste dieser mir ständig die UID dieser Karte zurückgeben.
Leider macht er das nicht. Nur bei exakt jedem zweitem Rückgabewert erhalte ich die UID ansonsten XXXX (also ob kein Chip erkannt worden wäre).
Das selbe passiert mit unterschiedlichen Karten oder Chips.
Der Output in picocom sieht dann wie folgt aus:
>>>
>>> import read1
Place card before reader to read from address 0x08
>>> read1.do_read()
1
----------------
[101, 82, 139, 171, 23]
0x65528bab
2
rdr.OK XXXX
3
----------------
[101, 82, 139, 171, 23]
0x65528bab
4
rdr.OK XXXX
5
----------------
[101, 82, 139, 171, 23]
0x65528bab
6
rdr.OK XXXX
7
----------------
[101, 82, 139, 171, 23]
0x65528bab
8
rdr.OK XXXX
9
----------------
[101, 82, 139, 171, 23]
0x65528bab
10
rdr.OK XXXX
11
----------------
[101, 82, 139, 171, 23]
0x65528bab
12
rdr.OK XXXX
Für mich ist das eher nicht ganz zufriedenstellend ...o der ist das Verhalten des Readers normal? Habt Ihr ähnliche Erfahrungen gesammelt mit einem esp oder auch mit Raspi?
Vielen Dank für Eure Unterstützung!!!