RFID-Scan Script

Python auf Einplatinencomputer wie Raspberry Pi, Banana Pi / Python für Micro-Controller
Antworten
torch
User
Beiträge: 2
Registriert: Montag 8. Oktober 2018, 16:08

Montag 8. Oktober 2018, 16:17

hallo liebe forengemeinde,

ich bin leider was python angeht absoluter neuling und stehe bei einem script an, welches per raspberry den MFRC522 rfid reader ansprechen sollte...
ist hier jemand so nett und könnte bei unten stehendem code die while schleife entfernen, so dass das script den scan-durchgang einmal durchführt und sich dann unabhängig vom status beendet?




#!/usr/bin/env python
# -*- coding: utf8 -*-

import RPi.GPIO as GPIO
import MFRC522
import signal

continue_reading = True

# Capture SIGINT for cleanup when the script is aborted
def end_read(signal,frame):
global continue_reading
print "Ctrl+C captured, ending read."
continue_reading = False
GPIO.cleanup()

# Hook the SIGINT
signal.signal(signal.SIGINT, end_read)

# Create an object of the class MFRC522
MIFAREReader = MFRC522.MFRC522()

# Welcome message
print "Welcome to the MFRC522 data read example"
print "Press Ctrl-C to stop."


# This loop keeps checking for chips. If one is near it will get the UID and authenticate
while continue_reading:

# Scan for cards
(status,TagType) = MIFAREReader.MFRC522_Request(MIFAREReader.PICC_REQIDL)

# If a card is found
if status == MIFAREReader.MI_OK:
print "Card detected"

# Get the UID of the card
(status,uid) = MIFAREReader.MFRC522_Anticoll()


# If we have the UID, continue
if status == MIFAREReader.MI_OK:

# Print UID
print "Card read UID: %s,%s,%s,%s" % (uid[0], uid[1], uid[2], uid[3])

# This is the default key for authentication
key = [0xFF,0xFF,0xFF,0xFF,0xFF,0xFF]

# Select the scanned tag
MIFAREReader.MFRC522_SelectTag(uid)

# Authenticate
status = MIFAREReader.MFRC522_Auth(MIFAREReader.PICC_AUTHENT1A, 8, key, uid)



# Check if authenticated
if status == MIFAREReader.MI_OK:
MIFAREReader.MFRC522_Read(8)
MIFAREReader.MFRC522_StopCrypto1()
else:
print "Authentication error"



wäre super dankbar wenn sich jemand finden würde der das netterweise entfernt *g*

liebe grüße
mario
Sirius3
User
Beiträge: 8791
Registriert: Sonntag 21. Oktober 2012, 17:20

Montag 8. Oktober 2018, 17:17

Dieses Signal-Handling sehe ich jetzt in letzter Zeit öfters. Macht die Sache nicht besser. Woher kramt ihr das Zeug denn aus?

Es ist doch recht unwahrscheinlich, dass gleich beim ersten Mal was vom RFID-Chip gelesen werden kann. Was willst Du denn damit erreichen?

Wo hast Du denn Schwierigkeiten beim Entfernen der while-Schleife?
torch
User
Beiträge: 2
Registriert: Montag 8. Oktober 2018, 16:08

Montag 8. Oktober 2018, 19:05

hallo,

naja meistens sind diese scripte beispielscripte vom hersteller diverser sensoren für den raspberry. funktioniert ja im prinzip ganz gut und man lernt eine menge dabei und es macht eine menge spaß.

aber nun zum eigentlichen problem... wenn ich nun die zeile "while continue_reading:" ausklammer, bekomm ich diverse fehlermeldungen, und ab da weiss ich leider nicht mehr weiter.

das script wird extern von einem perlscript aufgerufen welches nur die ausgabe übernimmt, dass kann dann auch mehrmals starten um den wert abzurufen. (my $var = system("sudo python /home/pi/MFRC522-python/Read.py"); .. alles kein problem.
aber wie gesagt, ich bekomme fehlermeldungen wenn ich "while continue_reading:" mit # ausklammer :/
__deets__
User
Beiträge: 3990
Registriert: Mittwoch 14. Oktober 2015, 14:29

Montag 8. Oktober 2018, 19:09

Du musst das auch ent-rücken. Die Leerzeichen sind in Python signifikant.
Benutzeravatar
sls
User
Beiträge: 283
Registriert: Mittwoch 13. Mai 2015, 23:52
Wohnort: Tannhauser Gate

Montag 8. Oktober 2018, 19:11

Wie toll das so funktioniert sieht man dann immer hier im Forum wenn die Leute mit diesen teilweise echt schrottigen Scripten ankommen und auf ganz merkwürdige Probleme stoßen, wenn's plötzlich nicht mehr so toll funktioniert... Anyways.

Es reicht nicht, einfach nur die While-Schleife auszuklammern. In Python sind Einrückungen (hier im Schleifen-Körper) essentiell. Daher wird dir vermutlich ein IndentationError um die Ohren fliegen.

Es bleibt die Frage offen, was Sinn der Übung sein soll. (Siehe Sirius3's Anmerkung)
With great processing power comes great responsibility.
Antworten