Module NRF24L01 avec Arduino / Ce qu'il faut savoir / Code partie 2

Code partie 2



6. Définition du sens de communication

Si vous souhaitez recevoir un message à travers un canal, il va falloir utiliser la fonction « startListening ». Par contre si vous

souhaitez émettre un message à partir du canal vous devrez utiliser la fonction « stopListening ».

Vos lignes de code devront se présenter comme suit :

radio.startListening(); // ouverture de canal pour la réception
//ou
radio.stopListening();  // ouverture de canal pourl’émission

7. Emission et réception de données
Nous allons de ce part aborder la réception et l’émission des données. Les fonctions « read » et « write »permettent 
respectivement de lire un message reçu, ou d’envoyer un message. 

N’oubliez pas que la mémoire du nRF est limitée à 32 octets, ainsi donc les messages ne devront pas dépasser cette taille.

Par contre vous n’êtes pas limité à l’envoi d’une seule donnée à la fois.

Voici le code pour lire un message reçu :

char message[32];

radio.startListening();


if (radio.available()) {       //On vérifie si un message est en attente de lecture

  radio.read(&message, sizeof(message));     // Si oui, on le charge dans la variable "message"

}

char message[32];

message = "Mon message à envoyer !";     //Dans la limite de 32 octets (32 caractères, ici)

radio.stopListening();

radio.write(&message, sizeof(message));             // Envoi du contenu stocké dans la variable "message"

8.   Code pour l’émission du message « Hello Word !!! »

#include <SPI.h>#include <RF24.h>
#define pinCE   7             // On associe la broche "CE" du NRF24L01 à la sortie digitale D7 de l'arduino
#define pinCSN  8             // On associe la broche "CSN" du NRF24L01 à la sortie digitale D8 de l'arduino
#define tunnel  "PIPE1"       // On définit un "nom de tunnel" (5 caractères), pour pouvoir communiquer d'un NRF24 à
 l'autre
 
RF24 radio(pinCE, pinCSN);    // Instanciation du NRF24L01
 
const byte adresse[6] = tunnel;               // Mise au format "byte array" du nom du tunnel
const char message[] = "Hello World !!!";     // Message à transmettre à l'autre NRF24 (32 caractères maxi, avec cette 
//librairie)
void setup() {
  radio.begin();                      // Initialisation du module NRF24
  radio.openWritingPipe(adresse);     // Ouverture du tunnel en ÉCRITURE, avec le "nom" qu'on lui a donné
  radio.setPALevel(RF24_PA_MIN);      // Sélection d'un niveau "MINIMAL" pour communiquer (pas besoin d'une forte
// puissance, pour nos essais)
  radio.stopListening();              // Arrêt de l'écoute du NRF24 (signifiant qu'on va émettre, et non recevoir, ici)
}
void loop() {
  radio.write(&message, sizeof(message));     // Envoi de notre message
delay(1000);                                // … toutes les secondes !
}
9. Code pour la réception du message

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

#define pinCE   7             // On associe la broche "CE" du NRF24L01 à la sortie digitale D7 de l'arduino
#define pinCSN  8             // On associe la broche "CSN" du NRF24L01 à la sortie digitale D8 de l'arduino
#define tunnel  "PIPE1"       // On définit le "nom de tunnel" (5 caractères) à travers lequel on va recevoir les données 
//de l'émetteur
RF24 radio(pinCE, pinCSN);    // Instanciation du NRF24L01
const byte adresse[6] = tunnel; // Mise au format "byte array" du nom du tunnel char message[32]; // Avec cette librairie, on est "limité" à 32 caractères par message void setup() { // Initialisation du port série (pour afficher les infos reçues, sur le "Moniteur Série" de l'IDE Arduino) Serial.begin(9600); Serial.println("Récepteur NRF24L01"); Serial.println(""); // Partie NRF24 radio.begin(); // Initialisation du module NRF24 radio.openReadingPipe(0, adresse); // Ouverture du tunnel en LECTURE, avec le "nom" qu'on lui a donné radio.setPALevel(RF24_PA_MIN); // Sélection d'un niveau "MINIMAL" pour communiquer (pas besoin d'une forte
 puissance, pour nos essais)
  radio.startListening();             // Démarrage de l'écoute du NRF24 (signifiant qu'on va recevoir, et non émettre quoi que
 //ce soit, ici)
}
void loop() { // On vérifie à chaque boucle si un message est arrivé if (radio.available()) { radio.read(&message, sizeof(message)); // Si un message vient d'arriver, on le charge dans la variable
//"message"
    Serial.print("Message reçu : "); Serial.println(message);     // … et on l'affiche sur le port série !
  }
}