Conception d'un nichoir connecté ! soucis de LED IR modulé !

Ok, alors on va continuer avec la barrière infrarouge.
Peux-tu me dire ce dont tu disposes ? Avec quoi fais-tu cette barrière ?

Autre question. Est-ce que tu veux améliorer le contenu du serveur ? Le code du lien que je t'ai indiqué fait un truc plus esthétique...

re,

coté serveur, si on pouvait agrandir la taille de la police de 100% c'est parfait. Il faudrait également ôter les " apres les valeurs. Ce n'est pas la peine de mettre les unités.

Coté barrière je n'ai pas encore reçu le matériel, mais comptait tester avec un switch dans un premier temps.
le compteur peut simplement être en 3eme ligne sur le serveur.

si tu preferes partir du code du tuto que tu m’as fait suivre c’est possible également car il fonctionne aussi :

#include <ESP8266WiFi.h>
#include <ESP8266WebServer.h>
#include "DHT.h"

// Uncomment one of the lines below for whatever DHT sensor type you're using!
//#define DHTTYPE DHT11   // DHT 11
//#define DHTTYPE DHT21   // DHT 21 (AM2301)
#define DHTTYPE DHT22   // DHT 22  (AM2302), AM2321

/*Put your SSID & Password*/
const char* ssid = "*******";  // Enter SSID here
const char* password = "*******";  //Enter Password here

ESP8266WebServer server(80);

// DHT Sensor
uint8_t DHTPin = D4; 
               
// Initialize DHT sensor.
DHT dht(DHTPin, DHTTYPE);                

float Temperature;
float Humidity;
 
void setup() {
  Serial.begin(115200);
  delay(100);
  
  pinMode(DHTPin, INPUT);

  dht.begin();              

  Serial.println("Connecting to ");
  Serial.println(ssid);

  //connect to your local wi-fi network
  WiFi.begin(ssid, password);

  //check wi-fi is connected to wi-fi network
  while (WiFi.status() != WL_CONNECTED) {
  delay(1000);
  Serial.print(".");
  }
  Serial.println("");
  Serial.println("WiFi connected..!");
  Serial.print("Got IP: ");  Serial.println(WiFi.localIP());

  server.on("/", handle_OnConnect);
  server.onNotFound(handle_NotFound);

  server.begin();
  Serial.println("HTTP server started");

}
void loop() {
  
  server.handleClient();
  
}

void handle_OnConnect() {

 Temperature = dht.readTemperature(); // Gets the values of the temperature
  Humidity = dht.readHumidity(); // Gets the values of the humidity 
  server.send(200, "text/html", SendHTML(Temperature,Humidity)); 
}

void handle_NotFound(){
  server.send(404, "text/plain", "Not found");
}

String SendHTML(float Temperaturestat,float Humiditystat){
  String ptr = "<!DOCTYPE html> <html>\n";
  ptr +="<head><meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0, user-scalable=no\">\n";
  ptr +="<title>ESP8266 Weather Report</title>\n";
  ptr +="<style>html { font-family: Helvetica; display: inline-block; margin: 0px auto; text-align: center;}\n";
  ptr +="body{margin-top: 50px;} h1 {color: #444444;margin: 50px auto 30px;}\n";
  ptr +="p {font-size: 24px;color: #444444;margin-bottom: 10px;}\n";
  ptr +="</style>\n";
  ptr +="</head>\n";
  ptr +="<body>\n";
  ptr +="<div id=\"webpage\">\n";
  ptr +="<h1>ESP8266 NodeMCU Weather Report</h1>\n";
  
  ptr +="<p>Temperature: ";
  ptr +=(int)Temperaturestat;
  ptr +="C</p>";
  ptr +="<p>Humidity: ";
  ptr +=(int)Humiditystat;
  ptr +="%</p>";
  
  ptr +="</div>\n";
  ptr +="</body>\n";
  ptr +="</html>\n";
  return ptr;
}

et le retour :

mais on ne voit pas la temp et l’hygro dans le moniteur.

rer67:
Coté barrière je n’ai pas encore reçu le matériel, mais comptait tester avec un switch dans un premier temps.

OK, mais qu’as-tu commandé ?

Voici une mise à jour avec un début de traitement de la barrière. Mon idée est que si un oiseau coupe la barrière IR, il peut rester un certain temps devant la barrière voire passer devant plusieurs fois avant de se décider à entrer ou sortir. Donc, j’ai (essayé) mis une temporisation d’une seconde pendant laquelle j’attends de voir s’il l’oiseau coupe la barrière : s’il n’y a pas de coupure après ce délai, j’incrémente le compteur.

Qu’en penses-tu ?

/*
   ESP8266 + DHT22 + webserver + Barriere IR
   Lesept -- 28/07/2019
*/
#include <ESP8266WiFi.h>
#include <ESP8266WebServer.h>
#include "DHT.h"

// Uncomment one of the lines below for whatever DHT sensor type you're using!
//#define DHTTYPE DHT11   // DHT 11
//#define DHTTYPE DHT21   // DHT 21 (AM2301)
#define DHTTYPE DHT22   // DHT 22  (AM2302), AM2321

/*Put your SSID & Password*/
const char* ssid = "*******";  // Enter SSID here
const char* password = "*******";  //Enter Password here

ESP8266WebServer server(80);

// DHT Sensor
uint8_t DHTPin = D4;
// Initialize DHT sensor.
DHT dht(DHTPin, DHTTYPE);

float Temperature;
float Humidity;

// Barrière (ou switch)
#define IRPin D7  // pour GPIO13
unsigned int compteur = 0;
bool wasHigh = false;
bool etatChrono = false;

void setup() {
  Serial.begin(115200);
  delay(100);
  pinMode(DHTPin, INPUT);
  dht.begin();

  Serial.println("Connecting to ");
  Serial.println(ssid);
  //connect to your local wi-fi network
  WiFi.begin(ssid, password);
  //check wi-fi is connected to wi-fi network
  while (WiFi.status() != WL_CONNECTED) {
    delay(1000);
    Serial.print(".");
  }
  Serial.println("");
  Serial.println("WiFi connected..!");
  Serial.print("Got IP: ");  Serial.println(WiFi.localIP());

  server.on("/", handle_OnConnect);
  server.onNotFound(handle_NotFound);
  server.begin();
  Serial.println("HTTP server started");
}
void loop() {
  server.handleClient();

  // Affichage T&H sur la console
  if (millis() - chronoDHT > duration) {
    chronoDHT = millis();
    Temperature = dht.readTemperature(); // Gets the values of the temperature
    Humidity = dht.readHumidity();
    Serial.print("Temperature: ");
    Serial.println(Temperature);
    Serial.print("Humidity: ");
    Serial.println(Humidity);
  }

  // Gestion de la barrière IR
  int IRval = digitalRead(IRPin);
  if (IRval == HIGH) { // détection
    wasHigh = true;
    Serial.println("Detection oiseau");
    if (millis() - chrono < 1000ul) etatChrono = false;
  } else {
    if (wasHIGH && !etatChrono) { // Lancement d'une attente d'une seconde
      chronoIR = millis();
      etatChrono = true;
    }
    if (etatChrono && millis() - chronoIR > 1000ul) { // Fin de l'attente
      Serial.print("Compteur +1 : ");
      compteur++;
      Serial.println(compteur);
      wasHIGH = false;
      etatChrono = false;
    }
  }
}

void handle_OnConnect() {
  Temperature = dht.readTemperature(); // Gets the values of the temperature
  Humidity = dht.readHumidity(); // Gets the values of the humidity
  server.send(200, "text/html", SendHTML(Temperature, Humidity));
}

void handle_NotFound() {
  server.send(404, "text/plain", "Not found");
}

String SendHTML(float Temperaturestat, float Humiditystat) {
  String ptr = "<!DOCTYPE html> <html>\n";
  ptr += "<head><meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0, user-scalable=no\">\n";
  ptr += "<title>ESP8266 Weather Report</title>\n";
  ptr += "<style>html { font-family: Helvetica; display: inline-block; margin: 0px auto; text-align: center;}\n";
  ptr += "body{margin-top: 50px;} h1 {color: #444444;margin: 50px auto 30px;}\n";
  ptr += "p {font-size: 24px;color: #444444;margin-bottom: 10px;}\n";
  ptr += "</style>\n";
  ptr += "</head>\n";
  ptr += "<body>\n";
  ptr += "<div id=\"webpage\">\n";
  ptr += "<h1>ESP8266 Bird watch</h1>\n";

  ptr += "<p>Temperature: ";
  ptr += (int)Temperaturestat;
  ptr += "C</p>";
  ptr += "<p>Humidity: ";
  ptr += (int)Humiditystat;
  ptr += "%</p>";
  ptr += "<p>Compteur: ";
  ptr += compteur / 2;
  ptr += "</p>";

  ptr += "</div>\n";
  ptr += "</body>\n";
  ptr += "</html>\n";
  return ptr;
}

A tester…

J’ai ajouté la temp et humi dans la console, mais je pense que tu n’en as pas besoin dans la version finale car tu n’auras plus un PC connecté au NodeMCU.

la j'ai un bug ...

lesept:
OK, mais qu’as-tu commandé ?

Voici une mise à jour avec un début de traitement de la barrière. Mon idée est que si un oiseau coupe la barrière IR, il peut rester un certain temps devant la barrière voire passer devant plusieurs fois avant de se décider à entrer ou sortir. Donc, j’ai (essayé) mis une temporisation d’une seconde pendant laquelle j’attends de voir s’il l’oiseau coupe la barrière : s’il n’y a pas de coupure après ce délai, j’incrémente le compteur.

Qu’en penses-tu ?

/*

ESP8266 + DHT22 + webserver + Barriere IR
  Lesept – 28/07/2019
*/
#include <ESP8266WiFi.h>
#include <ESP8266WebServer.h>
#include “DHT.h”

// Uncomment one of the lines below for whatever DHT sensor type you’re using!
//#define DHTTYPE DHT11  // DHT 11
//#define DHTTYPE DHT21  // DHT 21 (AM2301)
#define DHTTYPE DHT22  // DHT 22  (AM2302), AM2321

/Put your SSID & Password/
const char* ssid = “";  // Enter SSID here
const char
password = "
*”;  //Enter Password here

ESP8266WebServer server(80);

// DHT Sensor
uint8_t DHTPin = D4;
// Initialize DHT sensor.
DHT dht(DHTPin, DHTTYPE);

float Temperature;
float Humidity;

// Barrière (ou switch)
#define IRPin D7  // pour GPIO13
unsigned int compteur = 0;
bool wasHigh = false;
bool etatChrono = false;

void setup() {
  Serial.begin(115200);
  delay(100);
  pinMode(DHTPin, INPUT);
  dht.begin();

Serial.println(“Connecting to “);
  Serial.println(ssid);
  //connect to your local wi-fi network
  WiFi.begin(ssid, password);
  //check wi-fi is connected to wi-fi network
  while (WiFi.status() != WL_CONNECTED) {
    delay(1000);
    Serial.print(”.”);
  }
  Serial.println("");
  Serial.println(“WiFi connected…!”);
  Serial.print("Got IP: ");  Serial.println(WiFi.localIP());

server.on("/", handle_OnConnect);
  server.onNotFound(handle_NotFound);
  server.begin();
  Serial.println(“HTTP server started”);
}
void loop() {
  server.handleClient();

// Affichage T&H sur la console
  if (millis() - chronoDHT > duration) {
    chronoDHT = millis();
    Temperature = dht.readTemperature(); // Gets the values of the temperature
    Humidity = dht.readHumidity();
    Serial.print("Temperature: ");
    Serial.println(Temperature);
    Serial.print("Humidity: ");
    Serial.println(Humidity);
  }

// Gestion de la barrière IR
  int IRval = digitalRead(IRPin);
  if (IRval == HIGH) { // détection
    wasHigh = true;
    Serial.println(“Detection oiseau”);
    if (millis() - chrono < 1000ul) etatChrono = false;
  } else {
    if (wasHIGH && !etatChrono) { // Lancement d’une attente d’une seconde
      chronoIR = millis();
      etatChrono = true;
    }
    if (etatChrono && millis() - chronoIR > 1000ul) { // Fin de l’attente
      Serial.print("Compteur +1 : ");
      compteur++;
      Serial.println(compteur);
      wasHIGH = false;
      etatChrono = false;
    }
  }
}

void handle_OnConnect() {
  Temperature = dht.readTemperature(); // Gets the values of the temperature
  Humidity = dht.readHumidity(); // Gets the values of the humidity
  server.send(200, “text/html”, SendHTML(Temperature, Humidity));
}

void handle_NotFound() {
  server.send(404, “text/plain”, “Not found”);
}

String SendHTML(float Temperaturestat, float Humiditystat) {
  String ptr = " \n";
  ptr += “<meta name=“viewport” content=“width=device-width, initial-scale=1.0, user-scalable=no”>\n”;
  ptr += “ESP8266 Weather Report\n”;
  ptr += “html { font-family: Helvetica; display: inline-block; margin: 0px auto; text-align: center;}\n”;
  ptr += “body{margin-top: 50px;} h1 {color: #444444;margin: 50px auto 30px;}\n”;
  ptr += “p {font-size: 24px;color: #444444;margin-bottom: 10px;}\n”;
  ptr += “\n”;
  ptr += “\n”;
  ptr += “\n”;
  ptr += “<div id=“webpage”>\n”;
  ptr += “

ESP8266 Bird watch

\n”;

ptr += "

Temperature: ";
  ptr += (int)Temperaturestat;
  ptr += “C

”;
  ptr += "

Humidity: ";
  ptr += (int)Humiditystat;
  ptr += “%

”;
  ptr += "

Compteur: ";
  ptr += compteur / 2;
  ptr += “

”;

ptr += “\n”;
  ptr += “\n”;
  ptr += “\n”;
  return ptr;
}



A tester...

J'ai ajouté la temp et humi dans la console, mais je pense que tu n'en as pas besoin dans la version finale car tu n'auras plus un PC connecté au NodeMCU.

Ta ‘logique’ de comptage est bonne, a la première coupure de barrière tu attends 1 seconde puis
si 2eme passage on recommence l’attente de 1 seconde … puis si plus de 1s sans coupure = j’incrémente…
c’est bien cà.
J’ai vu que le contact de coupure est sur GPIO 15 (D8) le calcul de lance t-il au passage à 3.3V ou au passage à 0 ? … en obersevant le code “if (IRval == HIGH) { // détection
wasHigh = true;” jeme dit que c’est a l’etat haut (3.3v) qu’il compte …? c’est bien ca ?

en barrière j'ai commandé :

ca
et
ca

Pour l'erreur de compilation du message #24 il faut ajouter

unsigned long chronoDHT = 0;

dans l'en tête du code
Et

chronoDHT = millis () ;

à la fin du setup

Pour tes achats, je pense qu'il faudra utiliser le premier, il y a un émetteur IR et un récepteur. Tu les places l'un en face de l'autre et tu connectes le récepteur sur la pin appelée IRpin. J'ai pris la GPIO13 ou D7, mais tu peux choisir celle que tu veux et modifier la ligne du code.

J'ai supposé que lorsque le récepteur est illuminé par l'émetteur, c'est à dire il n'y a rien dans la barrière, alors l'émetteur envoie HIGH. Si tu veux le tester avec un bouton poussoir, tu peux le câbler comme ça
D7-- bouton -- GND
et définir

pinMode (IRpin, INPUT_PULLUP) ;

lesept:
Pour l’erreur de compilation du message #24 il faut ajouter

unsigned long chronoDHT = 0;

dans l’en tête du code
Et

chronoDHT = millis () ;

à la fin du setup

lol . l’ente je pense avoir trouvé … mais le setup ?
il me dit la même chose pour '“duration”

j’ai changé comme cela :

/*
   ESP8266 + DHT22 + webserver + Barriere IR
   Lesept -- 28/07/2019
*/
#include <ESP8266WiFi.h>
#include <ESP8266WebServer.h>
#include "DHT.h"

// Uncomment one of the lines below for whatever DHT sensor type you're using!
//#define DHTTYPE DHT11   // DHT 11
//#define DHTTYPE DHT21   // DHT 21 (AM2301)
#define DHTTYPE DHT22   // DHT 22  (AM2302), AM2321

/*Put your SSID & Password*/
const char* ssid = "reseau wifi N";  // Enter SSID here
const char* password = "649b0832f6";  //Enter Password here

ESP8266WebServer server(80);

// DHT Sensor
uint8_t DHTPin = D4;
// Initialize DHT sensor.
DHT dht(DHTPin, DHTTYPE);

float Temperature;
float Humidity;

// Barrière (ou switch)
#define IRPin D7  // pour GPIO13
unsigned int compteur = 0;
unsigned long chronoDHT = 0;
bool wasHigh = false;
bool etatChrono = false;

void setup() {
  Serial.begin(115200);
  delay(100);
  pinMode(DHTPin, INPUT);
  dht.begin();

  Serial.println("Connecting to ");
  Serial.println(ssid);
  //connect to your local wi-fi network
  WiFi.begin(ssid, password);
  //check wi-fi is connected to wi-fi network
  while (WiFi.status() != WL_CONNECTED) {
    delay(1000);
    Serial.print(".");
  }
  Serial.println("");
  Serial.println("WiFi connected..!");
  Serial.print("Got IP: ");  Serial.println(WiFi.localIP());

  server.on("/", handle_OnConnect);
  server.onNotFound(handle_NotFound);
  server.begin();
  Serial.println("HTTP server started");
}
void loop() {
  server.handleClient();

 // Affichage T&H sur la console
  if (millis() - chronoDHT > duration) {
    chronoDHT = millis();
    Temperature = dht.readTemperature(); // Gets the values of the temperature
    Humidity = dht.readHumidity();
    Serial.print("Temperature: ");
    Serial.println(Temperature);
    Serial.print("Humidity: ");
    Serial.println(Humidity);
  }

  // Gestion de la barrière IR
  int IRval = digitalRead(IRPin);
  if (IRval == HIGH) { // détection
    wasHigh = true;
    Serial.println("Detection oiseau");
    if (millis() - chrono < 1000ul) etatChrono = false;
  } else {
    if (wasHIGH && !etatChrono) { // Lancement d'une attente d'une seconde
      chronoIR = millis();
      etatChrono = true;
    }
    if (etatChrono && millis() - chronoIR > 1000ul) { // Fin de l'attente
      Serial.print("Compteur +1 : ");
      compteur++;
      Serial.println(compteur);
      wasHIGH = false;
      etatChrono = false;
    }
  }
}

void handle_OnConnect() {
  Temperature = dht.readTemperature(); // Gets the values of the temperature
  Humidity = dht.readHumidity(); // Gets the values of the humidity
  server.send(200, "text/html", SendHTML(Temperature, Humidity));
}

void handle_NotFound() {
  server.send(404, "text/plain", "Not found");
}

String SendHTML(float Temperaturestat, float Humiditystat) {
  String ptr = "<!DOCTYPE html> <html>\n";
  ptr += "<head><meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0, user-scalable=no\">\n";
  ptr += "<title>ESP8266 Weather Report</title>\n";
  ptr += "<style>html { font-family: Helvetica; display: inline-block; margin: 0px auto; text-align: center;}\n";
  ptr += "body{margin-top: 50px;} h1 {color: #444444;margin: 50px auto 30px;}\n";
  ptr += "p {font-size: 24px;color: #444444;margin-bottom: 10px;}\n";
  ptr += "</style>\n";
  ptr += "</head>\n";
  ptr += "<body>\n";
  ptr += "<div id=\"webpage\">\n";
  ptr += "<h1>ESP8266 Bird watch</h1>\n";

  ptr += "<p>Temperature: ";
  ptr += (int)Temperaturestat;
  ptr += "C</p>";
  ptr += "<p>Humidity: ";
  ptr += (int)Humiditystat;
  ptr += "%</p>";
  ptr += "<p>Compteur: ";
  ptr += compteur / 2;
  ptr += "</p>";

  ptr += "</div>\n";
  ptr += "</body>\n";
  ptr += "</html>\n";
  return ptr;
}
[code]

[/code]

il me met cette liste d’erreur :

sketch_jul28b_tuto_avec_compteur.ino:63:30: error: ‘duration’ was not declared in this scope

if (millis() - chronoDHT > duration) {

^

sketch_jul28b_tuto_avec_compteur.ino:78:20: error: ‘chrono’ was not declared in this scope

if (millis() - chrono < 1000ul) etatChrono = false;

^

sketch_jul28b_tuto_avec_compteur.ino:80:9: error: ‘wasHIGH’ was not declared in this scope

if (wasHIGH && !etatChrono) { // Lancement d’une attente d’une seconde

^

sketch_jul28b_tuto_avec_compteur.ino:81:7: error: ‘chronoIR’ was not declared in this scope

chronoIR = millis();

^

sketch_jul28b_tuto_avec_compteur.ino:84:34: error: ‘chronoIR’ was not declared in this scope

if (etatChrono && millis() - chronoIR > 1000ul) { // Fin de l’attente

^

sketch_jul28b_tuto_avec_compteur.ino:88:7: error: ‘wasHIGH’ was not declared in this scope

wasHIGH = false;

^

exit status 1
‘duration’ was not declared in this scope

J'ai fait un peu trop de ménage dans le code... Ajoute dans l'en tête

unsigned long chronoIR = 0;
bool wasHIGH = false ;
unsigned long duration = 5000ul;

Et change chrono en chronoIR à la ligne 78

lesept:
Pour tes achats, je pense qu'il faudra utiliser le premier, il y a un émetteur IR et un récepteur. Tu les places l'un en face de l'autre et tu connectes le récepteur sur la pin appelée IRpin. J'ai pris la GPIO13 ou D7, mais tu peux choisir celle que tu veux et modifier la ligne du code.

J'ai supposé que lorsque le récepteur est illuminé par l'émetteur, c'est à dire il n'y a rien dans la barrière, alors l'émetteur envoie HIGH. Si tu veux le tester avec un bouton poussoir, tu peux le câbler comme ça
D7-- bouton -- GND
et définir

pinMode (IRpin, INPUT_PULLUP) ;

pour tester je peux mettre du 3.3v sur D7 et a chaque débranchement du cable de la pin D7 le programme le verra comme une interruption de la barrière non ?
cela m'éviterais de changer le programme pour le test, c'est juste ?

Oui ça devrait aller

alors après les premiers essais :

au lancement du programme et la pin D7 au 3v ( comme si la barrière n'est pas rompu ) la detection ouseau se fait quazi toutes les millisecondes ... dans le moniteur, les lignes s'enchaines .

si je retire le contact de D7 c'est pareil ca s'affole ...
si je met D7 au 0V plus de lignes dans la console.

par contre aucune incrementation sur le serveur . la valeur reste a 0

du coup le fonctionnement n'est pas encore OK.

il faudrait qu'une seconde apres avoir retirer le 3v j'ai une seule détection

re,

je pense que dans

 // Gestion de la barrière IR
  int IRval = digitalRead(IRPin);
  if (IRval == HIGH) { // détection
    wasHigh = true;
    Serial.println("Detection oiseau");

c'est plutot LOW que HIGH non ? car c'est quant on est à 0v que l'on a une détection.
il faudrait également qu'a la première détection le message s'affiche mais pas une 2eme fois ?...

Il y avait une erreur : wasHigh était parfois appelée wasHIGH. Essaye avec ça :

/*
   ESP8266 + DHT22 + webserver + Barriere IR
   Lesept -- 28/07/2019
*/
#include <ESP8266WiFi.h>
#include <ESP8266WebServer.h>
#include "DHT.h"

// Uncomment one of the lines below for whatever DHT sensor type you're using!
//#define DHTTYPE DHT11   // DHT 11
//#define DHTTYPE DHT21   // DHT 21 (AM2301)
#define DHTTYPE DHT22   // DHT 22  (AM2302), AM2321

/*Put your SSID & Password*/
const char* ssid = "*******";  // Enter SSID here
const char* password = "*******";  //Enter Password here

ESP8266WebServer server(80);

// DHT Sensor
#define DHTPin 2 // D4;
// Initialize DHT sensor.
DHT dht(DHTPin, DHTTYPE);
float Temperature;
float Humidity;
unsigned long chronoDHT = 0;
unsigned long duration = 5000ul;

// Barrière
#define IRPin 13 // D7 pour GPIO13
unsigned int compteur = 0;
bool wasHigh = false;
bool etatChrono = false;
unsigned long chronoIR = 0;

void setup() {
  Serial.begin(115200);
  delay(100);
  pinMode(DHTPin, INPUT);
  dht.begin();

  Serial.println("Connecting to ");
  Serial.println(ssid);
  //connect to your local wi-fi network
  WiFi.begin(ssid, password);
  //check wi-fi is connected to wi-fi network
  while (WiFi.status() != WL_CONNECTED) {
    delay(1000);
    Serial.print(".");
  }
  Serial.println("");
  Serial.println("WiFi connected..!");
  Serial.print("Got IP: ");  Serial.println(WiFi.localIP());

  server.on("/", handle_OnConnect);
  server.onNotFound(handle_NotFound);
  server.begin();
  Serial.println("HTTP server started");
  chronoDHT = millis();
}
void loop() {
  server.handleClient();

  // Affichage T&H sur la console
  if (millis() - chronoDHT > duration) {
    chronoDHT = millis();
    Temperature = dht.readTemperature(); // Gets the values of the temperature
    Humidity = dht.readHumidity();
    Serial.print("Temperature: ");
    Serial.println(Temperature);
    Serial.print("Humidity: ");
    Serial.println(Humidity);
  }

  // Gestion de la barrière IR
  int IRval = digitalRead(IRPin);
  if (IRval == HIGH) { // détection
    wasHigh = true;
    Serial.println("Detection oiseau");
    if (millis() - chronoIR < 1000ul) etatChrono = false;
  } else {
    if (wasHigh && !etatChrono) { // Lancement d'une attente d'une seconde
      chronoIR = millis();
      etatChrono = true;
    }
    if (etatChrono && millis() - chronoIR > 1000ul) { // Fin de l'attente
      Serial.print("Compteur +1 : ");
      compteur++;
      Serial.println(compteur);
      wasHigh = false;
      etatChrono = false;
    }
  }
}

void handle_OnConnect() {
  Temperature = dht.readTemperature(); // Gets the values of the temperature
  Humidity = dht.readHumidity(); // Gets the values of the humidity
  server.send(200, "text/html", SendHTML(Temperature, Humidity));
}

void handle_NotFound() {
  server.send(404, "text/plain", "Not found");
}

String SendHTML(float Temperaturestat, float Humiditystat) {
  String ptr = "<!DOCTYPE html> <html>\n";
  ptr += "<head><meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0, user-scalable=no\">\n";
  ptr += "<title>ESP8266 Weather Report</title>\n";
  ptr += "<style>html { font-family: Helvetica; display: inline-block; margin: 0px auto; text-align: center;}\n";
  ptr += "body{margin-top: 50px;} h1 {color: #444444;margin: 50px auto 30px;}\n";
  ptr += "p {font-size: 24px;color: #444444;margin-bottom: 10px;}\n";
  ptr += "</style>\n";
  ptr += "</head>\n";
  ptr += "<body>\n";
  ptr += "<div id=\"webpage\">\n";
  ptr += "<h1>ESP8266 Bird watch</h1>\n";

  ptr += "<p>Temperature: ";
  ptr += (int)Temperaturestat;
  ptr += "C</p>";
  ptr += "<p>Humidity: ";
  ptr += (int)Humiditystat;
  ptr += "%</p>";
  ptr += "<p>Compteur: ";
  ptr += compteur / 2;
  ptr += "</p>";

  ptr += "</div>\n";
  ptr += "</body>\n";
  ptr += "</html>\n";
  return ptr;
}

Vérifie les déclarations des pins et remets tes SSID & Password.

Pour la simulation de la détection : D7 est à HIGH (donc 3.3V) pour une détection. Si tu ne branches rien sur la pin D7, elle est flottante, donc dans un état indéterminé pour nous : ça peut être vu comme un HIGH ou un LOW par l'ESP, voire même changer de façon aléatoire.

Donc, si tu veux simuler "pas de détection", tu mets D7 au GND.
Si tu veux simuler une détection; tu le mets au 3.3V.
Entre les deux, le temps que tu passes de l'un à l'autre, c'est indéterminé. Mais le chrono tourne et notamment le délai de une seconde, ça implique que ce délai on ne sait pas s'il va être respecté ou non.

Donc tu as intérêt à mettre un bouton poussoir, si tu en as un, et ajouter une capacité pour gérer l'anti-rebond. Si tu n'en as pas, un simple

delay(15);

après la ligne du digitalRead fera l'affaire.

re

a priori tout est fonctionnel !!!

j'ai mis 5 secondes pour faire les essais et effectivement il ne compte que 1 passage malgré les multiples contact dans les 5 secondes.
j'ai compris ton explication sur l’état incertain, je verrais cela demain.

l'affichage sur le serveur est ok lui aussi

UN TRES GRAND MERCI à toi pour ta patience et ton engagement !!!

MERCIIII

je regarde le reste demain et te confirme cela .

vincent

Ok
Tu peux modifier la durée de la temporisation d'une seconde, c'est le '1000ul' à deux endroits du code.
Pour la version finale, que tu installeras dans le nichoir, tu pourras enlever les lignes qui affichent sur la console. Elles ne serviront pas.

Tiens moi au courant quand tu reçois ta barrière, il y aura peut-être des choses à revoir dans le code...

Et poste des photos lorsque tu auras tout installé...