2 arduino MEga, ESP8266 on board avec cables USB 24,0 euro
5 modules RFID - MFRC522 7,5 euro
1 batterie 30000 mah 2 ports 12,0 euro
25 cables dupond 1,0 euro
5 led +resistance 1,0 euro
Total 45,5 euro
Après avoir monté le smartplayer, je pensais pouvoir réaliser le storyboard en 2 ou 3 jours.
J'ai ma base d’échange et de lecture de 2 lecteurs RFID, j'ai la bibliothèque de miguel balboa avec son programme pour la lecture de 5 lecteurs RFID MFRC522, donc emballé...c'est pesé.
Mais comme souvent avec l'arduino, nos expériences sont mises à rude épreuves et...CA NE FONCTIONNAIT PAS !!!!!
j'explique :
je branchais 2 RFID aliexpress, mais déjà j'avais de problèmes aléatoires de fonctionnement, et lorsque je branchais le 3 eme lecteur, plus rien ne fonctionnait.
Comme je ne suis pas doué en soudure, j'ai du vérifier et revérifier le fonctionnement de chaque lecteur.
Faire et refaire les câbles et tripodes permettant de relier le lecteur à l’Arduino
M'assurer de la qualité de l'alimentation électrique
Vérifier 50 fois mes branchements compte tenu du nombre de câbles, et j'ai souvent eu des erreurs de ports.
Au bout de 1 semaine, je me suis tourné vers les forums pour trouver ces 3 articles :
https://github.com/miguelbalboa/rfid/issues/290
https://forum.arduino.cc/index.php?topic=119945.0
http://www.learningaboutelectronics.com/Articles/Multiple-SPI-devices-to-an-arduino-microcontroller.php
Et comme je suis sympa je vais essayer de résumer les trucs que j'ai piqué à droite et à gauche
- séparer les RST et SS pin pour chaque lecteur
- effectuer un PDC.init a chaque utilisation d'un module RFID, le but et d'activer/lire/désactiver avant de passer au lecteur suivant.
- mettre un peu de delay entre certains opérations le temps que le module se réveille ou se réinitialise
- les modules aliexpress génère un bruit parasite sur le port MOSI, ce qui fait qu'au delà de 2 lecteurs, ça ne fonctionnera plus sans correction matériel ou logiciel.
Ce dernier point est la source de mes ennuis.
J'ai donc déjà fait pas mal d'essai avec les 3 premiers points avant de comprendre que ce ne serait pas suffisant.
il y a 2 propositions de corrections matériel :
un multiplexeur 7 ou 15 ports analogique https://github.com/mikedotalmond/Arduino-Mux-CD74HC4067
Materiel : Prix 2 euros l'unité frais d'envoi inclus
le MUX ne peut lire qu'un port à la fois, donc il est dédié au SS_PIN dans notre cas.
Inutile de vous dire que je n'en avais pas sur la main.
j'ai donc chercher à savoir si je pouvais éteindre électriquement les lecteurs que je n'utilisais pas et en faisant des essais, si je passais le port RST en low, mes 3 lecteurs fonctionnaient parfaitement.
L'utilisation du PDC.init remet automatiquement le port RST à HIGH
Du coup je n'ai pas essayé jusqu’à 5 lecteurs sur un même MEGA parce que mes soudures étaient vraiment mauvaises.
Et si vous avez vouloir lire mon code, vous verrez que j'ai oublié ce qu’était une fonction pour avoir un bout de code pour chaque module, l'important c'est qu'il marche et que j'ai de la place en mémoire disponible en quantité suffisante
L’inconvénient, il me faut une batterie avec 2 ports USB et d'une capacité suffisante pour alimenter les 2 MEGA
L’esthétique est encore à travailler, mais tant que c'est fonctionnel, ça0 me permet d'avancer.
Le boitier est composé d'un carton de clavier de PC suffisamment grand.
Les led ( 3 bleu pour le flop) , 1 jaune pour la river, 1 jaune pour la turn permettent de suivre les premières étapes du code ( fin du setup, réception de la première trame OK pour valider la communication avec le serveur), puis elles s'allument à chaque lecture d'un tag pour un lecteur RFID.
Lorsque la carte 1 du flop est retiré, toutes les leds s’éteignent.
5 ports communs - MISO/MOSI/SCK,GND,3,3 V
Les couleurs de mon cablage ne sont pas identiques au dessin
Voici les 2 codes pour chaque arduino MEGA
La partie ESP reste inchangé et l'utilisation du MEGA aussi, donc pour cela se reporter au modop sur le SMARTPLAYER 4.
La partie de code du lecteur MFRC522 permettant son fonctionnement
dans le loop
if( current_rfid>previous_rfid+4002)
{
digitalWrite(RST_1_PIN,LOW);
Serial.println("debug MEGA -- loop - lire rfid 1");
lire_mfrc522_1();
digitalWrite(RST_1_PIN,LOW);
lire_mfrc522_2();
digitalWrite(RST_2_PIN,LOW);
lire_mfrc522_3();
digitalWrite(RST_3_PIN,LOW);
previous_rfid=millis();
}
Exemple d'une fonction, le code est simplifié. Le code complet est dans le fichier à télécharger ci contre.
void lire_mfrc522_2()
{
[..]
Serial.println("debug MEGA :: lire_mfrc522 - lecteur 2 ");
// Look for new cards
if (mfrc522_2.PICC_IsNewCardPresent() && mfrc522_2.PICC_ReadCardSerial())
{
// envoi vers ESP01 si different
ajout_buffer_retry(cmdfromarduino, controle_len, 3);
[...]
// evite l'envoi multiple du meme RFID sur le meme lecteur
[...]
// Halt PICC
mfrc522_2.PICC_HaltA();
// Stop encryption on PCD
mfrc522_2.PCD_StopCrypto1();
} //end if
else
{
[...]
Serial.println(" carte enlevé du lecteur 2");
}
// je fais l'init en fin de procédure car cela prend 2 à 3 secondes.
mfrc522_2.PCD_Init( SS_2_PIN , RST_2_PIN); // Init each MFRC522 card
delay(100);
} //end lire MFRC522_2