Bonjour,
Je rencontre un nouveau soucis : j'utilise deux nrf24 qui émettent des données : l'un une structure, et l'autre une trame (chaine de caractère).
Malgré un grand nombre d'essais, je n'arrive à savoir si le message reçu provient de l'un ou de l'autre nrf24.
J'ai vu le sujet : https://forum.arduino.cc/t/nrf24-lire-deux-adresses-de-transmetteurs-en-meme-temps/498190/6
mais j'ai du rater quelque chose car impossible de reproduire ce qui à été proposé.
Voici le code qui fonctionne pour l'émetteur 1 seul:
#include <SPI.h>
#include <RF24.h>
#include <Wire.h>
#include "rgb_lcd.h"
#define pinCE 9 // On associe la broche "CE" du NRF24L01 à la sortie digitale D7 de l'arduino
#define pinCSN 10 // 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
rgb_lcd lcd;
RF24 radio(pinCE, pinCSN); // Instanciation du NRF24L01
const byte adresse[6] = tunnel; // Mise au format "byte array" du nom du tunnel
char message[32];
char AncienMessage[32]; // Avec cette librairie, on est "limité" à 32 caractères par message
const int buttonPin = 2;
int buttonState = 0;
bool etat = false;
long heure1 = 0;
long ancienneHeure1 = 0;
long heure2 = 0;
long ancienneHeure2 = 0;
struct mesures {
int CO2;
long COV;
float TEMPERATURE;
int HUMIDITE;
byte hh;
byte mm;
byte ss;
int PERIODE;
byte STRUCTURE;
byte POLBOX;
}mesures;
String conca = "";
byte complete = 0;
#include <ChainableLED.h>
#define NUM_LEDS 1
ChainableLED leds(4, 5, NUM_LEDS); //conecter sur D2 et D3
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);
lcd.begin(16, 2);
// 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_MAX); // 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)
pinMode(buttonPin, INPUT);
leds.setColorRGB(0, 255, 0, 0);
}
void loop() {
buttonState = digitalRead(buttonPin);
if (buttonState == HIGH){
etat = !etat;
if (etat == false){
leds.setColorRGB(0, 255, 0, 0);
Serial.println("stop");
}
else{
leds.setColorRGB(0, 0, 255, 0);
Serial.println("start");
}
delay(300);
}
if (etat == false) return;
// On vérifie à chaque boucle si un message est arrivé
if (radio.available()) {
radio.read(&mesures, sizeof(mesures));
// Si un message vient d'arriver, on le charge dans la variable "message"
//if(sizeof(mesures) != mesures.STRUCTURE) return;
conca = "P";
conca.concat(mesures.POLBOX);
conca.concat(" ");
conca.concat(mesures.hh);
conca.concat(":");
conca.concat(mesures.mm);
conca.concat(":");
conca.concat(mesures.ss);
conca.concat(" ");
conca.concat(mesures.TEMPERATURE);
conca.concat(" ");
conca.concat(mesures.HUMIDITE);
conca.concat(" ");
conca.concat(mesures.CO2);
conca.concat(" ");
conca.concat(mesures.COV);
conca.concat(" ");
int length = conca.length();
conca.concat(length);
Serial.println(conca); // … et on l'affiche sur le port série !
}
}
et je récupère sur le moniteur série :
start
P2 2:34:38 25.70 43 933 29 27
et le second code pour l'émetteur 2 seul:
#include <SPI.h>
#include <RF24.h>
#define pinCE 9 // On associe la broche "CE" du NRF24L01 à la sortie digitale D7 de l'arduino
#define pinCSN 10 // On associe la broche "CSN" du NRF24L01 à la sortie digitale D8 de l'arduino
#define tunnel2 "PIPE2" // 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 adresse2[6] = tunnel2; // 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, adresse2); // Ouverture du tunnel en LECTURE, avec le "nom" qu'on lui a donné
radio.setPALevel(RF24_PA_MAX); // 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 !
}
}
avec le retour suivant sur le moniteur série :
Récepteur NRF24L01
Message reçu : P1 2:40:7 297 35 596 53 24
Ce que je voudrai faire donc : c'est traiter dans un seul et même programme le message en structure (programme1) s'il provient de l'émetteur 1 et le traiter en chaine de caractère (programme2), s'il provient de l'émetteur 2.
Merci d'avance pour votre aide.