NRF24-L01 avec Arduino:



  

  Nous allons voir comment utiliser le module NRF24-L01 avec deux arduinos.
  Comme exemple nous controlerons un relais a distance avec un arduino et un bouton pour ouvrir ou fermer le relai a distance.
  Le code a quelque petites fonctionnalitees en plus.


liste des composants :

-deux arduinos
-des cables de connections
-2 modules NRF24-L01
-un bouton poussoir
-un relais



Code :


Le Code peut etre telecharge juste : ici


Emeteur :

   /*Ce script est celui d'une telecommande en arduino avec des modules NRF24-L01.
  Il permetent la connexion a distance entre deux arduinos
  Ce code est celui de l'emeteur*/

  #include
  #include "RF24.h"
  RF24 radio(9, 10);    //definit les broches de connections du NRF24-L01
  const byte addresses[6] = "Free1";    //definit la communication

  const int pot1Pin = A0,    //definit le potentiometre numero 1 en A0
   pot2Pin = A1,    //definit le potentiometre numero 2 en A1
   joystickXPin = A2,    //definit l'axe X du joystick a la broche A2
   joystickYPin = A3,    //definit l'axe Y du joystick a la broche A3
   joystickZPin = 7,    //definit l'axe Z du joystick a la broche A7
   s1Pin = 4,    //definit le bouton numero 1 a la broche 4
   s2Pin = 3,    //definit le bouton numero 2 a la broche 3
   s3Pin = 2,    //definit le bouton numero 3 a la broche 2
   led1Pin = 6,    //definit la LED 1 du potentiometre
   led2Pin = 5,    //definit le LED 2 du potentiometre
   led3Pin = 8;    //definit la LED pour le statut de la connexion entre les deux arduino.

  int dataWrite[8];    //definit la canal de communication des NRF24-L01

  void setup() {
   // NRF24L01
   radio.begin();    //initialise le NRF24-L01
   radio.setPALevel(RF24_PA_LOW);
   radio.setDataRate(RF24_1MBPS);
   radio.setRetries(0, 15);    //initialise le delai entre les requetes/paquets
   radio.openWritingPipe(addresses);
   radio.openReadingPipe(1, addresses);
   radio.stopListening();
   // pin
   pinMode(joystickZPin, INPUT);    //initialise l'axe Z du joystick en mode INPUT
   pinMode(s1Pin, INPUT);    //initialise le bouton 1 en mode INPUT
   pinMode(s2Pin, INPUT);    //initialise le bouton 2 en mode INPUT
   pinMode(s2Pin, INPUT);    //initialise le bouton 3 en mode INPUT
   pinMode(led1Pin, OUTPUT);    //initialise la LED 1 en mode OUTPUT
   pinMode(led2Pin, OUTPUT);    //initialise la LED 2 en mode OUTPUT
   pinMode(led3Pin, OUTPUT);    //initialise la LED du satut de connexion en mode OUTPUT
  }

  void loop()
  {
   dataWrite[0] = analogRead(pot1Pin);
   dataWrite[1] = analogRead(pot2Pin);
   dataWrite[2] = analogRead(joystickXPin);
   dataWrite[3] = analogRead(joystickYPin);
   dataWrite[4] = digitalRead(joystickZPin);    //envoie des paquets selon les broches de la telecommande
   dataWrite[5] = digitalRead(s1Pin);
   dataWrite[6] = digitalRead(s2Pin);
   dataWrite[7] = digitalRead(s3Pin);

   if (radio.write(dataWrite, sizeof(dataWrite)))    //si une connexion est faite: allumer la LED de connexion
   {
   digitalWrite(led3Pin, HIGH);
   delay(20);    //fait clignoter la LED
   digitalWrite(led3Pin, LOW);
   }

   analogWrite(led1Pin, map(dataWrite[0], 0, 1023, 0, 255));
   analogWrite(led2Pin, map(dataWrite[1], 0, 1023, 0, 255));    //pas obligatoire
  }



Recepteur :

   /*Ce script permet la reception des paquets de la telcommande.
  Ce code est celui du recepteur*/

  #include
  #include "RF24.h"
  RF24 radio(9, 10);    //broche de connexion a l'arduino
  const byte addresses[6] = "Free1";

  const int dirServoPin = 2;
  byte dirServoOffset = 0;

  const int dirAPin = 7,
   pwmAPin = 6,
   dirBPin = 4,
   pwmBPin = 5,
   snsAPin = A0,
   snsBPin = A1,
   buzzerPin = 3,
   ledRPin = A3,
   ledGPin = A4,
   ledBPin = A5;
  const byte motorSpeed = 255;
  #define FORWARD LOW
  #define BACKWARD HIGH

  int dataRead[8];    //initialise le canal d'interaction entre les deux modules NRF24-L01.
  const unsigned long wirelessOvertime = 200;
  unsigned long lastReceivedSignal;

  int relais = 8;    //initialise le relaie a la broche 8 de l'arduino

  void setup() {

   Serial.begin(115200);

   radio.begin();    //initialise la communication
   radio.setPALevel(RF24_PA_LOW);
   radio.setDataRate(RF24_1MBPS);
   radio.setRetries(0, 15);
   radio.openWritingPipe(addresses);
   radio.openReadingPipe(1, addresses);
   radio.startListening();

   pinMode(ledRPin, OUTPUT);
   pinMode(ledGPin, OUTPUT);
   pinMode(ledBPin, OUTPUT);
   digitalWrite(ledRPin, HIGH);
   digitalWrite(ledGPin, HIGH);
   digitalWrite(ledBPin, HIGH);

   pinMode(relais, OUTPUT);    //initialise le relaie en mode OUPUT
  }
  void loop()
  {

   if ( radio.available()) {    //si les donnees sont bien recu:
   while (radio.available()) {    //lire les donnees
   radio.read(dataRead, sizeof(dataRead));
   }

   //controle du relais par les boutons
   if (!dataRead[6]){    //si la bouton est presse sur la telecommande
   digitalWrite(relais, HIGH);    //fermer le relai
   }else{
   digitalWrite(relais, LOW);}    //si le bouton n'est pas presse, ouvrir le relai

   lastReceivedSignal = millis();
   }
   else {

   if (millis() - lastReceivedSignal >= wirelessOvertime) {

   analogWrite(pwmAPin, 0);
   analogWrite(pwmBPin, 0);
   // eteind le buzzer
   noTone(buzzerPin);
   // turn off the RGB LED
   digitalWrite(ledRPin, HIGH);
   digitalWrite(ledGPin, HIGH);
   digitalWrite(ledBPin, HIGH);
         }
     }
  }