Outils pour utilisateurs

Outils du site


start:arduino:nrf24l01

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentesRévision précédente
Prochaine révision
Révision précédente
start:arduino:nrf24l01 [2022/05/20 10:59] – [Utilisation du module nRF24L01+ avec un ESP32] gerardadminstart:arduino:nrf24l01 [2023/01/27 16:08] (Version actuelle) – modification externe 127.0.0.1
Ligne 3: Ligne 3:
 {{ :start:arduino:nrf24l01-pinout-558314284.jpeg?direct&400 |}} {{ :start:arduino:nrf24l01-pinout-558314284.jpeg?direct&400 |}}
  
-{{ :start:arduino:nrf24l012.jpg?direct&400 |}} 
  
 {{ :start:arduino:nrf24l01.jpg?direct&400 |}} {{ :start:arduino:nrf24l01.jpg?direct&400 |}}
Ligne 17: Ligne 16:
 {{ :start:arduino:nrf24l01_prelim_prod_spec_1_2.pdf |}} {{ :start:arduino:nrf24l01_prelim_prod_spec_1_2.pdf |}}
  
 +[[https://nrf24.github.io/RF24/classRF24.html|Explications Librairie NF24 EN]]
 === Utilisation du module nRF24L01+ avec l’Arduino === === Utilisation du module nRF24L01+ avec l’Arduino ===
  
Ligne 22: Ligne 22:
  
 [[http://tiptopboards.free.fr/arduino_forum/viewtopic.php?f=2&t=22|NRF24L01 et Arduino -2-]] [[http://tiptopboards.free.fr/arduino_forum/viewtopic.php?f=2&t=22|NRF24L01 et Arduino -2-]]
 +
 +
 +[[https://passionelectronique.fr/tutorial-nrf24l01/|NRF24L01 et Arduino -3-]]
 +
 +[[https://retroetgeek.com/arduino/comment-utiliser-les-modules-nrf24l01-en-communication-bidirectionnelle/|NRF24L01 et Arduino -4-]]
 +
 +[[https://cpp.hotexamples.com/fr/examples/-/RF24/setAutoAck/cpp-rf24-setautoack-method-examples.html|Acquitement NRF24L01 ]]
 +
 +[[start:arduino:nrf24L01:Probleme courant NRF24L01|]]
 +
 +[[https://cpp.hotexamples.com/fr/examples/-/RF24/setAutoAck/cpp-rf24-setautoack-method-examples.html|C++ (Cpp) RF24::setAutoAck Exemples]]
  
  
Ligne 27: Ligne 38:
 === Utilisation du module nRF24L01+ avec un ESP32 === === Utilisation du module nRF24L01+ avec un ESP32 ===
  
-{{ :start:arduino:circuit_esp32_nrf24l01.png?direct&400 |}}+[[https://electroniqueamateur.blogspot.com/2019/12/communication-nrf24l01-avec-cartes.html|{{ :start:arduino:circuit_esp32_nrf24l01.png?direct&400 |}}]] 
 + 
 +Branchement  du module nRF24L01 à la carte ESP32 : 
 + 
 +    *GND du nRF24L01 - GND de l'ESP32 
 +    *VCC du nRF24L01 - 3V3 de l'ESP32 
 +    *CE du nRF24L01 - D4 de l'ESP32 
 +    *CSN du nRF24L01 - D5 de l'ESP32 
 +    *SCK du nRF24L01 - D18 de l'ESP32 
 +    *MOSI du nRF24L01 - D23 de l'ESP32 
 +    *MISO du nRF24L01 - D19 de l'ESP32 
 +    *IRQ du nRF24L01 - Pas branché 
 + 
 + 
 + 
 + 
 +== Programmes Exemple == 
 + 
 +<code c Esp32_NRF24L01_Emmission_001.ino> 
 +/******************************************************************* 
 + Chaque seconde, un nombre est émis par un module nRF24L01 
 + branché à une carte ESP32 ou ESP8266. 
 + 
 +********************************************************************/ 
 + 
 +#include <SPI.h> 
 +#include "nRF24L01.h" 
 +#include "RF24.h" 
 + 
 +int compteur = 0; 
 + 
 +RF24 radio(4, 5);  
 +const uint64_t addresse = 0x1111111111; 
 +const int taille = 32; 
 +char message[taille + 1]; 
 + 
 +void setup(void) 
 +
 +  Serial.begin(115200); 
 +  Serial.println("Emetteur de donnees"); 
 +  radio.begin(); 
 +  radio.openWritingPipe(addresse); 
 +
 + 
 +void loop(void) 
 +
 +  compteur++; 
 +  itoa(compteur, message, 10); 
 +  Serial.print("J'envoie maintenant "); // pour débogage 
 +  Serial.println(message); 
 + 
 +  radio.write( message, taille ); // émission du message via nRF24L01 
 + 
 +  delay(1000); 
 + 
 +
 +</code> 
 + 
 + 
 +<code c Esp32_NRF24L01_Reception001.ino> 
 +/*********************************************************** 
 +  
 +Sketch permettant à un ESP32 ou un ESP8266 de recevoir des messages 
 +en provenance d'un autre microcontrôleur par l'entremise d'un 
 +module nRF24L01. 
 +Les messages reçus sont affichés dans le moniteur série. 
 + 
 +*************************************************************/ 
 + 
 +#include <SPI.h> 
 +#include "nRF24L01.h" 
 +#include "RF24.h" 
 + 
 +RF24 radio(4, 5);  
 + 
 +const uint64_t adresse = 0x1111111111; 
 +const int taille = 32; 
 +char message[taille + 1];  
 + 
 +void setup(void) 
 +
 +  Serial.begin(115200); 
 +  Serial.println("Recepteur RF24"); 
 +  radio.begin(); 
 +  radio.openReadingPipe(1, adresse); 
 +  radio.startListening(); 
 +
 + 
 +void loop(void) 
 +
 +  while ( radio.available() ) 
 +  { 
 +    radio.read( message, taille ); 
 +    Serial.print("Message recu : "); 
 +    Serial.println(message); 
 +  } 
 +
 +</code> 
 +===== Maquette  de test ===== 
 +<code c ESP32_BP_NRF24L01_Emission002_GL.ino> 
 +#include <DFRobot_MCP23017.h> 
 + 
 +#include <SPI.h> 
 +#include "nRF24L01.h" 
 +#include "RF24.h" 
 + 
 +//definition tunnel communication 
 +#define tunnel1 "PIPE1" 
 +#define tunnel2 "PIPE2" 
 +#define tunnel3 "PIPE3" 
 +#define tunnel4 "PIPE4" 
 +#define tunnel5 "PIPE5" 
 +#define tunnel6 "PIPE6" 
 + 
 + 
 + 
 + 
 +DFRobot_MCP23017 mcp(Wire, /*addr =*/0x27);//constructor, change the Level of A2, A1, A0 via DIP switch to revise the I2C address within 0x20~0x27. 
 +#define Led0 mcp.eGPB0 
 +#define Led1 mcp.eGPB1 
 +#define Bp0 mcp.eGPA0 
 +#define Bp1 mcp.eGPA1 
 + 
 +int MemLed0 =0; 
 +int MemBp0 =0; 
 +int tempo0 =50; 
 + 
 +int MemLed1 =0; 
 +int MemBp1 =0; 
 +int tempo1 =50; 
 + 
 +int compteur = 0; 
 + 
 +RF24 radio(4, 5);  
 +const byte adresses[][6] = {tunnel1, tunnel2, tunnel3, tunnel4, tunnel5, tunnel6}; 
 +const int taille = 32; 
 +char message[taille + 1]; 
 +char messageACK[taille +1]; 
 + 
 + 
 + 
 +void DebugVar(int nb, int valBP0) { 
 +  Serial.print("temps = ");Serial.println(nb);  
 +  Serial.print("Bp0 =");Serial.println(digitalRead(mcp.eGPA0)); 
 +  Serial.print("ValeurBp0 =");Serial.println(digitalRead(valBP0));   
 +  Serial.print("MemBp0 =");Serial.println(MemBp0); 
 +  Serial.print("MemLed0 =");Serial.println(MemLed0); 
 +  delay(250); 
 +}   
 +int LectBp0() { 
 +// Bouton O -- Led0 
 + 
 +  int valeurBp0 = mcp.digitalRead(mcp.eGPA0); 
 +    
 +   
 +//Temps 0   
 +  if(valeurBp0== 0 && MemBp0 == 0 && MemLed0 == 0){ 
 +     mcp.digitalWrite(mcp.eGPB0, LOW); MemBp0 = 0; MemLed0 =0; 
 +     //delay(tempo0);DebugVar(0,valeurBp0);      
 +  } 
 +  //Temps 
 +  if (valeurBp0 == 1 && MemBp0 ==0 && MemLed0 == 0) { 
 +      mcp.digitalWrite(mcp.eGPB0, HIGH);MemBp0 =1;MemLed0 = 1;   
 +      //delay(tempo0);DebugVar(1,valeurBp0);    
 +  }    
 +  //Temps 2 
 +  if (valeurBp0 == 0 && MemBp0 ==1 && MemLed0 == 1) { 
 +      mcp.digitalWrite(mcp.eGPB0, HIGH);MemBp0 =0;MemLed0 = 1;   
 +      //delay(tempo0);DebugVar(2,valeurBp0); 
 +  } 
 +  //Temps 3 
 +  if (valeurBp0 == 1 && MemBp0 ==0 && MemLed0 == 1) { 
 +      mcp.digitalWrite(mcp.eGPB0, LOW);MemBp0 =1;MemLed0 = 0;   
 +      //delay(tempo0);DebugVar(3,valeurBp0); 
 +  } 
 +  //Temps 4 
 +  if (valeurBp0 == 0 && MemBp0 ==1 && MemLed0 == 0) { 
 +      mcp.digitalWrite(mcp.eGPB0, LOW);MemBp0 =0;MemLed0 = 0;   
 +      //delay(tempo0);DebugVar(4,valeurBp0); 
 +  } 
 +  delay(20); 
 +  return(!valeurBp0); 
 +   
 +
 + 
 +int LectBp1(){ 
 +// Bouton 1 -- Led1 
 + 
 +  uint8_t valeurBp1 = mcp.digitalRead(mcp.eGPA1); 
 +     
 +   
 +//Temps 0   
 +  if(valeurBp1== 0 && MemBp1 == 0 && MemLed1 == 0){ 
 +     mcp.digitalWrite(mcp.eGPB1, LOW); MemBp1 = 0; MemLed1 =0; 
 +     //delay(tempo0);DebugVar(0,valeurBp0);      
 +  } 
 +  //Temps 
 +  if (valeurBp1 == 1 && MemBp1 ==0 && MemLed1 == 0) { 
 +      mcp.digitalWrite(mcp.eGPB1, HIGH);MemBp1 =1;MemLed1 = 1;   
 +      //delay(tempo0);DebugVar(1,valeurBp0);    
 +  }    
 +  //Temps 2 
 +  if (valeurBp1 == 0 && MemBp1 ==1 && MemLed1 == 1) { 
 +      mcp.digitalWrite(mcp.eGPB1, HIGH);MemBp1 =0;MemLed1 = 1;   
 +      //delay(tempo0);DebugVar(2,valeurBp0); 
 +  } 
 +  //Temps 3 
 +  if (valeurBp1 == 1 && MemBp1 ==0 && MemLed1 == 1) { 
 +      mcp.digitalWrite(mcp.eGPB1, LOW);MemBp1 =1;MemLed1 = 0;   
 +      //delay(tempo0);DebugVar(3,valeurBp0); 
 +  } 
 +  //Temps 4 
 +  if (valeurBp1 == 0 && MemBp1 ==1 && MemLed1 == 0) { 
 +      mcp.digitalWrite(mcp.eGPB1, LOW);MemBp1 =0;MemLed1 = 0;   
 +      //delay(tempo0);DebugVar(4,valeurBp0); 
 +  } 
 +  return(valeurBp1); 
 +
 + 
 +void setup() { 
 +  Serial.begin(115200); 
 + 
 +   
 +  Serial.println("Emetteur de donnees"); 
 +  radio.begin(); 
 +  radio.setChannel(125); 
 +  radio.setPALevel(RF24_PA_MIN); 
 +  radio.setDataRate(RF24_250KBPS); 
 +  radio.openWritingPipe(adresses[0]); 
 +   //pour recevoir 
 +  radio.openReadingPipe(1, adresses[1]);//ouverture tunnel2 en LECTURE (reception Radio) 
 +  radio.openReadingPipe(2, adresses[2]);//ouverture tunnel3 en LECTURE (reception Radio) 
 +  radio.openReadingPipe(3, adresses[3]);//ouverture tunnel4 en LECTURE (reception Radio) 
 +  radio.openReadingPipe(4, adresses[4]);//ouverture tunnel5 en LECTURE (reception Radio) 
 +  radio.openReadingPipe(5, adresses[5]);//ouverture tunnel6 en LECTURE (reception Radio) 
 + 
 +   
 + 
 +   
 +   
 +   
 +  while(mcp.begin() != 0){ 
 +    Serial.println("Initialization of the chip failed, please confirm that the chip connection is correct!"); 
 +    delay(1000); 
 +  } 
 +   
 +  mcp.pinMode(Bp0, INPUT); 
 +  mcp.pinMode(Bp1, INPUT); 
 +  mcp.pinMode(mcp.eGPB0,OUTPUT); 
 +  mcp.pinMode(Led0,OUTPUT); 
 +  mcp.digitalWrite(mcp.eGPB0, LOW); 
 +  mcp.digitalWrite(Led1, LOW);   
 +   
 +
 + 
 +void loop() { 
 + 
 + 
 +//Lecture Boutons poussoir   
 +LectBp0();   
 +//LectBp1(); 
 +//Serial.println(LectBp0()); 
 + 
 + 
 +compteur  = LectBp0(); 
 +//Serial.println(compteur); 
 +//delay(200); 
 +// envoie message 
 +if (compteur == 1 ){  
 +  radio.stopListening(); 
 +  itoa(compteur, message, 10); 
 +  Serial.print("J'envoie maintenant "); // pour débogage 
 +  Serial.println(message);//Serial.print(" ");Serial.println(LectBp0()); 
 +  radio.write( message, taille ); // émission du message via nRF24L01 
 +  delay(200); 
 +  compteur = 0; 
 +
 + 
 +radio.startListening(); 
 +if(radio.available()){ 
 +   
 +  while ( radio.available() ) 
 +    { 
 +      radio.read( messageACK, taille ); 
 +      Serial.print("MessageACK  recu : "); 
 +      Serial.println(messageACK); 
 +    } 
 +    delay(20); 
 + } 
 + delay(5); 
 +  
 + 
 +
 +</code> 
 + 
 +<code c ESP32_BP_NRF24L01_Reception002_GL.ino> 
 +#include <DFRobot_MCP23017.h> 
 + 
 +#include <SPI.h> 
 +#include "nRF24L01.h" 
 +#include "RF24.h" 
 + 
 + 
 + 
 +DFRobot_MCP23017 mcp(Wire, /*addr =*/0x27);//constructor, change the Level of A2, A1, A0 via DIP switch to revise the I2C address within 0x20~0x27. 
 +#define Led0 mcp.eGPB0 
 +#define Led1 mcp.eGPB1 
 +#define Bp0 mcp.eGPA0 
 +#define Bp1 mcp.eGPA1 
 + 
 +int MemLed0 =0; 
 +int MemBp0 =0; 
 +int tempo0 =50; 
 +int MMentier = 0; 
 + 
 +int MemLed1 =0; 
 +int MemBp1 =0; 
 +int tempo1 =50; 
 + 
 +int compteur = 0; 
 + 
 + 
 +//definition tunnel de communication 
 +#define tunnel1 "PIPE2"      
 +#define tunnel2 "PIPE1"  
 +#define tunnel3 "PIPE3"      
 +#define tunnel4 "PIPE4" 
 +#define tunnel5 "PIPE5"      
 +#define tunnel6 "PIPE6"  
 + 
 +RF24 radio(4, 5); 
 +const byte adresses[][6] = {tunnel1, tunnel2, tunnel3, tunnel4, tunnel5, tunnel6};  
 +const int taille = 32; 
 +char message[taille + 1]; 
 +char messageACK[taille +1]; 
 + 
 + 
 + 
 +  
 +int LectBp0(int ValMessage) { 
 +// Bouton O -- Led0 
 + 
 +  //int valeurBp0 = mcp.digitalRead(mcp.eGPA0); 
 +  int valeurBp0 = ValMessage; 
 +    
 +   
 +//Temps 0   
 +  if(valeurBp0== 0 && MemBp0 == 0 && MemLed0 == 0){ 
 +     mcp.digitalWrite(mcp.eGPB0, LOW); MemBp0 = 0; MemLed0 =0; 
 +     //delay(tempo0);DebugVar(0,valeurBp0);      
 +  } 
 +  //Temps 
 +  if (valeurBp0 == 1 && MemBp0 ==0 && MemLed0 == 0) { 
 +      mcp.digitalWrite(mcp.eGPB0, HIGH);MemBp0 =1;MemLed0 = 1;   
 +      //delay(tempo0);DebugVar(1,valeurBp0);    
 +  }    
 +  //Temps 2 
 +  if (valeurBp0 == 0 && MemBp0 ==1 && MemLed0 == 1) { 
 +      mcp.digitalWrite(mcp.eGPB0, HIGH);MemBp0 =0;MemLed0 = 1;   
 +      //delay(tempo0);DebugVar(2,valeurBp0); 
 +  } 
 +  //Temps 3 
 +  if (valeurBp0 == 1 && MemBp0 ==0 && MemLed0 == 1) { 
 +      mcp.digitalWrite(mcp.eGPB0, LOW);MemBp0 =1;MemLed0 = 0;   
 +      //delay(tempo0);DebugVar(3,valeurBp0); 
 +  } 
 +  //Temps 4 
 +  if (valeurBp0 == 0 && MemBp0 ==1 && MemLed0 == 0) { 
 +      mcp.digitalWrite(mcp.eGPB0, LOW);MemBp0 =0;MemLed0 = 0;   
 +      //delay(tempo0);DebugVar(4,valeurBp0); 
 +  } 
 + 
 +  return(valeurBp0); 
 +   
 +
 + 
 +int LectBp1(){ 
 +// Bouton 1 -- Led1 
 + 
 +  uint8_t valeurBp1 = mcp.digitalRead(mcp.eGPA1); 
 +  //uint8_t valeurBp1 =  );   
 +   
 +//Temps 0   
 +  if(valeurBp1== 0 && MemBp1 == 0 && MemLed1 == 0){ 
 +     mcp.digitalWrite(mcp.eGPB1, LOW); MemBp1 = 0; MemLed1 =0; 
 +     //delay(tempo0);DebugVar(0,valeurBp0);      
 +  } 
 +  //Temps 
 +  if (valeurBp1 == 1 && MemBp1 ==0 && MemLed1 == 0) { 
 +      mcp.digitalWrite(mcp.eGPB1, HIGH);MemBp1 =1;MemLed1 = 1;   
 +      //delay(tempo0);DebugVar(1,valeurBp0);    
 +  }    
 +  //Temps 2 
 +  if (valeurBp1 == 0 && MemBp1 ==1 && MemLed1 == 1) { 
 +      mcp.digitalWrite(mcp.eGPB1, HIGH);MemBp1 =0;MemLed1 = 1;   
 +      //delay(tempo0);DebugVar(2,valeurBp0); 
 +  } 
 +  //Temps 3 
 +  if (valeurBp1 == 1 && MemBp1 ==0 && MemLed1 == 1) { 
 +      mcp.digitalWrite(mcp.eGPB1, LOW);MemBp1 =1;MemLed1 = 0;   
 +      //delay(tempo0);DebugVar(3,valeurBp0); 
 +  } 
 +  //Temps 4 
 +  if (valeurBp1 == 0 && MemBp1 ==1 && MemLed1 == 0) { 
 +      mcp.digitalWrite(mcp.eGPB1, LOW);MemBp1 =0;MemLed1 = 0;   
 +      //delay(tempo0);DebugVar(4,valeurBp0); 
 +  } 
 +  return(valeurBp1); 
 +
 + 
 + 
 +void envoiemessage1(){ 
 +   radio.stopListening(); 
 +   itoa(255,messageACK, 10); 
 +   radio.write(messageACK, taille); 
 +   Serial.print("messageACK1 = ");Serial.println(messageACK); 
 +   delay(20); 
 +   radio.startListening(); 
 +
 + 
 +void envoiemessage2(){ 
 +   radio.stopListening(); 
 +   itoa(128,messageACK, 10); 
 +   radio.write(messageACK, taille); 
 +   Serial.print("messageACK2 = ");Serial.println(messageACK); 
 +   delay(20); 
 +   radio.startListening(); 
 +
 + 
 + 
 +    
 +void setup() { 
 +  Serial.begin(115200); 
 + 
 +   
 +  Serial.println("Recepteur RF24"); 
 +  radio.begin(); 
 +  radio.setChannel(125); 
 +  radio.setPALevel(RF24_PA_MIN); 
 +  radio.setDataRate(RF24_250KBPS); 
 +  radio.openWritingPipe(adresses[0]); // Ouverture tunnel1 en ECRITURE 
 +  radio.openReadingPipe(1, adresses[1]); // Ouverture tunnel2 en LECTURE 
 +  radio.openReadingPipe(2, adresses[2]); // Ouverture tunnel3 en LECTURE 
 +  radio.openReadingPipe(3, adresses[3]); // Ouverture tunnel4 en LECTURE 
 +  radio.openReadingPipe(4, adresses[4]); // Ouverture tunnel5 en LECTURE 
 +  radio.openReadingPipe(5, adresses[5]); // Ouverture tunnel6 en LECTURE 
 +   
 +   
 +   
 +   
 +   
 +  while(mcp.begin() != 0){ 
 +    Serial.println("Initialization of the chip failed, please confirm that the chip connection is correct!"); 
 +    delay(1000); 
 +  } 
 +   
 +  mcp.pinMode(Bp0, INPUT); 
 +  mcp.pinMode(Bp1, INPUT); 
 +  mcp.pinMode(mcp.eGPB0,OUTPUT); 
 +  mcp.pinMode(Led0,OUTPUT); 
 +  mcp.digitalWrite(mcp.eGPB0, LOW); 
 +  mcp.digitalWrite(Led1, LOW);   
 +   
 +
 + 
 +void loop() { 
 + 
 + 
 + 
 + 
 +   
 +//Reception Message 
 +radio.startListening(); 
 +if (radio.available()){ 
 +while ( radio.available() ) 
 +  { 
 +    radio.read( message, taille ); 
 +    Serial.print("Message recu : "); 
 +    Serial.println(message); 
 +  } 
 +  delay(20); 
 +
 +delay(5); 
 +  
 +int Mentier = atoi(message);  
 + 
 +if ( Mentier == 0 && MMentier == 0 ) { 
 +   
 +   message[0] = '\0';  Mentier = 0; 
 +   mcp.digitalWrite(mcp.eGPB0, LOW); 
 +   delay(500); 
 +
 +if ( Mentier == 1 && MMentier == 0 ) { 
 +   
 +   message[0] = '\0';  Mentier = 0; 
 +   mcp.digitalWrite(mcp.eGPB0, HIGH); 
 +   MMentier = 1; 
 +   envoiemessage1(); 
 +   delay(500); 
 +
 +if ( Mentier == 1 && MMentier == 1 ) { 
 +   message[0] = '\0';  Mentier = 0; 
 +   mcp.digitalWrite(mcp.eGPB0, LOW); 
 +   MMentier = 0; 
 +   envoiemessage2(); 
 +   delay(500); 
 +
 +
 +</code>
  
 === L'achat de nrf24L01 === === L'achat de nrf24L01 ===
/home/chanteri/www/fablab37110/data/attic/start/arduino/nrf24l01.1653037195.txt.gz · Dernière modification : 2023/01/27 16:08 (modification externe)