Page 1 sur 2

Badge RC522

Posté : lun. 13 nov. 2017 17:04
par estelle
Bonjour,

J'ai installé un lecteur de badge RC522 qui fonctionne très bien seulement voilà lorsque l'on lance la lecture et qu'il n'y a pas de badge le programme stoppe sur la fonction : rdr.wait_for_tag() jusqu'au moment où l'on détecte un badge
Le problème est que le PI ne fait plus rien d'autres en attendant
Le programme fait appel à : from pirc522 import RFID
J'ai bien un répertoire "pirc522" qui a été crée et qui contient un fichier "rfid.py" avec une fonction "rdr.wait_for_tag()" et un while waiting assez facile à modifier pour au bout d'un certain temps en fasse un "BREAK" pour sortir de la boucle et passer à autre chose.....

Code : Tout sélectionner

def wait_for_tag(self):
        # enable IRQ on detect
        self.init()
        self.irq.clear()
        self.dev_write(0x04, 0x00)
        self.dev_write(0x02, 0xA0)
        # wait for it
        waiting = True
        compteur = 0
        while waiting:
            self.dev_write(0x09, 0x26)
            self.dev_write(0x01, 0x0C)
            self.dev_write(0x0D, 0x87)
            waiting = not self.irq.wait(0.1)           
        self.irq.clear()
        self.init()
Ma question concerne le "from pirc522 import RFID"
Es ce un accès externe au PI ?
A+

Re: Badge RC522

Posté : lun. 13 nov. 2017 18:15
par estelle
Apparemment "vague nerd" a déjà beaucoup travaillé sur le sujet

J'ai peur que se soit des accès à des git externes ....

Re: Badge RC522

Posté : lun. 13 nov. 2017 20:26
par nexen
Bonjour estelle,
Non :) c'est juste qu'il importe une partie de la librairie dans ton programme plutôt que toute la lib

en clair il dit : J'importe la partie RFID du GROS truc Pirc522..il n'appel rien d'autre

pour le reste je ne sais pas te répondre.

Re: Badge RC522

Posté : lun. 13 nov. 2017 20:43
par estelle
L'idéal serai d'avoir la totalité des librairies sur le PI

Re: Badge RC522

Posté : lun. 13 nov. 2017 20:45
par nexen
je me suis mal exprimé.... En fait tu as la LIB sur ton pi déjà .... mais lorsqu'il la monte en mémoire in ne prend qu'une partie.

il ne va rien chercher sur internet.

Re: Badge RC522

Posté : lun. 13 nov. 2017 21:18
par estelle
Sauf qu lorsque je supprime le fichier cela fonctionne toujours ...

Re: Badge RC522

Posté : mar. 14 nov. 2017 09:00
par estelle
En faisant une recherche sur "rfid"
J'ai trouvé le fichier rfid.py sur cette arborescence:
"usr/local/lib/pyton2.7/dist-packages/pirc522/"

C'est certainement le chemin de stockage des paquets lors de l'installation

et en "/home/pi/Documents/pi-rc522/pirc522/" où j'ai modifié la fonction " wait_for_tag(self)" du fichier "rfid.py"

Code : Tout sélectionner

 def wait_for_tag(self):
        # enable IRQ on detect
        self.init()
        self.irq.clear()
        self.dev_write(0x04, 0x00)
        self.dev_write(0x02, 0xA0)
        # wait for it
        waiting = True
        compteur = 0
        while waiting:
            self.dev_write(0x09, 0x26)
            self.dev_write(0x01, 0x0C)
            self.dev_write(0x0D, 0x87)
            waiting = not self.irq.wait(0.1)      
            compteur = compteur + 1
            if (compteur > 10000):
              break     
        self.irq.clear()
        self.init()


J'ai ajouté un compteur et un Break pour sortir de la boucle
Cela ne fonctionne pas
Le programme attends toujours la présence d'un tag

Je suis perdue !!
Qui peut éclairer ma lanterne ?
A+

Re: Badge RC522

Posté : mar. 14 nov. 2017 13:59
par maxmed
bonjour,

qu est ce que tu entend par le pi ne fait plus rien en attendant? je n'ai pas bien saisie ton problème

Re: Badge RC522

Posté : mar. 14 nov. 2017 17:10
par estelle
Tant que je n'approche pas le badge le pi reste dans la boucle "waiting" à l'infini
Je souhaiterais au bout d'un certain temps sortir de ce "while"
Voili voilà
A+

Re: Badge RC522

Posté : mar. 14 nov. 2017 19:07
par maxmed
si je lit bien la doc https://github.com/ondryaso/pi-rc522
l'attente du badge est geré par

while True:
rdr.wait_for_tag()
(error, tag_type) = rdr.request()
if not error:
print("Tag detected")
(error, uid) = rdr.anticoll()
if not error:
print("UID: " + str(uid))
# Select Tag is required before Auth
if not rdr.select_tag(uid):
# Auth for block 10 (block 2 of sector 2) using default shipping key A
if not rdr.card_auth(rdr.auth_a, 10, [0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF], uid):
# This will print something like (False, [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0])
print("Reading block 10: " + str(rdr.read(10)))
# Always stop crypto1 when done working
rdr.stop_crypto()

# Calls GPIO cleanup
rdr.cleanup()

autrement dit tu as une boucle true au depart et une autre dans le fichier RFID.py meme si tu quitte la première boucle la deuxième te renverra au même point non ?