Bonjour,
A l'aide d'une carte Wemos D1 mini je réalise un émetteur NRF24L01. S'il y a eu un envoi de "0" et si le récepteur renvoie le même message que celui envoyé, une LED doit s'allumer. Or, dans le moniteur série je vois bien "RéceptionOK" mais ma LED ne s'allume pas. J'ai testé avec D8 et D0 au lieu de D3, pas mieux. Pourtant le code fonctionne sur une UNO. (le but est de s'assurer que le récepteur a bien reçu le message, car sur le montage final il n'y aura pas de moniteur !)
Voici mon code :
/* Adapté d'un Croquis paru dans Hackable Magazine N° 16
Janvier et Février 2017
émetteur
*/
#include <SPI.h>
#include <RF24.h>
#define PIN_CS D1
#define PIN_CE D2
RF24 radio(PIN_CE, PIN_CS);
const uint64_t pipeA =
0xF0F0F0F0E1LL;
const uint64_t pipeB =
0xF0F0F0F0D2LL;
const int buttonPin = D4; // the number of the pushbutton pin
int buttonState = 0; // variable for reading the pushbutton status
const int ledTemoin = D3; // the number of the LED témoin
void setup() {
pinMode(buttonPin, INPUT_PULLUP); // initialize the pushbutton pin as an input:
digitalWrite(ledTemoin, LOW); // initialize the ledTemoin
Serial.begin(57600);
Serial.println(F("Go go go !"));
radio.begin();
// Activer l'accusé de réception
radio.enableAckPayload();
// L'accusé de réception est dynamique
radio.enableDynamicPayloads();
// ------------- réglage des amplificateurs PA et LNA s'ils sont présents -----------
// réglage de l'amplificateur
radio.setPALevel(RF24_PA_LOW);
//radio.setPALevel(RF24_PA_HIGH);
// réglage des canaux/pipes
radio.openWritingPipe(pipeB);
radio.openReadingPipe(1, pipeA);
// En écoute
radio.startListening();
}
void loop() {
// Arrêt écoute
radio.stopListening();
//Serial.println(F("Envoi"));
buttonState = digitalRead(buttonPin);// read the state of the pushbutton value:
//Serial.println(buttonState);
// Utilisation de buttonState comme message
unsigned long message = buttonState;
// Envoi
if (!radio.write(&message, sizeof(unsigned long) )) {
Serial.println(F("erreur"));
}
// Mise en écoute
radio.startListening();
// Enregistement du début du délai
unsigned long debut = micros();
boolean timeout = false;
// Tant que rien à lire
while (!radio.available()) {
// 600ms de passé, on abandonne
if (micros() - debut > 600000) {
timeout = true;
break;
}
}
// abandon pour cause de délai écoulé ?
if (timeout) {
Serial.println(F("Erreur : timeout."));
} else {
// variable pour le message reçu
unsigned long reception;
// lecture des données reçues
radio.read(&reception, sizeof(unsigned long));
// enregistrement du moment de la réception
unsigned long fin = micros();
// Si le message a été correctement reçu la led s'allume
if (message == 0 && message == reception) {
Serial.println("réception OK");
digitalWrite(ledTemoin, HIGH);
delay(2000);
digitalWrite(ledTemoin, LOW);
}
}
delay(100);
}
Ci-joint copie d'écran du montage sous Fritzig
Merci