Remi B
Posts: 11
Joined: Mon Aug 27, 2018 7:22 pm

RFID-RC522 langage C/C++

Mon Aug 27, 2018 7:30 pm

Bonjour.

J'ai une puce RFID-RC522 ne sachant pas comment cela fonctionne un langage C/C++ je n'ai rien trouvé sur Internet je vous demande donc de l'aide merci.

Merci d'avance.


Remi B
Posts: 11
Joined: Mon Aug 27, 2018 7:22 pm

Re: RFID-RC522 langage C/C++

Tue Aug 28, 2018 4:53 pm

Ceci fonctionne très bien mais le programme fourni à l'intérieur et en python et moi je le voudrais en C ou en C++.

Merci quand même.

danjperron
Posts: 3974
Joined: Thu Dec 27, 2012 4:05 am
Location: Québec, Canada

Re: RFID-RC522 langage C/C++

Tue Aug 28, 2018 6:47 pm

Salut Remi B,


il y a la version de google qui démarre une commande avec une clef RFID. je l'ai modifié pour me passer de la librairie BCM2835.

Le tout est en 'C'

https://github.com/danjperron/rc522_reader


Tu peux aussi utiliser la version d'arduino et changer simplement l'accès au SPI. Cela ne devrait pas être difficile puisque tu peux te fier à mon rc522_reader.


https://dl.dropboxusercontent.com/s/47l ... 0/rfid.zip

jelopo
Posts: 1673
Joined: Wed Oct 17, 2012 7:53 pm

Re: RFID-RC522 langage C/C++

Tue Aug 28, 2018 6:51 pm

Bonjour,

Dans le monde Raspberry PI, le Python est effectivement bien plus utilisé que le C/C++.
Il y a peut être une "siouxerie" qui consisterait à aller transformer un programme Arduino, mais il risque de manquer des bibliothèques...
Mais là c'est l"esprit super bidouille :ugeek:

EDIT: A ma plus grande surprise, @danjperron 'en même temp' propose une approche similaire, c'est peut être pas si tordu ?
A+

Remi B
Posts: 11
Joined: Mon Aug 27, 2018 7:22 pm

Re: RFID-RC522 langage C/C++

Wed Aug 29, 2018 12:31 am

Merci beaucoup je ne trouve pas comment implémenter la librairie Arduino mais je chercherai.
Par contre GitHub ne fonctionne plus.

Merci!!

danjperron
Posts: 3974
Joined: Thu Dec 27, 2012 4:05 am
Location: Québec, Canada

Re: RFID-RC522 langage C/C++

Wed Aug 29, 2018 11:02 am

Par contre GitHub ne fonctionne plus.
Peux-tu expliquer ce qui ne fonctionne pas?

Code: Select all

git clone https://github.com/danjperron/rc522_reader
cd rc522_reader
make


En passant le code de rc522_reader que j'ai modifié de google a toute les fonctions nécessaires!
La modification que j'ai faite est d'utiliser le ioctl de linux pour le SPI et le fichier pilote '/dev/gpiomem' pour l'accès au gpio. De cette façon le code roule sous l'usagé 'pi' sans sudo.

Pour plus de réponse pour rc522_read regarde le post suivant.
https://www.raspberrypi.org/forums/view ... 8#p1348644

Attention il y a beaucoup de modification de réplique en réplique. Donc il faut prendre le dernier code envoyé.

Remi B
Posts: 11
Joined: Mon Aug 27, 2018 7:22 pm

Re: RFID-RC522 langage C/C++

Wed Aug 29, 2018 11:53 am

Super merci désolé je n'avais pas compris comme ça pour le lien github.

J'ai mis le fichier RC522.conf dans le dossier /etc et fait les branchements comme ceci: http://i.stack.imgur.com/pXzYv.png

Code: Select all

git clone https://github.com/danjperron/rc522_reader
cd rc522_reader
make
Ceci a été fait dans le dossier Pi

Mais une fois le programme exécuté "rc522_reader" et j'ai beau mettre ma carte dessus il ne se passe rien j'ai essayé avec plusieurs cartes.

Aurais-je oublié quelque chose.

Désolé de vous embêter et merci pour toutes ces solutions.

danjperron
Posts: 3974
Joined: Thu Dec 27, 2012 4:05 am
Location: Québec, Canada

Re: RFID-RC522 langage C/C++

Wed Aug 29, 2018 1:02 pm

Vérifions les connections
3.3V -> pin 2, 3.3V
GND -> pin 6 , GND
MOSI -> pin 19, SPI_MOSI
MISO -> pin 21, SPI_MISO
SCK -> pin 23, SPI_CLK
SAD -> pin 24, SPI_CE0
RST non branché
IRQ non branché
Le SPI doit être activé
sudo raspi-config
5 - Interfacing option
P4 SPI
<Oui>

Pour /etc/RC522.conf utilise le fichier de base pour l'instant sans clef définie.

Code: Select all

# SPI_SPEED - spi clock rate in kHz. Must be >=4 and <=125000
SPI_SPEED=5000

#User id and group id (no user root allowed)
UID=500
GID=1002

# Path for store memory dump of UltraLight tags. File will named as serial number.
NEW_TAG_PATH=/tmp/

l'application rc522_reader lit les cartes RFID et exécute une application spécifiée dans RC522.conf.

Pour vérifier si ton module RFID fonctionne utilise la commande

Code: Select all

sudo killall rc522_reader
cd /home/pi/rc522_reader
./rc522_reader -d
[/code]

Le killall est au cas ou que tu as déja l'application rc522_reader qui roule.

Lorsque tu approches une carte, le numéro de série devrait s'afficher.
Last edited by danjperron on Wed Aug 29, 2018 2:20 pm, edited 1 time in total.

Remi B
Posts: 11
Joined: Mon Aug 27, 2018 7:22 pm

Re: RFID-RC522 langage C/C++

Wed Aug 29, 2018 2:01 pm

Cela fonctionne super bien mais uniquement avec -d.

Ceci peut causer un problème pour la suite?

A part ça tout marche super bien merci.

danjperron
Posts: 3974
Joined: Thu Dec 27, 2012 4:05 am
Location: Québec, Canada

Re: RFID-RC522 langage C/C++

Wed Aug 29, 2018 2:19 pm

L'argument -d est le mode "debug".


Normallement rc522_reader exécute une commande qui est assujettie au numéro de série de la clef. Si la clef n'a pas de commande elle est ignorée.

Le mode 'debug' permet de lire le numéro de série et de l'afficher qui est normallement non disponible en mode normal.


Bug #1 Si tu as des clefs dans /etc/RC522.conf, l'application en mode debug ne fonctionne qu'une fois. Il faut arrêter et redémarrer l'application pour lire une autre clef.


Je ne sais pas ce que tu veux faire de ton lecteur RFID mais tu peux facilement modifier ou utiliser les fonctions pour faire ce que tu veux.

N'oublie pas de regarder le post que je t'ai envoyé pour comprendre comment fonctionne rc522_reader.

Remi B
Posts: 11
Joined: Mon Aug 27, 2018 7:22 pm

Re: RFID-RC522 langage C/C++

Wed Aug 29, 2018 5:05 pm

Cela veut donc dire que je ne peux pas regarder son idée si c'est une carte vierge?

danjperron
Posts: 3974
Joined: Thu Dec 27, 2012 4:05 am
Location: Québec, Canada

Re: RFID-RC522 langage C/C++

Wed Aug 29, 2018 5:54 pm

Cela veut donc dire que je ne peux pas regarder son idée si c'est une carte vierge?
Si tu ne modifies pas le code il te faut l'argument -d.


Il y a aussi le syslog si tu n'utilise pas l'argument.

Code: Select all

pi@Pi2:~/rc522_reader $ for i in /var/log/syslog{.1,}; do cat $i | grep "rc522_reader";done
Aug 28 20:27:09 Pi2 rc522_reader: Found param. SPI_SPEED=5000
Aug 28 20:27:44 Pi2 rc522_reader: Found param. [95c95806] echo -n http://acer.local/video/Krypton/KryptonS1E1.mp4 >/tmp/fifoRFID
Aug 28 20:27:50 Pi2 rc522_reader: Found param. [95c95806] echo -n http://acer.local/video/Krypton/KryptonS1E1.mp4 >/tmp/fifoRFID
Aug 28 20:28:20 Pi2 rc522_reader: Found param. SPI_SPEED=5000
Aug 28 20:28:22 Pi2 rc522_reader: Found param. [95c95806] echo -n http://acer.local/video/Krypton/KryptonS1E1.mp4 >/tmp/fifoRFID
Aug 28 20:28:36 Pi2 rc522_reader: Found param. SPI_SPEED=5000
Aug 28 20:28:37 Pi2 rc522_reader: Found param. [55d55806] echo -n /home/pi/videos/Krypton/KryptonS1E2.mp4 >/tmp/fifoRFID
Aug 28 20:28:51 Pi2 rc522_reader: Found param. SPI_SPEED=5000
Aug 28 20:28:53 Pi2 rc522_reader: Found param. [04ba80f2973680] echo -n pause >/tmp/fifoRFID
Aug 28 20:28:57 Pi2 rc522_reader: Found param. SPI_SPEED=5000
Aug 28 20:28:59 Pi2 rc522_reader: Found param. [55d55806] echo -n /home/pi/videos/Krypton/KryptonS1E2.mp4 >/tmp/fifoRFID
Aug 28 20:30:29 Pi2 rc522_reader: Found param. SPI_SPEED=5000
Aug 28 20:30:44 Pi2 rc522_reader: Found param. [2a818e45] echo -n random /home/pi/KryptonS1.txt >/tmp/fifoRFID
Aug 28 20:30:57 Pi2 rc522_reader: Found param. [95c95806] echo -n http://acer.local/video/Krypton/KryptonS1E1.mp4 >/tmp/fifoRFID
Aug 28 20:31:12 Pi2 rc522_reader: Found param. [3cd44c02] echo -n quit >/tmp/fifoRFID
Aug 29 13:33:56 Pi2 rc522_reader: Found param. SPI_SPEED=5000
Aug 29 13:34:02 Pi2 rc522_reader: Found param. SPI_SPEED=5000

Remi B
Posts: 11
Joined: Mon Aug 27, 2018 7:22 pm

Re: RFID-RC522 langage C/C++

Wed Aug 29, 2018 5:55 pm

Ci j'ai bien compris ça doit marcher comme ceci:

Code: Select all

pi@pi:~/rc522_reader $ ./rc522_reader -d
Debug mode.
Type: 0400, Serial: f1ac022d
New tag: type=0400 SNlen=4 SN=[f1ac022d]

Code: Select all


# SPI_SPEED - spi clock rate in kHz. Must be >=4 and <=125000
SPI_SPEED=5000

#User id and group id (no user root allowed)
UID=500
GID=1002

# Path for store memory dump of UltraLight tags. File will named as serial numb$
NEW_TAG_PATH=/tmp/

#GPIO pin (bsm2835 gpio number!) for indiction of active tasks.
#GPIO=18


[f1ac022d] echo bonjour
Mais après à l'exécution tu programme sans -d il ne se passe rien.

Donc je suppose que j'ai mal compris quelque chose.

Et un grand merci pour tous les être fourni.

danjperron
Posts: 3974
Joined: Thu Dec 27, 2012 4:05 am
Location: Québec, Canada

Re: RFID-RC522 langage C/C++

Wed Aug 29, 2018 10:57 pm

Code: Select all

[f1ac022d] echo bonjour
Ok c'est un problème parce que le stdout ne sortira pas!

Si tu passes cette commande après tu verras que la commande a fonctionné

Code: Select all

for i in /var/log/syslog{,.1}; do cat $i | grep rc522_reader;done;
essaie plutôt

1- Crée un fichier test.txt
touch /home/pi/test.txt
2- Dans le fichier /etc/RC522.conf remplace ajoute >>/home/pi/test.txt pour rediriger le echo dans le fichier

[042e731a792681] echo test1 >>/home/pi/test.txt
[04ba80f2973680] echo test2 >>/home/pi/test.txt

3- ouvrir un console et taper
tail -f /home/pi/test.txt
4- ouvrir une autre console et démarrer rc522_reader
/home/pi/rc522_reader

Maintenant lorsque tu approches un clef la console avec la commande tail affichera l'écho.

Remi B
Posts: 11
Joined: Mon Aug 27, 2018 7:22 pm

Re: RFID-RC522 langage C/C++

Thu Aug 30, 2018 12:08 am

Ok cette solution fonctionne super bien mais par contre si je veux exécuter un programme qui serait à l'adresse /home/pi/bonjour par exemple comment puis-je faire.

Aussi non juste un grand merci.

danjperron
Posts: 3974
Joined: Thu Dec 27, 2012 4:05 am
Location: Québec, Canada

Re: RFID-RC522 langage C/C++

Thu Aug 30, 2018 1:32 am

Si tu veux que stdout passe il faut enlever freopen("","w",stdout) dans main.c (ligne 157)
Mets le en remarque et recompile

Code: Select all

                                fclose(stdin);
//                              freopen("","w",stdout);
//                              freopen("","w",stderr);
                                execl("/bin/sh","sh","-c",str,NULL);
                        } else if (child>0) {
Maintenant ton echo bonjour va passer.
pour passer une commande tu as juste a ajouter la commande dans /etc/RC522.conf
ex:

Code: Select all

[042e731a792681]python3  /home/pi/test1.py

Aussi sans changer le freopen tu peux passer ta commande sur un autre terminal si tu es en Desktop GUI. De cette façon stdout est fonctionnel
ex:

Code: Select all

[042e731a792681]lxterminal -e python3  /home/pi/test1.py

nano test1.py

Code: Select all

pi@Pi2:~ $ cat test1.py
#!/usr/bin/python3
import time

print("allo")

print("appuyer sur CTRL-C pour quitter")

try:

  while True:
    time.sleep(0.01)

except KeyboardInterrupt:
  pass

Remi B
Posts: 11
Joined: Mon Aug 27, 2018 7:22 pm

Re: RFID-RC522 langage C/C++

Thu Aug 30, 2018 7:31 pm

Tout fonctionne super bien merci beaucoup.

Pour le reste je pourrais me débrouiller seul je vous dis un grand merci à tous.

Return to “Français”