Transmetteur Arduino nRF24L01

Bonjour,

Je suis nouveau sur ce forum, si mon message ne respecte pas la charte ou si j’ai oublié un élément, dites le moi !

Sinon pour revenir sur le sujet, j’ai un problème sur lequel je bloque depuis quelques jours. J’aimerais pouvoir transmettre des données à l’aide de module nRF24L01, mais ça ne fonctionne tout simplement pas.

Voici mon code pour l’envoie des données:

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

RF24 radio(9, 10);
const byte address[6] = "00001";
bool ledHigh = false;

void setup() {
   //Initialize LED
   pinMode(LED_BUILTIN, OUTPUT);
   digitalWrite(LED_BUILTIN, HIGH);
 
   //Initialize radio
   radio.begin(); // <-- C'EST ICI QUE CA PLANTE
   radio.openWritingPipe(address);
   radio.setPALevel(RF24_PA_MIN);
   radio.stopListening();
}
 
void loop() {
   const char text[] = "off";
   if(ledHigh){
     const char text[] = "on";
   }

   ledHigh = !ledHigh;    
   if(ledHigh) digitalWrite(LED_BUILTIN, HIGH);
   else digitalWrite(LED_BUILTIN, LOW);
   
   //radio.write(&text, sizeof(text));
}

Et mon code pour la réception des données (deuxième carte):

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

RF24 radio(9, 10);
const byte address[6] = "00001";
bool ledHigh = false;

void setup() {
   //Initialize LED
   pinMode(LED_BUILTIN, OUTPUT);
   digitalWrite(LED_BUILTIN, HIGH);

   //Initialize radio
   radio.begin(); // <-- C'EST ICI QUE CA PLANTE
   radio.openReadingPipe(0, address);
   radio.setPALevel(RF24_PA_MIN);
   radio.startListening();
}

void loop() {
   if(radio.available()){
     char text[32] = "";
     radio.read(&text, sizeof(text));
 
     if(text == "on"){
       digitalWrite(LED_BUILTIN, HIGH);
     }else{
       digitalWrite(LED_BUILTIN, LOW);
     }
   }
}

Le code plante au niveau du radio.begin(); (j’ai essayé de supprimer tout le reste en lien avec la radio, et les LED ne clignotais pas du moment que radio.begin() était présent.

Mes branchements semble bon. Je me suis basé sur le tutoriel suivant: https://howtomechatronics.com/tutorials/arduino/arduino-wireless-communication-nrf24l01-tutorial/

Et j’ai aussi essayé la bibliothèque Mirf, mais ça ne fonctionnais pas non plus.

Je vous remercie.

Salut

si j'ai oublié un élément, dites le moi

Oui :

  • type d'ARDUINO utilisé
  • alimentation du NRF24L01
  • schéma de branchement

Quel est le but du projet dans son ensemble ?
Y a t-il un serveur, un RASPBERRY PI par exemple ?

@+

Ah oui, alors pour le type de l'arduino il s'agit d'une carte UNO. Le nRF24L01 est alimenté par la broche 3.3V de la carte.

Pour le schéma de branchement, je me suis aidé du tutoriel cité précédemment:

Il y a juste les PINs suivant que j'ai changé:

  • CE: 9
  • CSN: 10

Et voici le montage réel:

Et non, il n'y a pas de Raspberry et pour le projet, c'est pour transmettre des données sans fil entre deux carte arduino (pour un projet de quadcopter).

Pourquoi la ligne suivante est-elle en commentaires ?

   //radio.write(&text, sizeof(text));

hbachetti:
Pourquoi la ligne suivante est-elle en commentaires ?

   //radio.write(&text, sizeof(text));

Ah ça c'était pour tester, mais le problème n'est pas vraiment la. Comme je l'ai dit rien ne se poursuit après la ligne radio.begin();

Je serais à ta place je repartirais d'un exemple des exemples de la librairie RF24.
Je l'ai ai déjà essayé avec succès.
Maintenant je travaille avec MYSENSORS qui me libère de toute cette soupe de communication bas-niveau. Mais ce n'est pas le même sujet. Domotique, RASPBERRY PI, etc.

@+

Merci, j'ai effectivement essayé les exemples officiel de la bibliothèque, mais le résultat est le même...

Il ne reste plus que le câblage.
Personnellement j'utilise plutôt CE et CS sur D7 D8, comme ICI, mais c'est un choix personnel.

Tu peux avoir éventuellement un problème de niveau de tension sur le SPI. NRF24L01 en 3.3V et UNO en 5V ne se comprennent pas toujours. J'ai déjà eu des problèmes avec une NANO alimentée avec un chargeur USB en 5.5V.

@+

L'Arduino est soit alimenté par USB soit par pile 9V. J'ai testé le 3.3V de ma carte et je suis au environ de 3.2V.

Comment puis-je tester mes nRF24L01 ?

WinXaito:
Comment puis-je tester mes nRF24L01 ?

Peut-être avec ça:

La bibliothèque nrf24 me donne des boutons.

Pourquoi ce changement de broches (9 & 10 au lieu de 7 & 8 ) ?

J’ai trouvé ce site : est-ce celui que tu as utilisé comme exemple ? Si oui, il utilise une bibliothèque différente : Library: TMRh20/RF24, https://github.com/tmrh20/RF24/Est-ce bien celle que tu utilises ?

Il existe plusieurs biblis qui portent le nom RF24 : peut-être que le compilateur ne prend pas la bonne si tu en as plusieurs sur ton PC ?

Hello,

J'ai réussi à bien avancé aujourd'hui. Premièrement en revérifiant le câblage, je me suis rendu compte que j'avais inversé les pins MISO et MOSI (My bad ...).

Après ce problème franchi, le programme allait plus loin et bloquait sur la fonction radio.write(&text, sizeof(text));, et après avoir revérifier, je me suis rendu compte que les impressions sur le module n'était pas bon (la broche MOSI était inversé avec la broche IRQ...).

Du coup maintenant ça fonctionne, enfin presque. Le signal semble envoyé, mais fini toujours en échec avec un timeout et l'autre carte ne reçois rien. (J'ai uploadé les code d’exemples fourni par la bibliothèque RF24, celui-ci pour être exact: RF24 - GettingStarted. (Avec la bonne bibliothèque qui va avec, sans oublié de modifier le numéro de la carte 0 et 1.

je me suis rendu compte que les impressions sur le module

Je n'ai jamais eu entre les mains de NRF24L01 sérigraphié. C'est peut-être pour cela que je ne me trompe pas.
Oui je vois maintenant sur la photo, un modèle avec antenne.

@+

Bonjour, Je me permet de faire un petit UP, car ça ne fonctionne toujours pas.

Merci

Relis le #7. Tu as peut-être un problème de niveau de tension.

Comme dit j'ai mesurée une tension de 3.2V, et j'ai ajouté un condensateur de 100uf.

Que puis-je faire d'autre au niveau de la tension ?
Merci

Lorsque l'émetteur envoie son ping, il affiche simplement "failed" si l'émission échoue.
Si le récepteur ne répond pas il affiche "Failed, response timed out.".
Je pense que tu as vérifié ce point sur le moniteur série.
Si l'émission se passe bien, cela veut dire que d'un point de vue niveau de tension sur le SPI, c'est OK côté émetteur.

Ensuite, as-tu essayé d'intervertir émetteur et récepteur ?

@+

Bonjour.

Le 3.3 V fourni pat une Mega2560 est de mauvaise qualité et ne convient pas aux NRF24L01. J'ai perdu de nombreuses journées avant de le comprendre.

http://colmard.com/Arduino-lecon12.html

hbachetti:
Lorsque l'émetteur envoie son ping, il affiche simplement "failed" si l'émission échoue.
Si le récepteur ne répond pas il affiche "Failed, response timed out.".
Je pense que tu as vérifié ce point sur le moniteur série.
Si l'émission se passe bien, cela veut dire que d'un point de vue niveau de tension sur le SPI, c'est OK côté émetteur.

Ensuite, as-tu essayé d'intervertir émetteur et récepteur ?

@+

Hello, donc j'ai bien un failed et un failed timeout qui s affiche. Donc visiblement l'émission ne fonctionne pas.
J'ai également interverti émetteur et récepteur, le résultat est identique.

micol:
Bonjour.

Le 3.3 V fourni pat une Mega2560 est de mauvaise qualité et ne convient pas aux NRF24L01. J'ai perdu de nombreuses journées avant de le comprendre.

ARDUINO Leçon 12

J'ai une Arduino UNO (chinoise). Donc d'après ton lien ça devrait être OK. Sinon comment puis-je faire pour réguler au mieux la tension 3.3v ? (Avec un pont diviseur depuis le 5V ?)

micol:
Le 3.3 V fourni pat une Mega2560 est de mauvaise qualité et ne convient pas aux NRF24L01. J'ai perdu de nombreuses journées avant de le comprendre.

Cela m'intéresse.
Tu peux en dire plus ?
Elle ne fournit pas assez de jus ?

Avec un pont diviseur depuis le 5V ?

Certainement pas un pont diviseur.

Je pense que ta UNO chinoise a un chip convertisseur USB du type CH340. A vérifier, le chip à côté du connecteur USB.
Le CH340 ne pourra pas alimenter 2 NRF24L01.

Il te faut régulateur 3.3V, obligatoirement LDO.
Pour prendre un exemple courant un LF33CV.
Cherche un régulateur avec un low "DropOut Voltage".
Tu pourra alimenter tes 2 NRF24L01 avec.
Surtout pas un LM7833 qui va te bouffer 2V sur ton 5V et te fournira seulement 3V.

@+