Communication impossible avec modules nrf24l01

Bonjour,

je rencontre des problèmes à faire communiquer 2 modules nrf24l01. Un des module est connecté sur un Arduino Mega (CE pin 7, CSN pin 8, MOSI pin 51, MISO pin 50 et SCK pin 52), le second module est connecté à un Arduino Uno (CE pin 7, CSN pin 8, MOSI pin 12, MISO pin 11 et SCK pin 13). Je n’utilise pour l’instant pas le pin d’interruption du module.

Mon code (très très basique pour l’instant) est le suivant :
côté émetteur :

#include <SPI.h>
#include <nRF24L01.h>
#include <RF24.h>

RF24 radio(7, 8); // CE, CSN

const byte address[6] = "00001";

void setup() {
  Serial.begin(9600);
  radio.begin();
  Serial.print("Radio connected : ");
  Serial.println(radio.isChipConnected() ? "YES" : "NO");
  radio.openWritingPipe(address);
  radio.setPALevel(RF24_PA_MIN);
  radio.stopListening();
}

void loop() {
  const char text[] = "Hello World";
  radio.write(&text, sizeof(text));
  delay(1000);
}

côté récepteur :

#include <SPI.h>
#include <nRF24L01.h>
#include <RF24.h>

RF24 radio(7, 8); // CE, CSN

const byte address[6] = "00001";

void setup() {
  Serial.begin(9600);
  radio.begin();
  Serial.print("Radio connected : ");
  Serial.println(radio.isChipConnected() ? "YES" : "NO");
  radio.openReadingPipe(0, address);
  radio.setPALevel(RF24_PA_MIN);
  radio.startListening();
}

void loop() {
  if (radio.available()) {
    char text[32] = "";
    radio.read(&text, sizeof(text));
    Serial.println("Debut de transmission :");
    Serial.println(text);
  }
}

Les 2 modules me répondent un grand “YES” lorsque je vérifie la connexion avec le module, j’en déduit donc que mon câblage est correct et que la communication SPI avec les modules est ok. Mais ensuite plus rien, le récepteur reste muet. J’avoue ne pas savoir quoi tester de plus puisque le code est loin d’être compliqué… Quelqu’un aurait-il une solution à me proposer ?

D’avance merci ! :slight_smile:

  • essayez plutôt de lire sur le pipe N° 1
  • Assurez vous que l’alimentation est suffisante et conforme
  • essayez avec radio.setPALevel(RF24_PA_LOW);

Ps: J’ai ce petit tuto d’exemple.

J’ai envie de detourner un peu ce sujet:

j’ai lu le petit tuto d’exemple de JML et je l’ai trouvé très bien.

Cependant, il y a quelque chose qui m’a chagriné:

il est impossible de faire une recherche par mots clés dans les tutoriels d’arduino (exemple: nrf24l : google me raménera des tonnes de tutoriels, mais que se passe-t-il si on veut se limiter aux tutoriels de ce forum? est ce que cette impossibilité est liée à une éventuelle insuffisance de moi, ou à une insuffisance de ce forum?)

Pour info, https://www.learnopencv.com/ -un site de tutoriels: il doit y en avoir des dizaines d’autres dans le même cas- a un bouton “Search this website” qui, une fois renseigné, renvoie vers des articles contenant le mot cle voulu-

Edité:
il faut trouver une loupe(? un cercle et un segment de droite) en haut à droite de la page, et taper “nrf24 tutoriel” pour accéder… “search this website” ou son équivalent en français m’a quand même l’air plus clair qu’un symbole graphique…

Merci de votre message. J'ai tenté de passer en

radio.setPALevel(RF24_PA_LOW);

, mais je ne constate aucune amélioration. Concernant l'alimentation, les modules sont alimentés au travers des convertisseurs 3.3V des Arduino, cela ne pose en principe aucun problème.

Il me semble que l'Arduino TX rencontre déjà des problèmes lors de l'envoi. En effet j'ai modifié mon code comme ci-dessous

void loop() {
  const char text[] = "Hello World";
  bool checkMessageSended = radio.write(&text, sizeof(text));
  if (checkMessageSended)
  {
    Serial.println("Message sended");
  } else {
    Serial.println("Message not sended");
  }

Or le booléen checkMessageSended demeure à false.

Je précise encore que j'ai essayé avec différents pipes en prenant évidement attention au faite que le pipe soit toujours identique sur le Tx et sur le Rx. Mais le problème persiste malheureusement...

Vous parlez sur le pipe 0 et écoutez sur le pipe 1 - pas besoin du même numéro - mais il faut la même adresse. Vaut mieux réserver le 0 pour parler et écouter ailleurs (pas gênant dans votre cas)

Pas besoin du & devant text Dans radio.write(&text, sizeof(text))(meme si ce n’est pas un souci)

Le fait qu’il ne soit pas envoyé (“sent” en anglais pas sended :slight_smile: ) est significatif du problème que vous avez

Pour l’alimentation c’est parfois tatillon - ajoutez un Condo de 100nF sur l’alimentation du module ça pourrait être utile

J’ai aussi cet autre tuto plus simple - pouvez vous tester si ce code fonctionne avec votre montage ?

J'ai testé votre tutoriel. J'ai des 2 côtés le message "erreur d'envoi" qui s'affiche en boucle. Il s'agirait donc d'un problème d'alimentation ? Je n'ai pas les condensateurs sous la main mais je vais m'arranger rapidement pour en avoir afin de pouvoir tester.

Je vais également essayer de les alimenter directement par un générateur de tension sans passer par le régulateur de l'Arduino. Si vous avez une autre idée d'ici là n'hésitez pas... :frowning:

Oui a tester

Concernant l'alimentation, les modules sont alimentés au travers des convertisseurs 3.3V des Arduino, cela ne pose en principe aucun problème.

Je confirme. Normalement ça marche.
J'alimente aussi mes cartes PRO MINI + NRF24L01 avec un LM2936 (3.3V 50mA seulement).

Par contre j'ai déjà été confronté a des problèmes de communication NANO / MRF24L01, problèmes qui étaient liés à la valeur de la tension 5V de la NANO.
Avec un adaptateur USB en particulier, cela refusait de fonctionner. Tension 5V trop élevée.

Malgré l'utilisation d'un générateur de tension, je n'arrive toujours pas à envoyer de message avec les modules (le message "erreur d'envoi" s'envoie en boucle). Je ne sais plus quoi essayer d'autres...
Quelqu'un aurait-il une idée miraculeuse ?

dbrion06:
il est impossible de faire une recherche par mots clés dans les tutoriels d'arduino (exemple: nrf24l : google me raménera des tonnes de tutoriels, mais que se passe-t-il si on veut se limiter aux tutoriels de ce forum? est ce que cette impossibilité est liée à une éventuelle insuffisance de moi, ou à une insuffisance de ce forum?)

bien que ce soit hors sujet, si vous voulez faire une recherche par mot clé sur un site particulier, vous pouvez taper cela dans une recherche google

NRF24 Tuto site:arduino.cc

en précisant le site vous forcez le moteur de recherche à chercher "NRF24 Tuto" mais ne retourner que les hits dans le domaine "arduino.cc"

AlexRey:
Malgré l'utilisation d'un générateur de tension, je n'arrive toujours pas à envoyer de message avec les modules (le message "erreur d'envoi" s'envoie en boucle). Je ne sais plus quoi essayer d'autres...
Quelqu'un aurait-il une idée miraculeuse ?

vous avez bien vérifier les fils (c'est fragile ces petites bêtes) ?

ce sont de nrf24l01 ou des nrf24l01+ ?

Oui le câblage est correct est semble fonctionner, comme déjà précisé la méthode radio.isChipConnected me retourne true, j’en déduit donc que la communication SPI est fonctionnel et donc que je câblage est ok.

Je vais peut être essayer de me passer de la bibliothèque RF24 et d’envoyer les commandes SPI une à une pour voir où ça bloque mais ça va me prendre du temps...

RF24 fonctionne - ça doit être autre chose

Vous avez de modules “+” ou des “de base”?

Il s'agit des modules "+" mais commandé sur Banggood...

Autre fait étonnant, un de mes module envoie à présent en permanence
---------------------------
J'ai recu ""
timing = 0
mais ceci de manière occasionnelle. Pour obtenir ce même comportement sur l'autre module il me suffit de couper l'alimentation VCC du module. Autre fait intéressant, la consommation du module qui envoie ce message en permanence est quasi nul, là ou l'autre module consomme environ 20 mA en permanence. Aurais-je donc simplement un des module qui serait mort ?

Mais l'autre module qui fonctionne devrait dans ce cas être fonctionnel malgré tout et devrait pouvoir envoyer ses messages on est d'accord ? Il ne va évidemment rien recevoir mais ne devrait pas m'envoyer "erreur d'envoi" en permanence ?

s'il est configuré pour attendre un ACK de la part de son interlocuteur, alors il peut vous dire que l'envoi n'a pas fonctionné

oui c'est possible que vous ayez un module grillé...

Après avoir recommandé 2 nouveaux modules, j'obtiens toujours la même erreur d'envoi. Impossible de déterminer d'où ça peut provenir... j'ai pourtant essayé de les alimenter directement depuis une alimention de laboratoire 3.3V en mettant des condensateurs de découplage de 1000uF (visiblement quelqu'un avait le même soucis que moi et il a pu le résoudre en mettant des condensateurs de porc :stuck_out_tongue: )

Malheureusement toujours impossible d'avoir ne serait qu'un seul message qui s'envoie :cry:

Je tente une dernière fois un appel à l'aide mais si je ne trouve pas de solution je crois que je vais vraiment abandonner cette solution de transmission sans fil.

Pour les désespérés:

transmitter

receiver

No condo, no biblio, no problémo.

vidéo

Tu m’as presque donné espoir l’espace d’un instant mais hélas toujours rien :stuck_out_tongue:

Le récepteur reste désespérément muet (“Waiting for data…”) mais à mon avis c’est du côté de l’émetteur que ça cloche et qu’il n’envoie même pas les données.

Pour info, j’ai vérifier/modifier le pinning pour que ça corresponde au code fourni et rajouté l’interruption avec la Pull-up sur l’IRQ du nrf24l01

Franchement la dernière chose que j’ai pas encore testé, c’est de changer d’Arduino tout court mais la comm SPI à l’air de se faire nickel donc je vois pas ce qui pourrait poser problème.

A l'époque où j'ai écrit ces programmes, je n'avais que des Pro Mini 5V 16MHz.

C'est pour ça que j'ai insisté sur le "3.3V THREE POINT THREE !!!.!!!".

Le 5V Pro Mini était alimenté aussi en 3,3V à travers une carte FTDI avec son cavalier sur 3,3V. C'est plus simple que d'adapter la tension, surtout pour les 5V Picaxes.

Pour CE et CSN on prend les pattes que l'on veut. Pour SCK, MOSI et MISO il faut prendre les pattes qui correspondent sur votre Arduino. Je ne connais pas les Mega.

Si ça marche pas, quelque chose est mal branché ou mort.