Problème nRF24

Bonjour,

J'ai un problème avec mes modules nRF24, il marche a moitie. Le client envoie un code au serveur et le serveur lui retourne un code de confirmation et la rien le client ne reçois rien.... J'ai jamais le message coté client de "Data recu".

Coté client

#include <SPI.h>
#include <Mirf.h>
#include <nRF24L01.h>
#include <MirfHardwareSpiDriver.h>

String cmd           = "";
void setup(){
  Serial.begin(9600);
   
  Mirf.cePin = 9; // CE sur D8
  Mirf.csnPin = 8; // CSN sur D7
  Mirf.spi = &MirfHardwareSpi; // On veut utiliser le port SPI hardware
  Mirf.init(); // Tout est bon ? Ok let's go !
 
  Mirf.channel = 0; // On va utiliser le canal 0 pour communiquer (128 canaux disponible, de 0 à 127)
  Mirf.payload = sizeof(unsigned long); // = 4, ici il faut déclarer la taille du "payload" soit du message qu'on va transmettre, au max 32 octets
  Mirf.config(); // Tout est bon ? Ok let's go !
   
  Mirf.setTADDR((byte *)"nrf02"); // Le 2eme module va envoyer ses info au 1er module
  Mirf.setRADDR((byte *)"nrf01"); // On définit ici l'adresse du 2eme module
   
  Serial.println("Client"); 
  Mirf.powerUpRx();
}

void loop(){
  byte data_recu[Mirf.payload];
  if (Serial.available()){
    cmd = Serial.readString();
    Commande();
  }
  
  if(Mirf.dataReady())
    Serial.println("Data recu");
}

void Commande() {
  byte code[Mirf.payload];
  Serial.print("Envoie....");
  code[0] = 0;
  code[1] = 'I';
  code[2] = 1;
  code[3] = 'A';
  Mirf.send(code);
  delay(1); 
  while(Mirf.isSending());
  Serial.println("OK");
}

Coté serveur

#include <SPI.h>
#include <Mirf.h>
#include <nRF24L01.h>
#include <MirfHardwareSpiDriver.h>
 
void setup(){
  Serial.begin(9600);
   
  Mirf.cePin = 9; // CE sur D8
  Mirf.csnPin = 8; // CSN sur D7
  Mirf.spi = &MirfHardwareSpi; // On veut utiliser le port SPI hardware
  Mirf.init(); // Tout est bon ? Ok let's go !
 
  Mirf.channel = 0; // On va utiliser le canal 0 pour communiquer (128 canaux disponible, de 0 à 127)
  Mirf.payload = sizeof(unsigned long); // = 4, ici il faut déclarer la taille du "payload" soit du message qu'on va transmettre, au max 32 octets
  Mirf.config(); // Tout est bon ? Ok let's go !
   
  Mirf.setTADDR((byte *)"nrf01"); // Le 2eme module va envoyer ses info au 1er module
  Mirf.setRADDR((byte *)"nrf02"); // On définit ici l'adresse du 2eme module
   
  Serial.println("Serveur"); 
}
 
void loop(){
  byte data_recu[Mirf.payload]; // Tableau de byte qui va stocker le message recu

  if(!Mirf.isSending() && Mirf.dataReady())
  { // Si un message a été recu et qu'un autre n'est pas en cours d'emission
    Serial.print("Recu ");
    Mirf.getData(data_recu); // on récupère le message
    afficher_4_octets(data_recu);
    delay(1000);
    Commande(data_recu);
  }
}

void Commande(byte* data_recu){
  byte code[Mirf.payload];
  if(data_recu[1] == 'I'){
    code[0] = 0;
    code[1] = 0;
    code[2] = 0;
    code[3] = 1;
    Mirf.send(code); 
    while(Mirf.isSending());
    Serial.println("Envoie OK");
  }
}

//Fonction affichage de contrôle
void afficher_4_octets(byte data[4])
{
for (int i=0;i<4;i++)
   {Serial.print(data[i]);
   Serial.print(" ");
   }
 }

voilà je comprend pas j'ai essayer de changer les modules de les inverser toujours le même problème, je désespère :confused:

Cordialement

bonjour,
lien des modules et photo montage

si c'est ceux auxquels je pense, tu ne sera pas le seul a avoir des problèmes.

Bonjour,

C'est des modules que tu trouve partout (j'en ai 4)

Mais je pense que j'ai du en griller 2 avec le 5V, et 1 le brûler avec mon fer a souder il chauffe trop.
Mais se que je trouve bizarre c'est que les 2 modules griller eux marche encore mais en transmission pas en réception...

Voilà si qu'un à une autre hypothèse

Essaie de mettre un petit condo de 4,7μF entre le 3,3v et gnd au ras du module

Flamby:
Bonjour,

C'est des modules que tu trouve partout (j'en ai 4)

Mais je pense que j'ai du en griller 2 avec le 5V, et 1 le brûler avec mon fer a souder il chauffe trop.
Mais se que je trouve bizarre c'est que les 2 modules griller eux marche encore mais en transmission pas en réception...

Voilà si qu'un à une autre hypothèse

bonjour
les nrf24 sont assez simples à utiliser
mais tu peux rencontrer ici ou là , des modules "bien foireux" :grin:
comme ce sont des transceivers , il y a "une couche " qui t'echappe" ( le dialogue d'acquittement entre eux)

déjà , à tu validé prealablement à ton projet , les exemples E/R de la lib ?

Oui j'ai essayer l'exemple de la librairie mais c'est le même problème 1 seul module marche en émetteur-récepteur, 2 autre en émetteur et le dernier plus rien mdr (C'est sa la soudure quand on a pas le bon matos ...) :confused:

hello
as tu placé les condos sur leur alim?

Non j'ai pas essayer mais je suppose que aucun module ne marcherai sinon, non?

Flamby:
Non j'ai pas essayer mais je suppose que aucun module ne marcherai sinon, non?

Pas nécessairement, ils seraient plus sensibles en réception qu'en émission

Je part en vacance demain j'essayerai en rentrant. Je pensais que le condo aurait servie plus a l’émission qu'a la réception comme quoi. J'ai pas de 4.7µF sa change rien si je mais un 10µF ou plus ?

Re-bonjour,

Bon de retour de mes vacances j'ai essayer le condo 4.7µF et le nRF24 ne marche toujours pas en réception. :frowning:

Nouveau problème mon module qui marchait bien jusqu'à présent se bloque après avoir reçu 1 trame, je suis obligé de reset l'arduino pour re-recevoir une trame, j'ai rien toucher niveau branchement ni niveau code bizarre bizarre..... Je déprime :cry: mdr

Si quelqu'un à une explication à mes module fou je suis preneur

J'avais grillé un nrf24l01p en oubliant qu'il fonctionnait en 3.3V, peut être c'est la même chose pour toi? :slight_smile:

Si tu veux une bibliothèque plus facile pour faire fonctionner le nrf24l01p, j'en ai fait une, voir un exemple:

#include "../module/Nrf24L01P.h"

int main()
{
	Nrf24L01P variable = Nrf24L01P (1);//variable partagée sur le "réseau" (numéro de la variable)
	
	Nrf24L01P::start (11, 86400312, true);//démarrage du nrf24l01p (pin ss, clé de sécurité, puissance max)
	
	while (true)
	{
		variable.transmit (123);//envoi d'une valeur (123 = valeur à transmettre)
	}
	
	return 0;
}

N'hésites pas si tu veux en savoir plus :slight_smile: