nrf24l01+rc522

bonjour a tous!!!

je suis aujourd'hui sur un projet un peu complexe mais pas trop quand même :smiley: .
en fait j ai découvert le RFID et bien sûr sur un de mes post précédent vous le remarquerez j ai fais un petit chose pour m amuser.
j ai aussi découvert la liaison sans fil grâce au module NRF24l01 avec lequel j ai fait de montage simple qui fonctionne très bien.
maintenant je cherche a combiner les deux sur la même carte en sachant qu ils utilisent tout les deux le SPI.
maintenant voila j ai fait mes branchement j ai écris un petit bout de code et je me rends compte que le module NRF24l01 n 'est plus reconnu.
le code bloque au niveau du setup "L'arduino ne peut pas communiquer avec le module RADIO ".
ma question est la suivante y a t il un câblage spécifique a faire quand on utilise des modules différents avec le SPI ou c est niveau du code que ça se fait.
j'ai un peu fouillé sur la toile mais tout est expliquer en anglais et j avoue que j'ai un peu de mal a tout comprendre.
voici le bout de code (je suis conscients qu'il y a des erreurs mais je ne suis qu'au début de ce dernier):

#include <SPI.h>
#include <NRFLite.h>
#include <MFRC522.h>
#define SS_PIN1 6 //SDA pin
#define RST_PIN 5

String lecture;

const static uint8_t RADIO_ID = 1;             // Numéro d'indentification de notre module émetteur
const static uint8_t DESTINATION_RADIO_ID = 0; // Numéro d'identification du module récepteur (A qui notre émetteur transmet)
const static uint8_t PIN_RADIO_CE = 7;//déclaration du pin CE
const static uint8_t PIN_RADIO_CSN = 8;//déclaration du pin CSN


int Valeur;//variable qui contient la valeur transmise

struct RadioPacket // Packet de données envoyé,
//uint8_t=variable sur 8 bit, uint32_t=variable sur 32 bit
{
    uint32_t Valeur;//variable Valeur codée sur 32 bit
};

NRFLite _radio; //Déclaration du module NRF
RadioPacket _radioData;//Déclaration du packet de données
MFRC522 rfid1(SS_PIN1, RST_PIN); // appel de la classe

String motdepass[]={"35 ee e2 bb"};

void setup()
{
    Serial.begin(115200);//On ouvre la laison série avec le PC à 115200 baud

       
    if (!_radio.init(RADIO_ID, PIN_RADIO_CE, PIN_RADIO_CSN))//si l'initialisation du module n'est pas finie
    {
        Serial.println("L'arduino ne peut pas communiquer avec le module RADIO ");
        while (1); // Attend
    }
    Serial.println("Setup fini");
   
   rfid1.PCD_Init(SS_PIN1, RST_PIN);
}

void loop()
{
 // Si on ne detecte pas une carte on reboucle au debut
  if ( ! rfid1.PICC_IsNewCardPresent())
    return;

  // as t'on lu la carte
  if ( ! rfid1.PICC_ReadCardSerial())
    return;
    
   lecture=String(rfid1.uid.uidByte[0],HEX) + " " + String(rfid1.uid.uidByte[1],HEX) + " " + String(rfid1.uid.uidByte[2],HEX) + " " + String(rfid1.uid.uidByte[3],HEX);
  Serial.println(lecture);

  rfid1.PICC_HaltA();
  
  rfid1.PCD_StopCrypto1();
  if(motdepass[0] == lecture){
    Valeur=1;}
  
  if (_radio.send(DESTINATION_RADIO_ID, &_radioData, sizeof(_radioData))) //Si le module récepteur confirme qu'il a bien recu le message
    {
        Serial.println("...Bien arrivé");
    }
    
    else
    {
        Serial.println("...erreur");
    }

    delay(10);//pause de 10 milli secondes
    
   
}

si quelqu'un pourrait m indiquer une doc ou bien un lien avec de explication en français cela m aiderai énormément.
en attendant je continue mes fouilles sur le net.
merci beaucoup cher amis Arduinologue :smiley:

Quel module RFID utilises tu (edit : RC522 c'est dans le titre) ?
Peux tu préciser les branchements que tu as faits pour les deux modules ?

L'image suivante tirée de Wikipedia explique comment brancher plusieurs modules sur un même bus SPI :


L'Arduino est master, les modules sont slave. Ils utilisent la même connexion pour les pins CLK, MOSI et MISO, et une SS différente chacun. Tu trouveras des détails en français ici.

Sur la carte Arduino UNO, Duemilanove et autres cartes basées sur les ATmega 168 / 328, le bus SPI utilise les broches :

  • 10 : /SS
  • 11 : MOSI
  • 12 : MISO
  • et 13 : SCLK.

Sur l'Arduino Mega, ce sont les broches :

  • 50 : MISO
  • 51 : MOSI
  • 52 : SCLK
  • et 53 : /SS

Sur la carte UNO et la Mega, les broches 1, 3 et 4 du connecteur ICSP sont connectées aux broches MISO, MOSI et SCLK. Ceci permet notamment l'utilisation de modules Arduino indifféremment avec une carte UNO et Mega, la connexion SPI se faisant par les 3 broches du connecteur ICSP connectées au bus SPI.

Noter que même si vous n'utilisez pas la broche /SS, elle doit quand même être configurée en sortie; sinon, l'interface SPI sera mise en mode "esclave" et rendra la librairie inopérante.

j utilise le module RFID-RC522

j utilise les branchements préconisé par la librairie SPI càd:

RST/Reset RST 5

  • SPI SS SDA(SS) 6
  • SPI MOSI MOSI 11
  • SPI MISO MISO 12
  • SPI SCK SCK 13

du coup je branche mes pin MISO MOSI SCK en commun avec celle du module radio (nrf24l01).
et les pins CE CSN de ce dernier sont sur les pins 7 et 8.

Si je comprends bien :

  • Si tu testes le module radio seul, avec un sketch pour lui seul : il marche

  • Si tu testes le module RFID seul, avec un sketch pour lui seul : il marche

  • Si tu branches les deux modules avec un sketch pour les deux : la radio ne fonctionne pas
    Tu peux tester :

  • Module radio seul et sketch pour les deux : est-ce que ça donne la même chose ?

  • Les deux modules connectés, et la déclaration du RFID avant celle du module radio dans le setup : est-ce que le RFID est détecté et ça donne la même chose côté radio ?

  • Les deux modules connectés, et ajouter pinmode(xx, output); où xx sont les pins /SS des deux modules

tu as raison je vais procéder par élimination je reviendrai vers le forum pour tenir compte de mon avancée.

re bonjour,

après plusieurs essai et procéder a toute tes astuces lesept le résultat est toujours le même. il y a un conflit entre les deux modules.

il va me falloir bien plus de pistes pour tenter ce montage lol.
c'est pas gagné du tout.
le SPI est plus complexe que je ne croyais,c'est partie pour traduire toutes les doc en français.

merci pour toutes les idées mais s'il y en a d'autres je suis preneur ;D

Il peut y avoir des conflits de bibliothèques : tu peux tester celle ci pour le RC522

Il est écrit aussi ceci sur la page de référence du SPI Arduino :

Note about Slave Select (SS) pin on AVR based boards
All AVR based boards have an SS pin that is useful when they act as a slave controlled by an external master. Since this library supports only master mode, this pin should be set always as OUTPUT otherwise the SPI interface could be put automatically into slave mode by hardware, rendering the library inoperative.

Sur un UNO, c'est la pin 10 : il faut peut-être la déclarer OUTPUT si tu ne l'utilises pas.