[Résolu] ESP8266 + NRF24L01 + accusé de réception

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

Salut
Je viens de trouver ce topic
https://forum.arduino.cc/index.php?topic=459175.0
Si ça peut t'aider.
En regardant 2 min sur google j'ai l'impression qu'il y a beaucoup de bug d’inversion de niveau et de décalage.

Ciao :wink:

J'avais tout simplement oublier de mettre la ligne :
pinMode(ledTemoin, OUTPUT);

J'avais tout simplement oublier de mettre la ligne : pinMode(ledTemoin, OUTPUT);

Bonjour, bienvenu au club !