Arduino Forum

International => Français => Topic started by: rer67 on Jul 27, 2019, 09:28 am

Title: Conception d'un nichoir connecté ! soucis de LED IR modulé !
Post by: rer67 on Jul 27, 2019, 09:28 am
Bonjour,

Je me présente, j'ai 40 ans et fanatique d'oiseaux .... habitant dans le Grand EST !
J'ai actuellement en place dans mon nichoir une sonde DHT22 qui me renvoie la température et l'hygrométrie sur une page web : ça c'est parfait !

Etant fanatique d'oiseaux, je cherche a compter le nombre de passage de mes mésanges dans le nichoir.
Pour cela, je voudrais utiliser une nodeMCU V3. L'idée est que chaque contact de ma barrière IR arrivant sur un PIN de ma nodemcu incrémente un compteur et que ce compteur soit renvoyer sur une page web.

Mais voila..... je ne sais pas du tout coder!!
Pourriez vous m'aider voir  m'écrire un petit bout de code me permettant de réaliser mon projet ?

Un grand merci d'avance.
Title: Re: Compteur d’impulsion avec envoi sur page web
Post by: Zlika on Jul 27, 2019, 01:22 pm
Bonjour,

Pour ce qui est d'écrire ton code, il y a peu de chance que quelqu'un le fasse sans lui fournir un minimum d'efforts.

Tu es sur un site de passionnés qui veulent aider les autres à comprendre comment faire, et non pas faire à leur place.

Nous avons tous, pour la plupart, des projets déjà en cours, des suivis de projets venant d'autres personnes sur ce forum.

Il y a une grosse différence entre passer un peu de temps avec quelqu'un pour l'orienter, ou lui montrer comment corriger ses erreurs, et faire un énième code sans que la personne demandeuse n'en retienne un quelconque intérêt en dehors de son utilisation finale.

J'imagine que ta passion pour les oiseaux ne te laisse pas forcement du temps où même l'envie d'approfondir tes connaissances sur le codage et le choix de composants électroniques, mais en passant un peu de temps pour comprendre le fonctionnement de ces cartes, cela pourrait te donner des idées, et surtout les compétences pour concrétiser ton projet et bien d'autres (comme par exemple prendre une photo de l'oiseau sur le déclenchement de la cellule).

Tu ne trouveras pas forcément quelqu'un pour te modifier ton code ici, mais je suis sûr que toutes les questions que tu poseras ne resteront pas sans réponses.

Dans un premier temps, analyse le code que tu utilises actuellement pour comprendre son fonctionnement.
Tu peux t'aider de ce site (https://eskimon.fr/) pour apprendre.
Pose des questions si tu as des doutes ou que tu ne comprends pas quelque-chose.

Propose un nouveau code (entre balises comme indiqué dans les messages épinglés) et la liste de ton matériel.
On t'aidera à le faire évoluer jusqu'au résultat attendu.

Bon courage...



Title: Re: Compteur d’impulsion avec envoi sur page web
Post by: Artouste on Jul 27, 2019, 02:07 pm
...

Etant fanatique d'oiseaux, je cherche a compter le nombre de passage de mes mésanges dans le nichoir.
Pour cela, je voudrais utiliser une nodeMCU V3. L'idée est que chaque contact de ma barrière IR arrivant sur un PIN de ma nodemcu incrémente un compteur et que ce compteur soit renvoyer sur une page web.

Mais voila..... je ne sais pas du tout coder!!
Pourriez vous m'aider voir  m'écrire un petit bout de code me permettant de réaliser mon projet ?

Un grand merci d'avance.
Bonjour
Trés bonne réponse d'ensemble de Zlika
accessoirement , les mésanges sont des "piafs adorables" que j'apprécie beaucoup
çà m'est même arrivé d'en remettre en marche (https://www.youtube.com/watch?v=wCWbFaACw6U)
 :smiley-mr-green:
Title: Re: Compteur d’impulsion avec envoi sur page web
Post by: lesept on Jul 27, 2019, 02:26 pm
Si je comprends bien, tu as déjà un système qui affiche les données d'un capteur DHT sur un serveur Web. Quel matériel utilises-tu pour ça ?

Le plus simple serait d'utiliser le NodeMCU V3 pour le DHT et la barrière infrarouge. Si ton DHT n'est pas branché sur le NodeMCU, commence par porter ton premier code sur cet appareil. Ensuite, cherche des tutoriels sur l'utilisation de la barrière infrarouge avec le NodeMCU.

Tu fais alors un sketch pour mettre la barrière en œuvre. Lorsque ça fonctionne, ll reste à fusionner les deux codes.
Title: Re: Compteur d’impulsion avec envoi sur page web
Post by: rer67 on Jul 27, 2019, 06:28 pm
Bonjour,

Merci de vos encouragements.
pour vous montrer un peu le contexte et ma passion :
mon site web (http://lesmesangesdujardin.viens.la)
ma chaine youtube (https://www.youtube.com/channel/UClVmYINOY72_4ydu8c8fRZg?disable_polymer=true)
vous y trouverez des videos et une page sur la technique de mon nichoir.

Ce que j'ai actuellement :

- un capteur DHT22
- nodemcu V3

avec cela j'affiche les données de temp et d'hygro à l'intérieur du nichoir : ( dans le petit nichoir blanc en bas )

(https://image.noelshack.com/fichiers/2019/30/6/1564242220-capture.jpg)

le code à été mis en lua avec esplorer sur la node :

Code: [Select]

PIN = 4
SSID = "******"
PASSWORD = "*******"

local dht = require 'dht'

function readDht()    
    status,temp,humi,temp_decimial,humi_decimial = dht.read(PIN)
    if( status == dht.OK ) then
        print("DHT Temperature:"..temp..";".."Humidite"..humi)
    elseif( status == dht.ERROR_CHECKSUM ) then
        print( "DHT Checksum error." );
    elseif( status == dht.ERROR_TIMEOUT ) then
        print( "DHT Time out." );
    end
    return temp,humi
end


function wait_for_wifi( )
   tmr.alarm (1, 1000, 1, function ( )
      if wifi.sta.getip ( ) == nil then
         print ("Waiting for Wifi connection")
      else
         tmr.stop (1)
         print ("ESP8266 mode is: " .. wifi.getmode ( ))
         print ("The module MAC address is: " .. wifi.ap.getmac ( ))
         print ("Config done, IP is " .. wifi.sta.getip ( ))
      end
   end)
end

function connect()
    wifi.setmode(wifi.STATION)
    wifi.sta.config(SSID, PASSWORD, 1)
    wait_for_wifi( )
end

function http_conn(sock)
    sock:on("receive",function(sock,payload)
        print(payload) -- for debugging only
       --generates HTML web site
        temp,humi =readDht()
        sock:send('HTTP/1.1 200 OK\r\nConnection: keep-alive\r\nCache-Control: private, no-store\r\n\r\n\
   <!DOCTYPE HTML>\
    <html><head><meta content="text/html;charset=utf-8"><title>ESP8266</title></head>\
   <body bgcolor="#ffffff">\
   <h3><font color="black">\
   <input style="border: hidden; border: 0"type="text"size=1 name="j"value="'..temp..'"> <br>\
   <input style="border: hidden; border: 0"type="text"size=1 name="p"value="'..humi..'"> <br></font></h3>\
  </body></html>')
    sock:on("sent",function(sock) sock:close() end)
    end)
end
  
connect()
svr = net.createServer (net.TCP, 30)
svr:listen (80, http_conn)
readDht()



comme vous le constatez le serveur est dans la nodemcu directement et je viens chercher ces infos toutes les 5 minutes pour actualiser mon LIVE sur youtube.


A cela je cherche donc à ajouter un compteur de passage de l'oiseau à travers le trou d'envol de 32mm ( mesange charbonnière ).

Je comptait mettre une barrière IR à l'arrière du trou d'envol relié à un nodemcu supplémentaire ( car je ne sait pas faire de "sketch" ;). L'idée étant d'ajouter sur la page qui est sur mon serveur le nombre de passage de l'oiseau.
je compterais les aller et retour mais en divisant par 2 cette valeur et en affichant l'entier inférieur cela devrait être OK .....

J'ai trouvé des codes sur le web mais rien ne me permettant de realiser le montage souhaité. Je suis fan de bricolage mais mes connaissances en codage sont quazi inexistant.

sur ce forum j'ai trouvé ce code de mika47 : lien de la discution : ici (https://forum.arduino.cc/index.php?topic=137811.0)
Code: [Select]
#include <LiquidCrystal.h>
//const int Pin_p= 8;
//const int Pin_m= 9;
// définition des bornes
#define valeurMin 0
#define valeurMax 10

int Pin_plus=0;
int Pin_moins=0;
int j=0;

LiquidCrystal lcd(7,6,5,4,3,2);

void setup() {

 lcd.begin(20, 4);
 
 pinMode(11,INPUT);
 pinMode(12,INPUT);
 digitalWrite(11, HIGH);
 digitalWrite(12, HIGH);
 j=0;
 lcd.clear();
 lcd.setCursor(0,1);
 lcd.print(j);
 lcd.clear();
 //lcd.print(j);
//delay(100);
}

void loop() {
 if (digitalRead(11)==LOW)
 {
   if (j<valeurMax)j++;

   lcd.clear();
   lcd.setCursor(0,1);
   lcd.print(j);
   delay(100);
   while((digitalRead(11)==LOW));
 }
 if (digitalRead(12)==LOW)
 {
   if (j>valeurMin)j--;
   lcd.clear();
   lcd.setCursor(0,1);
   lcd.print(j);
   delay(100);
   while((digitalRead(12)==LOW));
}
}


qui si je remplace le bouton + par ma cellule et si je retire l'écran LCD pour simplement ajouter la valeur du compteur sur ma page web devrait théoriquement faire l'affaire ...
j'ai également lu que parfois y avait des rebonds dans les comptages et que certains on mis un temps de qq millisecondes avant de compter l'impulsion suivante ...

qu'en pensez- vous ?

J'en reviens au fait que j'en demande beaucoup peut être mais certainement comme moi qui aide d'autres passionnés à oberver et construire des nichoirs vidéo, il y a surement sur ce forum des personnes prêtes à m'aider un peu plus que la normale ;). Un peu de pub pour le forum est toujours possible si j'arrive à réaliser mon souhait  ..:)

Merci d'avance.

Title: Re: Compteur d’impulsion avec envoi sur page web
Post by: lesept on Jul 27, 2019, 07:27 pm
J'aime bien le projet, mais je ne connais pas le Lua et pas trop la syntaxe pour afficher des données sur un site Web, en tout cas pas s'il est trop compliqué...

Par contre, je sais que ce que tu veux faire peut être fait avec un seul NodeMCU, sur lequel tu connectés ton DHT et la barrière IR. Je peux juste t'aider pour faire un code, ou sketch, en C pour le NodeMCU.

Qu'en dis-tu ?
Title: Re: Compteur d’impulsion avec envoi sur page web
Post by: rer67 on Jul 27, 2019, 08:06 pm
J'aime bien le projet, mais je ne connais pas le Lua et pas trop la syntaxe pour afficher des données sur un site Web, en tout cas pas s'il est trop compliqué...

Par contre, je sais que ce que tu veux faire peut être fait avec un seul NodeMCU, sur lequel tu connectés ton DHT et la barrière IR. Je peux juste t'aider pour faire un code, ou sketch, en C pour le NodeMCU.

Qu'en dis-tu ?
hello Le7 !

mais si une partie du code est déjà en lua, je ne peux pas ajouter une autre partie en C, non ?
faut-il tout faire en C alors ?

merci,
Title: Re: Compteur d’impulsion avec envoi sur page web
Post by: lesept on Jul 27, 2019, 08:18 pm
Tout en lua ou en C
Title: Re: Compteur d’impulsion avec envoi sur page web
Post by: rer67 on Jul 27, 2019, 09:18 pm
Comme tu connais le C il faudrait donc convertir ce que j'ai en lua en C puis ajouter le code de la barrière Ir c'est ça ?
Title: Re: Compteur d’impulsion avec envoi sur page web
Post by: lesept on Jul 27, 2019, 09:53 pm
Oui
Je tenterai de faire une première version demain matin.
En attendant, je te conseille de lire des tutos : eskimon, openclassrooms par exemple
Title: Re: Compteur d’impulsion avec envoi sur page web
Post by: lesept on Jul 28, 2019, 10:47 am
Bonjour
Voici une première version du code :
Code: [Select]
/*
   ESP8266 + DHT22 + webserver
   Barriere IR viendra pus tard
   Lesept -- 28/07/2019
*/

#include "ESP8266WiFi.h"
#include "ESP8266WebServer.h"
ESP8266WebServer server(80);

#include "DHTesp.h"
DHTesp dht;
#define DHTPin 4
float temp = 0;
float humi = 0;

unsigned long chrono = 0;
const unsigned long duration = 5000ul; // Mesure T&H toutes les 5 secondes

void setup() {
  Serial.begin(115200);
  dht.setup(DHTPin, DHTesp::DHT22);

  Serial.println("Waiting to connect…");
  WiFi.begin("Network name", "Password");  //Connect to the WiFi network
  while (WiFi.status() != WL_CONNECTED) {  //Wait for connection
    delay(500);
    Serial.print("");
  }
  Serial.print("\nIP address: ");
  Serial.println(WiFi.localIP());  //Print the local IP
  Serial.println ("Acces au serveur en ajoutant :80");

  server.on("/other", []() {   //Define the handling function for the path
    server.send(200, "text / plain", "Other URL");
  });
  server.on("/", handleRootPath);    //Associate the handler function to the path
  server.begin();                    //Start the server
  Serial.println("Server listening");

  chrono = millis();
}

void loop() {
  server.handleClient();         //Handling of incoming requests

  if (millis() - chrono > duration) {
    chrono = millis();
    TempAndHumidity measurement = dht.getTempAndHumidity();
    temp = measurement.temperature;
    humi = measurement.humidity;
    Serial.print("Temperature: ");
    Serial.println(temp);
    Serial.print("Humidity: ");
    Serial.println(humi);
  }
}

void handleRootPath() {   //Handler for the root path
  String message;
  // message = "HTTP/1.1 200 OK\r\nConnection: keep-alive\r\nCache-Control: private, no-store\r\n\r\n";
  message = "<!DOCTYPE HTML><html><head><meta content=\"text/html;charset=utf-8\"><title>ESP8266</title></head>";
  message += "<body bgcolor=\"#ffffff\"><h3><font color=\"black\">";
  message += "<input style=\"border: hidden; border: 0\"type=\"text\"size=1 name=\"j\"value=";
  message += String(temp,1);
  message += "\"> <br><input style=\"border: hidden; border: 0\"type=\"text\"size=1 name=\"p\"value=";
  message += String(humi,1);
  message += "\"> <br></font></h3></body></html>";
  server.send(200, "text/html", message);
  //  server.send(200, "text/plain", "Hello world");
}

Il faut que tu installes une bibliothèque pour la lecture du DHT22 : DHTEsp (https://github.com/beegee-tokyo/DHTesp/blob/master/DHTesp.h). Tu peux le faire par le biais du gestionnaire de bibliothèques :
(https://i1.wp.com/techtutorialsx.com/wp-content/uploads/2018/04/esp32-dht-library-install1.png?zoom=1.5&resize=524%2C229&ssl=1)


Ce code ne fait pour l'instant que lire la DHT toutes les 5 secondes, afficher les valeurs sur la console (à régler à 115200 baud) et tenir à jour un serveur web. Il te donne son adresse IP et tu peux l'ouvrir via un browser en allant sur http://adresse_ip:80

Pour l'instant, c'est minimaliste ; il affiche juste les valeurs de température et d'humidité.

Je n'ai pas compilé ni testé, je te laisse faire...
Pense à renseigner tes ssid & password dans la ligne Wifi.begin
A+
Title: Re: Compteur d’impulsion avec envoi sur page web
Post by: rer67 on Jul 28, 2019, 11:02 am
Bonjour le7 !

Un grand merci, je vais me familiariser avec le logiciel arduino et essayer de charger cela, je tiens informé.
@ toute
Title: Re: Compteur d’impulsion avec envoi sur page web
Post by: rer67 on Jul 28, 2019, 11:46 am
re,

j'ai bien télécharger la bibliothèque :
(https://image.noelshack.com/fichiers/2019/30/7/1564306449-dht.jpg)

puis j'ai televerser le code.
dans le moniteur je vois bien le rafrachissement toutes les 5 secondes :
(https://image.noelshack.com/fichiers/2019/30/7/1564306585-2.jpg)
et la page web est bien acessible.
cependant j'ai "NAN" au lieu de la valeur numerique ...
(j'ai également essayer avec la bibliotheque V 1.0.6 mais c'est idem)

Le DHT22 est bien sur le PIN D4 de la NODEMCU

Title: Re: Compteur d’impulsion avec envoi sur page web
Post by: lesept on Jul 28, 2019, 12:03 pm
Il y a un problème avec la sonde, est-ce qu'elle fonctionnait correctement avant ?
Essaye l'exemple DHT_ESP8266.ino de la bibliothèque
Title: Re: Compteur d’impulsion avec envoi sur page web
Post by: lesept on Jul 28, 2019, 12:18 pm
J'ai trouvé un tuto (https://lastminuteengineers.com/esp8266-dht11-dht22-web-server-tutorial/) qui fait exactement la même chose, en plus joli et avec une autre bibliothèque. Tu peux le tester : s'il fonctionne, on ajoutera le comptage. Ca fait gagner un peu de temps...
Title: Re: Compteur d’impulsion avec envoi sur page web
Post by: rer67 on Jul 28, 2019, 01:17 pm
ok je teste cela.
j'avais ressayer en lua et tout etait ok : donc niveau sonde c'est ok .
Title: Re: Compteur d’impulsion avec envoi sur page web
Post by: rer67 on Jul 28, 2019, 01:52 pm
avec ce code j'obtient cela sur le serveur :
(https://image.noelshack.com/fichiers/2019/30/7/1564314758-1.jpg)
Title: Re: Compteur d’impulsion avec envoi sur page web
Post by: rer67 on Jul 28, 2019, 02:01 pm
le DHTtester de cette bibliotheque fonctionne par contre :
Code: [Select]
// Example testing sketch for various DHT humidity/temperature sensors
// Written by ladyada, public domain

// REQUIRES the following Arduino libraries:
// - DHT Sensor Library: https://github.com/adafruit/DHT-sensor-library
// - Adafruit Unified Sensor Lib: https://github.com/adafruit/Adafruit_Sensor

#include "DHT.h"

#define DHTPIN 2     // Digital pin connected to the DHT sensor
// Feather HUZZAH ESP8266 note: use pins 3, 4, 5, 12, 13 or 14 --
// Pin 15 can work but DHT must be disconnected during program upload.

// Uncomment whatever type you're using!
//#define DHTTYPE DHT11   // DHT 11
#define DHTTYPE DHT22   // DHT 22  (AM2302), AM2321
//#define DHTTYPE DHT21   // DHT 21 (AM2301)

// Connect pin 1 (on the left) of the sensor to +5V
// NOTE: If using a board with 3.3V logic like an Arduino Due connect pin 1
// to 3.3V instead of 5V!
// Connect pin 2 of the sensor to whatever your DHTPIN is
// Connect pin 4 (on the right) of the sensor to GROUND
// Connect a 10K resistor from pin 2 (data) to pin 1 (power) of the sensor

// Initialize DHT sensor.
// Note that older versions of this library took an optional third parameter to
// tweak the timings for faster processors.  This parameter is no longer needed
// as the current DHT reading algorithm adjusts itself to work on faster procs.
DHT dht(DHTPIN, DHTTYPE);

void setup() {
  Serial.begin(9600);
  Serial.println(F("DHTxx test!"));

  dht.begin();
}

void loop() {
  // Wait a few seconds between measurements.
  delay(2000);

  // Reading temperature or humidity takes about 250 milliseconds!
  // Sensor readings may also be up to 2 seconds 'old' (its a very slow sensor)
  float h = dht.readHumidity();
  // Read temperature as Celsius (the default)
  float t = dht.readTemperature();
  // Read temperature as Fahrenheit (isFahrenheit = true)
  float f = dht.readTemperature(true);

  // Check if any reads failed and exit early (to try again).
  if (isnan(h) || isnan(t) || isnan(f)) {
    Serial.println(F("Failed to read from DHT sensor!"));
    return;
  }

  // Compute heat index in Fahrenheit (the default)
  float hif = dht.computeHeatIndex(f, h);
  // Compute heat index in Celsius (isFahreheit = false)
  float hic = dht.computeHeatIndex(t, h, false);

  Serial.print(F("Humidity: "));
  Serial.print(h);
  Serial.print(F("%  Temperature: "));
  Serial.print(t);
  Serial.print(F("°C "));
  Serial.print(f);
  Serial.print(F("°F  Heat index: "));
  Serial.print(hic);
  Serial.print(F("°C "));
  Serial.print(hif);
  Serial.println(F("°F"));
}


(https://image.noelshack.com/fichiers/2019/30/7/1564315258-2.jpg)
Title: Re: Compteur d’impulsion avec envoi sur page web
Post by: rer67 on Jul 28, 2019, 02:06 pm
le DHT_esp8266 de ta bibliothe fonctionne aussi :

Code: [Select]
#include "DHTesp.h"

#ifdef ESP32
#pragma message(THIS EXAMPLE IS FOR ESP8266 ONLY!)
#error Select ESP8266 board.
#endif

DHTesp dht;

void setup()
{
  Serial.begin(115200);
  Serial.println();
  Serial.println("Status\tHumidity (%)\tTemperature (C)\t(F)\tHeatIndex (C)\t(F)");
  String thisBoard= ARDUINO_BOARD;
  Serial.println(thisBoard);

  // Autodetect is not working reliable, don't use the following line
  // dht.setup(02);
  // use this instead:
  dht.setup(02, DHTesp::DHT22); // Connect DHT sensor to GPIO 17
}

void loop()
{
  delay(dht.getMinimumSamplingPeriod());

  float humidity = dht.getHumidity();
  float temperature = dht.getTemperature();

  Serial.print(dht.getStatusString());
  Serial.print("\t");
  Serial.print(humidity, 1);
  Serial.print("\t\t");
  Serial.print(temperature, 1);
  Serial.print("\t\t");
  Serial.print(dht.toFahrenheit(temperature), 1);
  Serial.print("\t\t");
  Serial.print(dht.computeHeatIndex(temperature, humidity, false), 1);
  Serial.print("\t\t");
  Serial.println(dht.computeHeatIndex(dht.toFahrenheit(temperature), humidity, true), 1);
 
}


(https://image.noelshack.com/fichiers/2019/30/7/1564315582-3.jpg)
Title: Re: Compteur d’impulsion avec envoi sur page web
Post by: rer67 on Jul 28, 2019, 02:12 pm
j'ai trouvé!!
SUPER CONTENT !!!

c'etait une erreur de PIN ! (entre la ref de PIN et le numero GPIO)
il fallait mettre la ref GPIO
Code: [Select]
#include "DHTesp.h"
DHTesp dht;
#define DHTPin 2
float temp = 0;
float humi = 0;


ton code fonctionne donc jusqu'ici !
Title: Re: Compteur d’impulsion avec envoi sur page web
Post by: lesept on Jul 28, 2019, 03:05 pm
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...
Title: Re: Compteur d’impulsion avec envoi sur page web
Post by: rer67 on Jul 28, 2019, 03:31 pm
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.
Title: Re: Compteur d’impulsion avec envoi sur page web
Post by: rer67 on Jul 28, 2019, 03:37 pm
si tu preferes partir du code du tuto que tu m'as fait suivre c'est possible également car il fonctionne aussi :

Code: [Select]
#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 :
(https://image.noelshack.com/fichiers/2019/30/7/1564320854-4.jpg)

mais on ne voit pas la temp et l'hygro dans le moniteur.
Title: Re: Compteur d’impulsion avec envoi sur page web
Post by: lesept on Jul 28, 2019, 04:16 pm
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 ?

Code: [Select]
/*
   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.
Title: Re: Compteur d’impulsion avec envoi sur page web
Post by: rer67 on Jul 28, 2019, 04:30 pm
la j'ai un bug  ...

(https://image.noelshack.com/fichiers/2019/30/7/1564324185-1.jpg)
Title: Re: Compteur d’impulsion avec envoi sur page web
Post by: rer67 on Jul 28, 2019, 05:20 pm
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 ?

Code: [Select]
/*
   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.
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 ?



Title: Re: Compteur d’impulsion avec envoi sur page web
Post by: rer67 on Jul 28, 2019, 05:27 pm
en barrière j'ai commandé :

ca (https://fr.aliexpress.com/item/32998692609.html?spm=a2g0o.cart.0.0.85823c00NdfwbR)
et
ca (https://fr.aliexpress.com/item/33007295585.html?spm=a2g0o.cart.0.0.85823c00NdfwbR)
Title: Re: Compteur d’impulsion avec envoi sur page web
Post by: lesept on Jul 28, 2019, 05:44 pm
Pour l'erreur de compilation du message #24 il faut ajouter
Code: [Select]
unsigned long chronoDHT = 0;
dans l'en tête du code
Et
Code: [Select]
chronoDHT = millis () ;
à la fin du setup
Title: Re: Compteur d’impulsion avec envoi sur page web
Post by: lesept on Jul 28, 2019, 05:51 pm
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
Code: [Select]
pinMode (IRpin, INPUT_PULLUP) ;
Title: Re: Compteur d’impulsion avec envoi sur page web
Post by: rer67 on Jul 28, 2019, 06:03 pm
Pour l'erreur de compilation du message #24 il faut ajouter
Code: [Select]
unsigned long chronoDHT = 0;
dans l'en tête du code
Et
Code: [Select]
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 :

Code: [Select]

/*
   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]
Title: Re: Compteur d’impulsion avec envoi sur page web
Post by: rer67 on Jul 28, 2019, 06:14 pm
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

Title: Re: Compteur d’impulsion avec envoi sur page web
Post by: lesept on Jul 28, 2019, 06:40 pm
J'ai fait un peu trop de ménage dans le code... Ajoute dans l'en tête

Code: [Select]
unsigned long chronoIR = 0;
bool wasHIGH = false ;
unsigned long duration = 5000ul;

Et change chrono en chronoIR à la ligne 78
Title: Re: Compteur d’impulsion avec envoi sur page web
Post by: rer67 on Jul 28, 2019, 06:43 pm
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
Code: [Select]
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 ?
Title: Re: Compteur d’impulsion avec envoi sur page web
Post by: lesept on Jul 28, 2019, 06:51 pm
Oui ça devrait aller
Title: Re: Compteur d’impulsion avec envoi sur page web
Post by: rer67 on Jul 28, 2019, 07:52 pm
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  .

(https://image.noelshack.com/fichiers/2019/30/7/1564336140-1.jpg)

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.

(https://image.noelshack.com/fichiers/2019/30/7/1564336142-2.jpg)

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

(https://image.noelshack.com/fichiers/2019/30/7/1564336143-3.jpg)

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

Title: Re: Compteur d’impulsion avec envoi sur page web
Post by: rer67 on Jul 28, 2019, 08:20 pm
re,

je pense que dans

Code: [Select]
// 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 ?...
Title: Re: Compteur d’impulsion avec envoi sur page web
Post by: lesept on Jul 28, 2019, 09:27 pm
Il y avait une erreur : wasHigh était parfois appelée wasHIGH. Essaye avec ça :
Code: [Select]
/*
   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.
Title: Re: Compteur d’impulsion avec envoi sur page web
Post by: lesept on Jul 28, 2019, 09:56 pm
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é (https://eskimon.fr/tuto-arduino-204-un-simple-bouton) pour gérer l'anti-rebond. Si tu n'en as pas, un simple
Code: [Select]
delay(15);
après la ligne du digitalRead fera l'affaire.

(https://eskimon.fr/images/uploaded/tuto-arduino-204-un-simple-bouton/filtre-anti-rebond.jpg)
Title: Re: Compteur d’impulsion avec envoi sur page web
Post by: rer67 on Jul 28, 2019, 10:14 pm
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
Title: Re: Compteur d’impulsion avec envoi sur page web
Post by: lesept on Jul 28, 2019, 10:17 pm
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é...
Title: Re: Compteur d’impulsion avec envoi sur page web
Post by: rer67 on Jul 29, 2019, 12:53 pm
Bonjour,

Le programme fonctionne très bien.
le comptage est conforme à la demande.

Je suis entrain de réfléchir et de trouver un moyen à avoir une autre détection qui confirmerais que l'oiseau est bien entré ( une détection plus basse dans le nichoir par exemple ) avec un détecteur PIR par exemple..... .
Car actuellement si l'oiseau regarde ne serai-ce qu'une fois à l'intérieur il est compté..... a suivre

Par contre y aurait-il un moyen d'envoyer la valeur du compteur directement sur une page web a chaque fois que la valeur du compteur s'incrémente ? cela me permettrait d'afficher un compteur en temps réelle . Actuellement comme je charge la page du serveur toute les minutes, je n'ai pas la valeurs en temps réelle du compteur.

Merci
Title: Re: Compteur d’impulsion avec envoi sur page web
Post by: lesept on Jul 29, 2019, 02:34 pm
Bonne question... mais je ne sais pas faire.

Peut-être faut-il modifier l'en-tête de la page web :

Code: [Select]
<!doctype html>
<html lang="fr">
<head>
<meta http-equiv="Refresh" content="5; url=index.html">
<title>Hello world !</title>
permet de recharger la page toutes les 5 secondes. Il faut bien sûr mettre la bonne URL dans la quatrième ligne.

Donc il faudrait changer cette ligne :
Code: [Select]
ptr += "<head><meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0, user-scalable=no\">\n";en
Code: [Select]
ptr += "<head><meta http-equiv=\"Refresh\" content=\"5; name=\"viewport\" content=\"width=device-width, initial-scale=1.0, user-scalable=no ; url=URL!!!\">\n";
ou quelque chose comme ça...

Je ne sais pas s'il faut mettre des , ou des ; ni s'il y a un ordre à respecter sur la ligne...
Title: Re: Compteur d’impulsion avec envoi sur page web
Post by: rer67 on Jul 29, 2019, 05:56 pm
re,

En fait je n'ai pas besoin de faire recharger la page toute les 5 minutes sur le serveur de la NODELMCU car j'ai sur mon site web une page web avec une frame qui est rengrénée toute les 5 minutes.

J'ai trouvé sur le forum : ici  (https://forum.arduino.cc/index.php?topic=511147.0)
une solution qui je crois fait ce que je recherche .... la mise a jour de données immédiatement sans rechargement à fréquence fixe.

tu penses que c'est adaptable ? je vais essayer de comprendre  ....

merci
Title: Re: Compteur d’impulsion avec envoi sur page web
Post by: lesept on Jul 29, 2019, 06:37 pm
J'ai pas dit "5 minutes", j'ai dit "5 secondes"...

Mais je n'y connais pas grand chose, le mieux serait de demander à J-M-L directement...
Title: Re: Compteur d’impulsion avec envoi sur page web
Post by: rer67 on Jul 29, 2019, 08:00 pm
oups oui excuses moi je n'ai pas différentier les minutes des secondes .....!
Je vais voir avec lui si je peux glaner des informations.....
bonne soirée
@+
Title: Re: Compteur d’impulsion avec envoi sur page web
Post by: rer67 on Sep 07, 2019, 11:42 am
hello !

grâce a tes explication et pas mal de lecture, j'ai mis a jour le code avec une 2eme barrière pour compter les entrée et sorties ...
Code: [Select]
/*
   ESP8266 + DHT22 + webserver + Barriere IR V2
   Lesept -- 28/07/2019  & RER -- 30/08/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 IRPinext D2 // D2 pour GPIO13
#define IRPinint D1 // D1 pour GPIO14
unsigned int compteur = 0;
unsigned int entree = 0;
unsigned int sortie = 0;
bool etatE = false;
bool etatI = false;
unsigned long TCE = 0; 
unsigned long TCI = 0;
unsigned long TRE = 0;
unsigned long TRI = 0;
unsigned long lastTRE = 0;
unsigned long lastTRI = 0;
unsigned char etatTRI = 0;  // peut avoir comme valeur 0 , 1 , 2
unsigned char etatTRE = 0;  // peut avoir comme valeur 0 , 1 , 2



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();

  pinMode(IRPinext, INPUT_PULLUP);
  pinMode(IRPinint, INPUT_PULLUP);
 
}


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 IRE = digitalRead(IRPinext);
   int IRI = digitalRead(IRPinint);

if (IRE == LOW && etatE == 0 && etatTRE == 0 ) {
      //TCE// 1ere coupure IR Extérieure
      TCE = millis();
      etatE = 1;
      }

if (IRE == HIGH && etatE == 1 && etatTRE == 0) {
      //TRE// 1er rétablissement IR Extérieure
      TRE = millis();
      etatTRE = 1;
      etatE = 0;
      }

if (IRE == LOW && etatTRE == 1 ) {
      //last TCE// dernière coupure IR Extérieure
      etatTRE = 2;
      }

if (IRE == HIGH && etatTRE == 2) {
      //lastTRE// dernier rétablissement IR Extérieure
      lastTRE = millis();
      TRE = 0;
      etatTRE = 1;
      }

if (IRI == LOW && etatI == 0 && etatTRI == 0) {
      //TCI// coupure IR Intérieure
      TCI = millis();
      etatI = 1;
      }   
         
if (IRI == HIGH && etatI == 1 && etatTRI == 0) {
      //TRI// 1er rétablissement IR Intérieur
      TRI = millis();
      etatTRI = 1;
      etatI = 0;
      }

if (IRI == LOW && etatTRI == 1) {
      //lastTCI// dernière coupure IR Extérieure
      etatTRI = 2;
      }

if (IRI == HIGH && etatTRI == 2) {
      //lastTRI// dernier rétablissement IR Extérieure
      lastTRI = millis();
      TRI = 0;
      etatTRI = 1;
      }   
       
//--------------------------------------//

   if (IRE && IRI && (millis() - TRE - lastTRE) > 1000 && (millis() - TRI - lastTRI) > 1000 && (TRE + lastTRE) > 0 && ((TRI + lastTRI) > 0 )) {
//Serial.print("TCE   ");
//Serial.println(TCE);
//Serial.print("TCI   ");
//Serial.println(TCI);
//Serial.print("TRE   ");   
//Serial.println(TRE);
//Serial.print("TRI   ");
//Serial.println(TRI);
//Serial.print("lastTRE   ");
//Serial.println(lastTRE);
//Serial.print("lastTRI   ");
//Serial.println(lastTRI);   
       if (TCE > TCI) {
          // cycle sortant
           if ((TRE + lastTRE) > (TRI + lastTRI)) {
              // oiseau sorti
              Serial.println("oiseau sorti");
              Serial.print("Passage +1 : ");
              compteur++;
              sortie++;
              Serial.println(compteur);
              TRE = 0;
              TRI = 0;
              TCE = 0;
              TCI = 0;
              lastTRE = 0;
              lastTRI = 0;
              etatTRI = 0;
              etatTRE = 0;
           }
           else if ( (TRI + lastTRI) > (TRE + lastTRE)) {
                   // oiseau regarde dehors et rerentré
                   Serial.println("oiseau regarde dehors et rerentré");
                   TRE = 0;
                   TRI = 0;
                   TCE = 0;
                   TCI = 0;
                   lastTRE = 0;
                   lastTRI = 0;
                   etatTRI = 0;
                   etatTRE = 0;
           }
       }
       else if (TCI > TCE ){
               // cycle entrant
                if ( (TRI + lastTRI) > (TRE + lastTRE)){
                   // oiseau rentré
                   Serial.println("oiseau rentré");
                   Serial.print("Passage +1 : ");
                   compteur++;
                   entree++;
                   Serial.println(compteur);
                   TRE = 0;
                   TRI = 0;
                   TCE = 0;
                   TCI = 0;
                   lastTRE = 0;
                   lastTRI = 0;
                   etatTRI = 0;
                   etatTRE = 0;
                }
                else if ( (TRE + lastTRE) > (TRI + lastTRI)) {
                        // oiseau regarde dedans et repart
                        Serial.println("oiseau regarde dedans et repart");
                        TRE = 0;
                        TRI = 0;
                        TCE = 0;
                        TCI = 0;
                        lastTRE = 0;
                        lastTRI = 0;
                        etatTRI = 0;
                        etatTRE = 0;
               }
       } 
    }
   else {
        if ( etatTRE == 1 && TCI == 0 && (millis() - TRE) > 2000) {
           // oiseau passé à l'extérieur
           Serial.println("oiseau passé à l'extérieur");
           TRE = 0;
           TRI = 0;
           TCE = 0;
           TCI = 0;
           lastTRE = 0;
           lastTRI = 0;
           etatTRI = 0;
           etatTRE = 0;
        }
        else if ( etatTRI == 1 && TCE == 0 && (millis() - TRI) > 2000) {
                // oiseau passé à l'intérieur
                Serial.println("oiseau passé à l'intérieur");
                TRE = 0;
                TRI = 0;
                TCE = 0;
                TCI = 0;
                lastTRE = 0;
                lastTRI = 0;
                etatTRI = 0;
                etatTRE = 0;
        }
    }   
}

//-----------------//

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 += "<p>Entrées: ";
  ptr += entree;
  ptr += "</p>";
  ptr += "<p>Sorties: ";
  ptr += sortie;
  ptr += "</p>";

  ptr += "</div>\n";
  ptr += "</body>\n";
  ptr += "</html>\n";
  return ptr;
}
         
Title: Re: Compteur d’impulsion avec envoi sur page web
Post by: lesept on Sep 07, 2019, 11:53 am
Et ça fonctionne comme tu veux ?
Title: Re: Compteur d’impulsion avec envoi sur page web
Post by: rer67 on Sep 07, 2019, 12:54 pm
Oui ! Du moins avec des contacteurs pour simuler les baririeres Ir.
Je ne les ait pas encore installés car j'ai du en prendre d'autres qui sont modulée (insensible à la lumière du jour).

J'ai quand même Une question...
Mes barrières sont en 5v
Si je Mets un pont diviseur sur mon gpio ça irait ?
Gnd ___15kohm___gpio 3v___10kohm___signal ir 5v

Merci
Title: Re: Compteur d’impulsion avec envoi sur page web
Post by: lesept on Sep 07, 2019, 01:35 pm
À mon avis oui
Title: Re: Compteur d’impulsion avec envoi sur page web
Post by: rer67 on Sep 07, 2019, 02:23 pm
ok.

je cherche une dernière chose :
ajouter un bouton "-1" sur ma page web pour retirer "1" au compteur (lié à un bug ou arondir la valeur du compteur à une valeur paire si aucun oiseau est dedans ( ce qui serait logique! )

pourrais-tu m'aiguiller ?
Title: Re: Compteur d’impulsion avec envoi sur page web
Post by: lesept on Sep 07, 2019, 03:50 pm
Oui il faut ajouter le bouton sur la page Web et lui associer une action. J'ai fait ça sur un projet terminé appelé Simulateur de présence.
Tu peux regarder dans le code.
Je t'aiderai à le faire bientôt
Title: Re: Compteur d’impulsion avec envoi sur page web
Post by: rer67 on Sep 07, 2019, 04:25 pm
re,
merci

effectivement, le code est un peu complex pour le néophite que je suis !!
mais je vais analyser !

de mon coté j'ai trouvé un code que j'ai modifié et qui fonctione aussi mais je n'arrive pas à le compiler avec le mien ....
Code: [Select]
#include <ESP8266WiFi.h>

const char* ssid = "**";
const char* password = "**";

int ledPin = 16;
WiFiServer server(80);

void setup()
{
  // initialisation de la communication série
  Serial.begin(115200);

  delay(100);

  // initialisation de la sortie pour la led
  pinMode(ledPin, OUTPUT);
  digitalWrite(ledPin, LOW);

  // Connexion wifi
  Serial.println();
  Serial.print("Connecting to ");
  Serial.println(ssid);

  WiFi.begin(ssid, password);

  // connection  en cours ...
  while (WiFi.status() != WL_CONNECTED)
  {
    delay(500);
    Serial.print(".");
  }

  // Wifi connecter
  Serial.println("WiFi connecter");

  // Démmarrage du serveur.
  server.begin();
  Serial.println("Serveur demarrer !");

  // Affichage de l'adresse IP
  Serial.print("Utiliser cette adresse URL pour la connexion :");
  Serial.print("http://");
  Serial.print(WiFi.localIP());
  Serial.println("/");

}

void loop()
{
  WiFiClient client;


  // Vérification si le client est connecter.
  client = server.available();
  if (!client)
  {
    return;
  }

  // Attendre si le client envoie des données ...
  //  Serial.println("nouveau client");
  while (!client.available()) {
    delay(1);
  }

  String request = client.readStringUntil('\r');
  //Serial.println(request);
  client.flush();

  if (request.indexOf("/compteur+1") != -1)  {
    Serial.println("compteur manuel +1");
  }
  if (request.indexOf("/compteur-1") != -1)  {
    Serial.println("compteur manuel -1");
  }

  // Réponse
  client.println("HTTP/1.1 200 OK");
  client.println("Content-Type: text/html");
  client.println("");
  client.println("<!DOCTYPE HTML>");
  client.println("<html>");
  client.println("<br><br>");
  client.println("<a href=\"/compteur+1\"\"><button>compteur+1 </button></a>");
  client.println("<a href=\"/compteur-1\"\"><button>compteur-1 </button></a><br />");
  client.println("</html>");

  delay(1);
  //Serial.println("Client deconnecter");
  //Serial.println("");

}


Merci d'avance
Title: Re: Compteur d’impulsion avec envoi sur page web
Post by: lesept on Sep 07, 2019, 05:49 pm
Il faut regarder le code des prises connectées, première version.
Dans le setup, comme on l'a déjà fait, on va définir une fonction qui va gérer ("handle") l'appui sur le bouton :
Code: [Select]
server.on("/bouton", handle_Bouton);
Cette fonction fera deux choses :

Code: [Select]
void handle_Bouton() {
  if (compteur > 0) --compteur;  // Diminuer le compteur
  handle_OnConnect();   // Mettre la page web à jour
}

Il reste à modifier la page web pour y mettre le bouton et le lien "/bouton" associé à un appui.
Code: [Select]
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 += ".button {display: block;width: 80px;background-color: #3498db;border: none;color: white;padding: 13px 30px;";
  ptr += "text-decoration: none;font-size: 25px;margin: 0px auto 35px;cursor: pointer;border-radius: 4px;}";
  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 += "<p>Entrées: ";
  ptr += entree;
  ptr += "</p>";
  ptr += "<p>Sorties: ";
  ptr += sortie;
  ptr += "</p>";

  ptr += "<p><a href=\"/bouton\"><button class=\"button\">-1</button></a></p>"";

  ptr += "</div>\n";
  ptr += "</body>\n";
  ptr += "</html>\n";
  return ptr;
}
Là, c'est fait rapidement sans tester : essaye et dis moi si ça fonctionne...

Edit : erreur corrigée
Title: Re: Compteur d’impulsion avec envoi sur page web
Post by: rer67 on Sep 07, 2019, 06:20 pm
re,

j'ai corrigé le petit bug ici :
Code: [Select]
ptr += ""<p><a href=\"/bouton\"><button class=\"button\">-1</button></a></p>"";
en
Code: [Select]
ptr += "<a href=\"/bouton\"><button class=\"button\">-1</button></a></p>";

et ça a l'air de fonctionner. je vais tester en détail ...

Merci pour ton aide !
Title: Re: Compteur d’impulsion avec envoi sur page web
Post by: lesept on Sep 07, 2019, 06:23 pm
Cool !
J'envisage de faire un nichoir à oiseau et je serais éventuellement intéressé par copier ta réalisation. Peux-tu faire un post dans la section projets terminés, lorsque ce sera fini, en expliquant ton projet, notamment l'alimentation du système ? Merci
Title: Re: Compteur d’impulsion avec envoi sur page web
Post by: rer67 on Sep 07, 2019, 10:11 pm
Avec grand plaisir.
A bientôt !
Title: Re: Compteur d’impulsion avec envoi sur page web
Post by: rer67 on Sep 08, 2019, 08:32 pm
Bonsoir.

En ajoutant :

// NETWORK: Static IP details...
IPAddress ip(192, 168, 11, 23);
IPAddress gateway(192, 168, 11, 1);
IPAddress subnet(255, 255, 255, 0);


// Static IP Setup Info Here...
WiFi.config(ip, gateway, subnet);


Sous les bibliothèques cela suffira-t-il à imposer l ip fix 11.23 à ma carte ?

Title: Re: Compteur d’impulsion avec envoi sur page web
Post by: lesept on Sep 08, 2019, 08:48 pm
Normalement oui, il faut s'assurer que tu mets les arguments du config dans le bon ordre (car c'est différent entre le shield pour uno et les esp).

Vérifie dans la bibliothèque WiFi de l'esp8266
Title: Re: Compteur d’impulsion avec envoi sur page web
Post by: lesept on Sep 08, 2019, 08:54 pm
Trouvé ici (https://github.com/esp8266/Arduino/blob/master/libraries/ESP8266WiFi/src/ESP8266WiFiSTA.h)
Code: [Select]

        //The argument order for ESP is not the same as for Arduino. However, there is compatibility code under the hood
        //to detect Arduino arg order, and handle it correctly. Be aware that the Arduino default value handling doesn't
        //work here (see Arduino docs for gway/subnet defaults). In other words: at least 3 args must always be given.
        bool config(IPAddress local_ip, IPAddress gateway, IPAddress subnet, IPAddress dns1 = (uint32_t)0x00000000, IPAddress dns2 = (uint32_t)0x00000000);

Donc c'est bon !
Title: Re: Compteur d’impulsion avec envoi sur page web
Post by: rer67 on Sep 08, 2019, 09:00 pm
Parfait.
Je teste demain.

Je n'ai pas trouvé sur le forum de Systeme pour alimenter la node avec une pile de sauvegarde par exemple comme sur une carré mère. Car en cas de coupure, le compteur est remis à zéro....
Peut on enregistrer sinon la valeur du compteur en dur qq part tt les heures par exemple ?
Title: Re: Compteur d’impulsion avec envoi sur page web
Post by: lesept on Sep 08, 2019, 09:18 pm
Oui il y a le système de fichiers internes, appelé SPIFFS. Tu crées un fichier dans lequel tu stockes ce que tu veux, par exemple les horaires de chaque passage.  Ce fichier est accessible pour ton PC via l'IDE arduino, voire aussi par ftp.

Un autre fichier peut contenir le nombre de passages total, mis à jour "au vol"...

Voir ce tuto (https://byfeel.info/utilisation-de-la-memoire-spiffs-sur-esp8266/)

Sinon, il y a l'EEPROM.
Title: Re: Compteur d’impulsion avec envoi sur page web
Post by: al1fch on Sep 08, 2019, 09:22 pm
Bonsoir

SPIFFS ou EEPROM ? ça dépend du type et  de la quantité de données  à mémoriser

L'émulation d'EEPROM (ESP8266 sous IDE Arduino) est simple à mettre en oeuvre.
Bien adaptée à la sauvegarde  directe de quelques variables sans mettre en service un système de fichiers comme SPIFFS.

(voir les exemples EEPROM_Read et EEPROM_Write pour ESP8266)
Title: Re: Compteur d’impulsion avec envoi sur page web
Post by: lesept on Sep 08, 2019, 09:25 pm
Tu devrais modifier le titre de ton premier message pour indiquer qu'il s'agit de la conception d'un nichoir connecté, ce qui permettra des recherches plus fructueuses à ceux qui voudraient faire ce genre de projet.
Title: Re: Conception d'un nichoir connecté !
Post by: rer67 on Sep 08, 2019, 10:00 pm
Tu devrais modifier le titre de ton premier message pour indiquer qu'il s'agit de la conception d'un nichoir connecté, ce qui permettra des recherches plus fructueuses à ceux qui voudraient faire ce genre de projet.
Ça c'est fait ! Lol.
Je vais regarder ce système d'enregistrement. JML 3n avait parlé également dans un autre post.
Je vais voir si je m'en sort pour à chaque fois ajouter la nouvelle valeur du compteur.
Ainsi en cas de coupure il reprendrait à la dernière valeur....
Title: Re: Conception d'un nichoir connecté !
Post by: rer67 on Sep 09, 2019, 08:39 pm
Salut.
La gestion de l'impasse fixe est OK ça ça roule.
Par contre l'utilisation de la mémoire SPIFFS c'est autre chose.
J'ai bien compris qu'on peut ecrire du texte voir des chiffres.... Mais de la à savoir reprendre cette valeur en cas de compteur retourné à 0 c'est une autre histoire ! Lol
Title: Re: Conception d'un nichoir connecté !
Post by: lesept on Sep 09, 2019, 10:15 pm
La SPIFFSest un système de gestion de fichiers,stockés dans une mémoire non volatile. Tu peux soit uploader des fichiers dans le SPIFFS depuis l'IDE Arduino,soit créer / effacer / lire / écrire dans / lister les fichiers depuis l'ESP8266.

Pour ton besoin, l'EEPROM suffit largement si tu veux juste stocker quelques valeurs et les relire au boot.

Par contre, si tu veux stocker des statistiques d'entrée / sortie du nichoir, alors la SPIFFS est faite pour ça. Tu crées un fichier qui conserve et met à jour le nombre de passages, et un autre plus gros qui stocke tout ce que tu veux conserver pour le lire plus tard.

Ça marche comme sous Windows : tu ouvres un fichier vide (en lui donnant un nom),s'il est vide c'est qu'il n'y a eu aucun passage ou aucune sauvegarde auparavant, sinon tu lis la valeur stockée et tu la met dans la variable qui compte les passages. Et le programme continue, donc ceci doit être fait dans le setup.

A chaque nouveau passage, tu peux par exemple effacer le fichier et le recréer en écrivant la nouvelle valeur dedans. Ça bien sûr c'est dans la loop.
Title: Re: Conception d'un nichoir connecté !
Post by: J-M-L on Sep 10, 2019, 03:39 am
Tiens je découvre ce super projet, je ne sais pas pourquoi je ne l'avais pas vu auparavant
Vous êtes entre de bonnes mais avec Lesept - j'ai pas trop de temps en ce moment mais je vais garder un oeil sur ce fil

Si vous pouviez détailler votre façon d'alimenter Le tout (POE pour les caméras j'imagine mais pour la parti arduino ?) et à titre de curiosité quelle webcam utilisez vous et comment est géré l'éclairage dans le nichoir ? Est-ce que la lumière ou bruits électroniques est un problème pour les oiseaux ?

Votre projet me rappelle ce post utilisant un RPI (https://www.framboise314.fr/une-webcam-pour-nichoir-a-base-de-raspberry-pi-2-pilotee-par-une-interface-web/)
Title: Re: Conception d'un nichoir connecté !
Post by: rer67 on Sep 10, 2019, 01:03 pm
Salut Messieurs !!
Je suis très content d'avoir retenu votre attention et de l'aide que vous m'apportez .

OUI ! tu as raison Lesept m'a très bien aiguillé pour mes demandes et guidé pour trouver les informations.
Je suis newbie dans le domaine de l'ARDUINO et en programmation..... Avec un peu de recherche on trouve parfois .... et parfois il faut un coup de main ....

D'ailleurs J-M-L j'ai lu et relu ton post sur " les techniques avancées" car je voulait initialement afficher le nombre de passage des oiseaux en live. Cependant avec un peu de réflexion et après élaboration de mon code j'ai laissé tombé l'affichage en temps réelle du nombre de passage. Cet affichage se régénérera toutes les 10 secondes, c'est déjà pas mal !

J-M-L, pour tes questions un peu plus techniques je te laisse jeter un oeuil sur ma page web et mon youtube:
- http://lesmesangesdujardin.viens.la/
- https://www.youtube.com/channel/UClVmYINOY72_4ydu8c8fRZg?view_as=subscriber

tu y trouveras pas mal d'infos .... la discution sur la nodeMCU n'est pas encore sur le web car c'est une innovation de cette année. ( je mettrais à jour prochainement )
L'alim de la nodeMCU et des barrières IR se fait en 5v via la sortie USB d'une des cameras IP alimentées en 12v via un POE 48v. Pour l'éclairage, tu trouvera tout sur mon site .....

Pour en revenir à mes moutons ... et répondre à Lesept, j'ai bien compris les 2 notions de mémoires disponible
C'est plutôt au niveau de la rédaction des lignes de code que ça bloque.. !
Pour cette année, je ne souhaite pas enregistrer de statistiques de passages et de températures, on verra cela l'année prochaine.
Par contre dans l'idéal il faudrait qu'à chaque incrémentation du compteur, la valeur de ce dernier s'enregistre  en dur dans un fichier et qu'à chaque reboot de la nodeMCU dans le setup soit chargé la valeur du compteur pour continuer à incrémenter ce même compteur
Au vu du nombre de réecriture dans la mémoire l'EEPROM n'est peut être pas approprié non ? d'autant que si par la suite j'ajoute des données en enregistrement ( temps .. etc ) il faudra tout refaire !

Merciiii !

Title: Re: Conception d'un nichoir connecté !
Post by: lesept on Sep 10, 2019, 04:57 pm
J'ai rarement utilisé l'EEPROM, mais je vais te dire ce que j'en sais.

Je crois qu'il y a un tuto sur le forum (par J-M-L ?) qui explique ça mieux...
L'EEPROM n'est pas un fichier ni un système de fichiers, c'est juste un espace mémoire non volatile. Ce qui est écrit dedans avant extinction se retrouve à l'allumage. Par contre, il y a un nombre maximum de cycles écriture / lecture avant que ça commence à foirer. Mais on parle de quelques centaines de milliers, donc tu as le temps de t'en servir...

Il y a une notion de "nombre magique" stocké au début de l'EEPROM. L'idée ici est de dire que lorsque tu lis à cet emplacement et que tu n'y trouves pas le nombre magique, ce n'est pas la peine d'aller plus loin : tu n'as rien sauvé dans l'EEPROM. Par contre, si tu le trouves, alors c'est que ce qui suit correspond à ce que tu as sauvé et que tu veux relire. C'est un indicateur de sauvegarde.

Donc, tu définis d'abord un nombre magique de ton choix, mettons 42...
Code: [Select]
#define MAGIC_NUMBER 42
Au setup, tu lis la première case de l'EEPROM et tu la compares à ce nombre : si ça correspond, alors tu peux lire la case suivante dans laquelle se trouve ce que tu as sauvé auparavant (le nombre de passages). Si ça ne correspond pas :
Tu écris le nombre magique à cet emplacement, et tu écris la valeur à sauver dans la case suivante.

Dans la loop, lors de l'incrémentation du nombre de passages, tu n'as qu'à écrire au bon emplacement la nouvelle valeur.

Ça pourrait donner ça. Dans l'en-tête :
Code: [Select]
#include <EEPROM.h>
#define MAGIC_NUMBER 42


Dans le setup
Code: [Select]
EEPROM.begin(3); // 3 octets : 1 pour le nombre magique, 2 pour le int à sauver
byte  value = EEPROM.read(0);
if (value == MAGIC_NUMBER) {
  valeur = EEPROM.read(1) * 256 + EEPROM.read(2);
} else {
  EEPROM.write(0, MAGIC_NUMBER);
  EEPROM.write(1, 0);
  EEPROM.write(2, 0); // Je suppose qu'on sauve 0 pour une première utilisation
  EEPROM.commit();  // pour finaliser l'écriture
}


Dans la loop, lorsque la valeur change :
Code: [Select]
  EEPROM.write (1,valeur); // valeur est supposé être un 'int' (2 octets)
  EEPROM.commit();


C'est sans garantie... Tu devrais tester ça dans un code à part pour valider le fonctionnement, avant de le mettre dans ton programme.
Title: Re: Conception d'un nichoir connecté !
Post by: dbrion06 on Sep 10, 2019, 07:15 pm
Code: [Select]
Excusez moi, mais je suis un peu étonné:

EEPROM.write, comme EEPROM.read, ne saurait, selon la doc
[url]https://www.arduino.cc/en/Reference/EEPROMWrite[/url],
 ne traiter qu'un octet à la fois:
le setup est donc correct (en tous cas, il ne m'a pas choqué)

mais,

 **si la doc est à jour***
il faudrait écrire

  EEPROM.write(1, uint8_t(valeur / 256) );
  EEPROM.write(2, uint8_t(valeur % 256)); // Je suppose qu'on sauve 0 pour une première utilisation
  EEPROM.commit();  [/code]

ou , encore mieux:
remplacer EEPROM.write  par EEPROM.update (regarde si ce qui est stocké dans l'EEPROM diffère de ce qui va être stocké; si ce n'est pas le cas, fait **effectivement** l'écriture, limitant le risque d'usure).

Sinon, le projet est très beau....
Title: Re: Conception d'un nichoir connecté !
Post by: al1fch on Sep 10, 2019, 09:36 pm
Bonsoir

Dans le cas des ESP8266 ou ESP32 il n'y a pas de véritable EEPROM intrégrée dans le SOC, il s'agit d'une émulation en mémoire Flash.
Le système de fichiers SPIFFS étant  lui aussi implanté en mémoire FLASH , du point de vue usure en fonction du nombre d'écritures cela revient  pratiquement au même.

la doc de l'extension ESP8266 pour Arduino décrit içi la librairie EEPROM :
https://arduino-esp8266.readthedocs.io/en/2.5.2/libraries.html#eeprom (https://arduino-esp8266.readthedocs.io/en/2.5.2/libraries.html#eeprom)

j'utilise l'EEPROM émulée sans notion de nombre magique, en me basant tout simplement sur les 3 exemples fournis.

la fonction EEPROM.Write écrit() effectivement un octet. Elle l'écrit dans un buffer et c'est EEPROM.commit() qui concrétise l'ecriture dans la zone de mémoire Flash attribuée à l'émulation d'EEPROM.
Fractionner les données  en octets c'est bien une contrainte de la librairie EEPROM
Title: Re: Conception d'un nichoir connecté !
Post by: rer67 on Sep 10, 2019, 09:51 pm
Code: [Select]
EEPROM.write (1,valeur); // valeur est supposé être un 'int' (2 octets)
Ou
Code: [Select]

  EEPROM.write(1, uint8_t(valeur / 256) );
  EEPROM.write(2, uint8_t(valeur % 256)); // Je suppose qu'on sauve 0 pour une première utilisation

Je ne comprends pas comment avec l'un de ces 2 codes il arrive à codifier mon nombre du compteur . 999 par exemple comment le sépare til ?
999/256=3.90
donc dans write1' il met 999 ou 3 ?
Mais que met il dans write2 alors ?
....
Title: Re: Conception d'un nichoir connecté !
Post by: lesept on Sep 10, 2019, 10:06 pm
Il mettra 231 le reste de la division de 999 par 256.
Je suis d'accord avec ce que vous dites sur l'écriture d'un octet à la fois, mais j'ai vu dans un exemple l'écriture d'un int en une seule fois. Je me suis dit que la bibliothèque était bien faite et que le write tenait compte de la longueur de son argument. Mais il vaut mieux assurer et faire comme indiqué plus haut, en deux fois.
Title: Re: Conception d'un nichoir connecté !
Post by: al1fch on Sep 10, 2019, 10:19 pm
Il s'agit içi de division entière  ou division euclidienne
/ donne le quotient , sauvegardé à l'adresse 1
% donne le reste, sauvegardé à l'adresse 2

lesept , il existe il me semble une ou plusieurs 'surcouche' pour la librairie EEPROM, ces librairies additionnelles gèrent des types de données autre que uint8_t.
Title: Re: Conception d'un nichoir connecté !
Post by: lesept on Sep 10, 2019, 10:43 pm
Ça doit être ça en effet, l'exemple que j'ai vu venait du github d'une personne (igrrr je crois, un cador de l'esp32) et pas de la bibliothèque.
Title: Re: Conception d'un nichoir connecté !
Post by: J-M-L on Sep 11, 2019, 08:06 am
Oui dans la librairie mentionnée ci dessus pour ESP, la signature de la fonction write() (https://github.com/esp8266/Arduino/blob/d8531cb2c4aec39d917fed8d642afe86af59e1c6/libraries/EEPROM/EEPROM.h#L36) ne gère qu'un seul octet, pas de int mais elle offre aussi un get/put par template qui vont gérer des tailles différentes.
Ne pas oublier d'appeler EEPROM.commit() ou  EEPROM.end() pour effectivement valider la sauvegarde car il y a un buffer intermédiaire de SPI_FLASH_SEC_SIZE soit 4Ko (https://github.com/mattcallow/esp8266-sdk/blob/add9edc5bc8cf2ee4b884e62d2b6b06da61dc118/esp_iot_sdk/include/spi_flash.h#L24). Il est nécessaire pour garder une image en RAM de la soi disant EEPROM puisque l'on stocke en flash et que l'effacement se fait par secteur et non par octets.
Title: Re: Conception d'un nichoir connecté !
Post by: al1fch on Sep 11, 2019, 08:37 am
Le buffer permet également , il me semble, d'éviter les effacements ou écritutes inutiles
C'est le nombre de cycles d'effacement qui est limité.
Toutes les écritures en mémoire flash ne nécessitent pas, en principe,  d'effacement.

Des mémoires particulières , FRAM,  assurent aujourd'hui de manière efficace la fonction de RAM non volatile
Voir par exemple ce petit module d'Adafruit FRAM SPI 8ko (existe également en I2C)
https://www.adafruit.com/product/1897 (https://www.adafruit.com/product/1897)
https://learn.adafruit.com/adafruit-spi-fram-breakout (https://learn.adafruit.com/adafruit-spi-fram-breakout)

Title: Re: Conception d'un nichoir connecté !
Post by: dbrion06 on Sep 11, 2019, 10:04 am
"Le buffer permet également , il me semble, d'éviter les effacements ou écritutes inutiles"
Si on fait
ecrire 1
ecrire 133
ecrire 2
ecrire 1
commit
la RAM verra 4 écritures; seule la dernière sera validée (donc commit force des ecritures inutiles, s'il est trop fréquent et perdra des données s'il est trop rare. Un commit par heure mène à (au maximum: il ne réécrit pas le même char) 8760 écritures par an (pas en 2020).
Title: Re: Conception d'un nichoir connecté !
Post by: J-M-L on Sep 11, 2019, 10:23 am
"Le buffer permet également , il me semble, d'éviter les effacements ou écritutes inutiles"
Si on fait
ecrire 1
ecrire 133
ecrire 2
ecrire 1
commit
la RAM verra 4 écritures; seule la dernière sera validée (donc commit force des ecritures inutiles, s'il est trop fréquent et perdra des données s'il est trop rare. Un commit par heure mène à (au maximum: il ne réécrit pas le même char) 8760 écritures par an (pas en 2020).
oui c'est le principe du cache. La question c'est plus quel est le besoin, si c'est pour conserver en RAM les données, pas la peine de s'ennuyer, si c'est vraiment pour les sauver pour reprise après panne ou reboot intempestif, alors il faut une politique de gestion de ces événements et cela passe par la mise en place d'une détection de ces cas (perte d'alimentation, appui sur reset, ...) et forcer l'écriture à ce moment là.

Ne pas oublier que la Flash est 10x moins robuste que l'EEPROM à l'écriture avec 10000 cycles environ donc il ne faut pas le faire comme une brute une fois par seconde :) mais à une fois (si différent) par heure ça donne un peu plus d'un an de vie à ces pages flash et donc à votre solution.  --> En implémentant une bonne stratégie de "wear leveling" et en utilisant plusieurs pages de SPIFFs, on peut étendre cela très significativement (vu qu'on a quand même pas mal d'espace de stockage) mais faut passer par une approche alternative à la librairie EEPROM.
En traitant la perte d'alim Avec une interruption et un Condo (cf le blog de ritonduino) on peut sans doute sauver qu'en cas d'urgence
Title: Re: Conception d'un nichoir connecté !
Post by: al1fch on Sep 11, 2019, 10:30 am
Quote
En traitant la perte d'alim Avec une interruption et un Condo (cf le blog de ritonduino) on peut sans doute sauver qu'en cas d'urgence
C'est une excellente option qui ne nécessite pas un gros apport matériel 'diode , condensateur et pont diviseur)

Voici le lien sur le blog de ritonduino
https://riton-duino.blogspot.com/2019/03/arduino-sauvegarde-de-donnees-en-eeprom.html (https://riton-duino.blogspot.com/2019/03/arduino-sauvegarde-de-donnees-en-eeprom.html)

Endurance Flash : Concernant le nombre garanti de cycles d'effacement en mémoire Flash je trouve   le nombre 100.000 et non 10.000 pour les puces Winbond 25Q32 très souvent utilisées dans les modules ESP12 ou autres (schéma içi (https://www.esp8266.com/wiki/lib/exe/fetch.php?media=schematic_esp-12e.png))
(https://forum.arduino.cc/index.php?action=dlattach;topic=628501.0;attach=324010)

L'endurance  dépend en effet de la référence de la mémoire Flash SPI (SPIFFS et EEPROM ne sont pas émulés dans la toute petite mémoire Flash interne des ESP8266 mais dans la mémoire Flash SPI externe qui est nécessairement associée aux soc ESP)

Avec 100.000 cycles garantis on peut 'voir venir'  même avec un commit toutes les 15'......
Title: Re: Conception d'un nichoir connecté !
Post by: dbrion06 on Sep 11, 2019, 11:03 am
"Ne pas oublier que la Flash est 10x moins robuste que l'EEPROM à l'écriture avec 10000 cycles"
C'est pour ça que j'ai donné un nombre d'écriture par année; j'étais un peu inquiet ... (êtes vous sûr que vous n'avez pas perdu un tout petit zero: bc me donne 1E5 écritures par an, à 20% prés)

Etes vous bien sûr de ce chiffre pour les esp? (je ne le nie pas pour les avr-arduini... à un minuscule zero près)

"En traitant la perte d'alim Avec une interruption et un Condo "
Est ce que le condensateur de sauvegarde est le même pour les avr que pour les esp?

Un changement de carte tous les ans risque de perturber les mésanges, qui ne pourront pas comprendre que c'est justifié par l'usure de la Flash (elles pépieront que, en plus c'est cher)

Je pensais à l'idée suivante (les nombres magiques, à part un joli adjectif, ne corrigent rien:
la donnée à stocker est
Code: [Select]

<longueur><donnée><longueur><longueurDuChampSuivant>

Je mets (c'est l'idée des enregistrements binaire Fortran) longueur (la taille du champ courant)  en tête et en queue, pour mettre un peu de redondance (pas de magie roulant ses mécaniques)...

au moment du stockage, la longueur du champ suivant est mise à zero (il n'y a pas de champ suivant)
Le setup aura à se promener jusqu'à ce qu'il trouve une longueur nulle (c'est là qu'il faudra écrire), et l'enregistrement valide sera le dernier lu (le setup ne s'éxecute qu'une fois).
Si la longueur de chaque champ+3 octets est inferieure à 1/10 iéme la longueur de la flash, la flash durera 10 fois plus longtemps (et sera exploitée au maximum)
Title: Re: Conception d'un nichoir connecté !
Post by: al1fch on Sep 11, 2019, 11:09 am
Quote
Est ce que le condensateur de sauvegarde est le même pour les avr que pour les esp?
Non et la page de ritonduino expose le mode de détermination de la valeur de capacité.
C.dV = I.dt...... (d représentant içi delta que j'ai la flemme de faire apparaître...)

Pour l'endurance de la mémoire flash qui nous concerne (Flash SPI 25Q32)  c'est bien 100.000 cycles mini (voir au dessus)
Title: Re: Conception d'un nichoir connecté !
Post by: lesept on Sep 11, 2019, 11:12 am
Attention, l'émulation EEPROM par la flash demande de réserver un nombre de champs à l'avance via
Code: [Select]
EEPROM.begin(nombre_de_champs);
Il faudra l'estimer a priori, ce qui revient peu ou prou à estimer la durée de vie de l'appli.
Title: Re: Conception d'un nichoir connecté !
Post by: al1fch on Sep 11, 2019, 11:21 am
Quote
The W25Q32BVarray is organized into 16,384programmable pages of 256-bytes each. Up to 256 bytes can be programmed at a time. Pages can be erased in groups of 16 (4KB sector erase), groups of 128 (32KB block erase), groups of 256 (64KB block erase) or the entire chip (chip erase). The W25Q32BVhas 1,024erasable sectors and 64erasable blocks respectively. The small 4KB sectors allow for greater flexibility in applications that require data and parameter storage
L'effacement dans la mémoire Flash SPI (25Q32) se fait par secteurs de 4Koctets

Il faut effacer un secteur entier dès lors que dans l'un des octets d'un commit(),  faire repasser un seul bit de 0 à 1, autant dire sque quasiment toute écriture nécessite un neffacement préalable du secteur.

Ces effacements qui mettent en oeuvre une tension élevée à l'intérieur de la puce sont la cause du vieillisement

Ajuster au plus juste la taille de Flash destinée à émuler une EEPROM n'a pas d'influence sur la longévité qui dépend du nombre cumulé d'effacement par secteurs


Title: Re: Conception d'un nichoir connecté !
Post by: dbrion06 on Sep 11, 2019, 11:30 am
"Avec 100.000 cycles garantis on peut 'voir venir'  même avec un commit toutes les 15'......"

Si on doit déranger des oiseaux nicheurs tous les ans ou tous les trois mois, pour mettre à la retraite une carte, apprecieront ils?

C'est pour ça que j'opterais pour de l'uniformisation de l'usure  ("wear levelling", dans le jargon de la tarteup nation ) par logiciel.
Title: Re: Conception d'un nichoir connecté !
Post by: al1fch on Sep 11, 2019, 11:35 am
Un 'commit' toutes les 15' ça permet d'espérer près de 3 ans de fonctionnement..

Oui pour le "wear leveling", répartition ou uniformisation d'usure,  quand ça 'vaut le coup'... affaire d'appréciation au cas par cas.

D'ailleurs SPIFFS en implante une forme, bon point pour lui.
https://github.com/pellepl/spiffs (https://github.com/pellepl/spiffs)
Title: Re: Conception d'un nichoir connecté !
Post by: dbrion06 on Sep 11, 2019, 11:46 am
L'avantage d'avoir un algorithme anti usure est qu'il pourrait bénéficier aux avr-arduini (spiffs est trop complexe pour une extraction):
sur un mega2560, je n'envisage d'occuper que 1% de l'EEPROM (et toujours au même endroit, ce qui n'est pas bon, magic number ou pas). Mais c'est plus général que le sujet traité ici (j'ai été très content des essais que j'ai faits, incomplets faute de temps, sur esp...)
Title: Re: Conception d'un nichoir connecté !
Post by: al1fch on Sep 11, 2019, 11:49 am
peut on envisager un algorithme d'égalisation usure générique , indépendant de la structure page/secteur des diverses Flash ? Il me semble qu'il faut gérer les secteurs et par conséquent tenir compte de leur taille
Title: Re: Conception d'un nichoir connecté !
Post by: dbrion06 on Sep 11, 2019, 11:59 am
Oui, on peut :

mais , sur un esp, je profiterais du spiffs, plutôt que de lui chiper de l'espace dédié

sur un avr, s'il a une carte SD, j'utiliserais ladite carte SD (une entrée de fichier "ne mange pas de pain")

en post 80, j'ai envisagé... des records binaires fortran, où on peut detecter la fin du fichier: l'information utile est le dernier record pas vide, et on écrit après la fin du "fichier", garantissant une écriture uniforme si les données de configuration ne sont pas trop grosses ... mais je n'ai jamais testé, faute de besoin criant (pas de mésanges à gérer) .
Title: Re: Conception d'un nichoir connecté !
Post by: J-M-L on Sep 11, 2019, 02:27 pm
Endurance Flash : Concernant le nombre garanti de cycles d'effacement en mémoire Flash je trouve   le nombre 100.000 et non 10.000 pour les puces Winbond 25Q32 très souvent utilisées dans les modules ESP12 ou autres
Ben voilà, j'ai appris quelque chose aujourd'hui. j'étais jamais allé voir et j'avais bêtement appliqué l'information relative au Arduino courants (UNO,...) directement à l'ESP sans vérifier.. (pas très scientifique !)

Je me coucherai plus savant ce soir :)

Title: Re: Conception d'un nichoir connecté !
Post by: rer67 on Sep 11, 2019, 09:22 pm
Bonsoir.
Eh bien que de lecture ce soir.. A mon retour du boulot !
Le sujet a ses détracteurs et tout le monde a appris qq chose....
Pour ma part je vais tester ce week end la version du post 68 avec les recommandations du post 69 et je verrais bien quand les enregistrements ne se feront plus.
J'ai très bien apprécié le montage condo diode. L'approche est géniale mais un peu trop compliqué à calculer pour mon esp.
Merci à vous tous pour ce partage.

Ps dans mon cas il s'agit effectivement d'enregistrer la valeur du compteur pour que dans le cas d'une coupure de l'alimentation de mes caméras la valeur du compteur ne soit pas perdue et qu'au redémarrage cette valeur soit rechargée. C'est pour cela que je trouve le coup de la diode condo génial..... Bref je l'ai déjà dit.

Merci.
Title: Re: Conception d'un nichoir connecté !
Post by: rer67 on Sep 15, 2019, 02:24 pm
Bonjour,

J'ai réussi a travailler avec l'EEPROM !!
le nombre d'entrée se sauvegarde bien (a chaque fois que 10 oiseaux sont passés)
J'ai également ajouté un reset EEPROM sur ma page de serveur !


Par contre j'ai un gros soucis : LA BARRIERE IR EXTERIEURE !!!

En intérieur, la barrière fonction très bien, même avec l'éclairage LED intérieur allumé. Par contre en extérieur, la barrière IR ne fonctionne pas à cause de la lumière du jour. Ma barrière n'est pas modulée !

je voudrais donc ajouter un code pour générer du 38khz sur une led IR avec une résistance de 100ohm sur D3 (GPIO 00) de ma nodeMCU. et récupérer le signal via une LED 38KHZ que j'ai déjà.

Je ne trouve pas de code qui fonctionne sur ma nodeMCU pour générer le 38Khz.
j'ai trouvé cela :
Code: [Select]
#include <IRremote.h>

#define PIN_IR 3
#define PIN_DETECT 2
#define PIN_STATUS 13

IRsend irsend;
void setup()
{
  pinMode (PIN_DETECT, INPUT);
  pinMode (PIN_STATUS, OUTPUT);
  irsend.enableIROut (38);
  irsend.mark (0);
}

boucle vide () {
  digitalWrite (PIN_STATUS,! digitalRead (PIN_DETECT));
}


mais ne passe pas à la compilation, j'ai donc chargé la bibliothèque "IRremoteESP8266.h", la çà passe a la compilation mais pas de signal à la LED.

pourriez vous m'aiguiller ?
merciii


Title: Re: Conception d'un nichoir connecté ! soucis de LED IR modulé !
Post by: J-M-L on Sep 15, 2019, 02:38 pm
avez vous envisagé de tester les modules pré-construits de détecteur d'obstacle à infra-rouges?
(https://forum.arduino.cc/index.php?action=dlattach;topic=628501.0;attach=324540)

ils font à la fois émetteur récepteur et la "distance" de détection est réglable par un petit potentiomètre

5PCS IR Infrarouge Obstacle Avoidance (https://www.ebay.fr/itm/5pcs-IR-Infrared-Obstacle-Avoidance-Sensor-Module-for-Arduino-Smart-Car-Robot-D5/293202973473)  -> vous en avez 5 pour moins d'un 1,5€
Title: Re: Conception d'un nichoir connecté ! soucis de LED IR modulé !
Post by: rer67 on Sep 15, 2019, 03:01 pm
avez vous envisagé de tester les modules pré-construits de détecteur d'obstacle à infra-rouges?
(https://forum.arduino.cc/index.php?action=dlattach;topic=628501.0;attach=324540)

ils font à la fois émetteur récepteur et la "distance" de détection est réglable par un petit potentiomètre

5PCS IR Infrarouge Obstacle Avoidance (https://www.ebay.fr/itm/5pcs-IR-Infrared-Obstacle-Avoidance-Sensor-Module-for-Arduino-Smart-Car-Robot-D5/293202973473)  -> vous en avez 5 pour moins d'un 1,5€
salut JML !

oui, j'ai essaye exactement ce modele + 2-3 autres mais aucun n'est modulé et donc ne fonctionne pas à la lumière du jour .... !

il faut que j'utilise une barrière modulée ....
tu peux m'aiguiller ?
Title: Re: Conception d'un nichoir connecté ! soucis de LED IR modulé !
Post by: al1fch on Sep 15, 2019, 03:16 pm
Bonjour

Quote
je voudrais donc ajouter un code pour générer du 38khz sur une led IR avec une résistance de 100ohm sur D3 (GPIO 00) de ma nodeMCU. et récupérer le signal via une LED 38KHZ que j'ai déjà.
Essayez (avec un ESP8266 pour lequel on peut définir la fréquence du PWM)
Code: [Select]
analogWriteFreq(38000);
analogWrite(D3, 200);

Ajustez la fréquence demandée en fonction de la fréquence réelle obtenue
J'ai eu ça (pin D2 d'un Wemos D1 Mini)
(sur mon exemplaire on plafonne à 40kHz en sortie)

(https://forum.arduino.cc/index.php?action=dlattach;topic=628501.0;attach=324542)
Title: Re: Conception d'un nichoir connecté ! soucis de LED IR modulé !
Post by: rer67 on Sep 15, 2019, 05:47 pm
re,

J'ai mis le code suivant :
Code: [Select]
void setup() {
  // put your setup code here, to run once:
pinMode(D3, OUTPUT);
Serial.begin(9600);
}

void loop() {
  // put your main code here, to run repeatedly:
analogWriteFreq(38000);
analogWrite(D3, 200);


}


Le code fonctionne, cependant :

A la sortie de ma led réceptrice le 0V reste quelques ms .... puis le 3v reviens.
Je pense qu'en fait il faut que j'envoie des "salves" de trames à 38Mhz non ? pour que la sortie de la led réceptrice reste toujours à 0V. PEut-on changer le code ainsi ?

Merci
Title: Re: Conception d'un nichoir connecté ! soucis de LED IR modulé !
Post by: J-M-L on Sep 15, 2019, 06:26 pm
oui, j'ai essaye exactement ce modele + 2-3 autres mais aucun n'est modulé et donc ne fonctionne pas à la lumière du jour .... !
La modulation est bien sûr une exploration possible, mais avez vous simplement essayé de mettre les 2 diodes dans un petit bout de tuyau pour éviter l'exposition directe au soleil ?

Il y'a longtemps j'avais eu un souci similaire avec un petit robot pour l'extérieur et un simple cache (je crois que j'avais mis de la gaine thermo autour de la carte débordant sur un petit bout de tuyau pvc pour solidariser le tout et mon problème de jour avait été réglé.

Si vous montez cela un peu en diagonale au dessus de l'entrée (donc en pointant vers le sol) la luminosité ambiante sera encore moindre

À voir
Title: Re: Conception d'un nichoir connecté ! soucis de LED IR modulé !
Post by: al1fch on Sep 15, 2019, 07:03 pm
Faisceau IR modulé : Il faudrait en savoir plus sur le recepteur infrarouge utilisé, celui qui attend un signal modulé (référence ? TSOP.xxxx?)
c'est plus qu'une photodiode, il y a également un démodulateur inrégré
(pas évident qu'il faille lui envoyer des salves et non un signal 38kHz permanent)

S'il faut moduler le signal 38KHz (salves) et si des salves de 2,5mS toutes les 20mS sont acceptées par le récepteur IR , Il y a une piste 'opportuniste' à tenter :

-signal carré(porteuse)  38KHz par AnalogWrite sur une sortie
-signal rectangulaire (signal modulant) 50Hz, salves de 2,5ms, par Servo.write sur une autre sortie
+Combiner les deux signaux  par exemple en mettant la del  IR et sa résistance série entre les deux sorties (courant compatible avec les intensités maximlales entrantes et sortantes d'une pin)

Exemple de code à tester :
Code: [Select]
#include <Servo.h>
#define porteuse D2
#define ServoPin  D3

Servo myservo;

void setup() {
  pinMode(porteuse, OUTPUT);

  // en D2 : signal carré de fréquence 38kHz
  analogWriteFreq(38000);
  analogWrite(porteuse, 512); // signal carré 38KHz en D2

  // en D3 : signal rectangulaire 50Hz, état haut 2,5ms
  myservo.attach(ServoPin);
  myservo.write(180);  
}

void loop() {
}
Title: Re: Conception d'un nichoir connecté ! soucis de LED IR modulé !
Post by: rer67 on Sep 15, 2019, 08:38 pm
bonsoir,

la led réceptrice est une VS1838.

j'ai lu sur un autre forum anglais qu'il serait intéressant d'utiliser une led de réception : TSSP58038 qui elle peut recevoir en continue du signal 38Khz ....

Est- ce plus facile avec cette LED ?
lien datasheet : https://docs-emea.rs-online.com/webdocs/1724/0900766b8172451c.pdf
Title: Re: Conception d'un nichoir connecté ! soucis de LED IR modulé !
Post by: al1fch on Sep 15, 2019, 08:59 pm
un point de vocabulaire : une LED , DEL en français emet de la lumière

pour recevoir il  faut une photodiode  (les LEDS , optimisées  pour l'émission font de  mauvais récepteurs)

les VS1838  ,TSOPxx, TSSPxxx ont une structure de ce type :
photodiode + amplification + filtre de bande +circuit de démodulation + circuit de sortie
(https://forum.arduino.cc/index.php?action=dlattach;topic=628501.0;attach=324573)
Il faut regarder de près les docs pour tenter d'en déduire le comportement en réception d'un signal 38kHz continu

La notice du récepteur TSSP58038 (https://www.vishay.com/docs/82479/tssp58038.pdf) évoque des salves (bursts)
La figure 1 donne une valeur minimale de tpi (durée d'une salve), mais pas de valeur maximale
Le composant a été testé et spécifié avec des salves de 600µs(fig 3)
On n'en sait pas plus il me semble
Title: Re: Conception d'un nichoir connecté ! soucis de LED IR modulé !
Post by: rer67 on Sep 15, 2019, 09:14 pm
OK. Je prends note du vocabulaire.
Ma photodiode vs1838  ne permet pas de réception continue à priori.
Est-ce que le photodiode tssp4038 pourrait fonctionner ?  Si tu veux bien regarder la datashet stp ? Merci

Mon but est un peu comme celui ci mais pas avec la même exploitation du signal :
https://community.home-assistant.io/t/occupancy-detection-and-people-counting-sensor/19143

Merci de ta patience !
Title: Re: Conception d'un nichoir connecté ! soucis de LED IR modulé !
Post by: al1fch on Sep 15, 2019, 09:26 pm
Tout comme le TSSP8038 -(voir au dessus) la doc du TSSP4038 évoque des salves mais ne donne pas la durée maximale d'une salve.... donc rien me parait permettre de conclure sur le comportement en 'permanent' tant que l'essai n'a pas  été fait

Dans l'exemple cité l'emetteur utilise une librairie, IRremote, qui produit des salves, le récepteur IR n'y est donc pas exposé à un signal 38kHz permanent

Pour info : LIbrairie IRremote pour ESP8266
https://github.com/crankyoldgit/IRremoteESP8266 (https://github.com/crankyoldgit/IRremoteESP8266)
Title: Re: Conception d'un nichoir connecté ! soucis de LED IR modulé !
Post by: rer67 on Sep 15, 2019, 09:41 pm
Oui. Cette histoire de bibliothèque que l'ai vu mais elle n'est pas compatible avec l'esp8266 et en mettant comme bibliothèque irremoteesp8266.h la fonction irsend n'est pas reconnue.
Tu aurais une idée pour faire cette émission en salves avec l'esp8266 ?
Title: Re: Conception d'un nichoir connecté ! soucis de LED IR modulé !
Post by: al1fch on Sep 15, 2019, 09:55 pm
Quote
Tu aurais une idée pour faire cette émission en salves avec l'esp8266 ?
Deux :

1) j'ai proposé plus haut (#97) une bidouille combinant AnalogWrite et Servo
-AnalogWrite pour le 38kHz (c'est possible avec l'ESP8266)
-Servo pour l'enveloppe des salves (une salve de 2,5ms toutes les 20ms)
....le tout lancé une fois pour toutes dans le Setup()

2) j'ai proposé ci dessus (#101) une version de la librairie IRremote adaptée à l'ESP8266 (lien corrigé)
Title: Re: Conception d'un nichoir connecté ! soucis de LED IR modulé !
Post by: rer67 on Sep 15, 2019, 10:06 pm
OK.
J'essaierais demain la version du post. 97
Avec la bibliothèque je ne comprends pas comment lancer l'émission ( code à mettre dans mon sketch)!......
Title: Re: Conception d'un nichoir connecté ! soucis de LED IR modulé !
Post by: al1fch on Sep 15, 2019, 10:09 pm
Quote
Avec la bibliothèque je ne comprends pas comment lancer l'émission ( code à mettre dans mon sketch)!......
S'inspirer du code de l'émetteur dans l'exemple cité au message #100 :

un IRsend quelquechose pour envoyer une salve  et immédiatement après lire l'état de sortie du réepteur IR

Sans modulation : pourquoi ne pas tester la proposition de J-M-L au message #96 ?
Title: Re: Conception d'un nichoir connecté ! soucis de LED IR modulé !
Post by: Artouste on Sep 15, 2019, 10:10 pm
Deux :

1) j'ai proposé plus haut (#97) une bidouille combinant AnalogWrite et Serv
-AnalogWrite pour le 38kHz (c'est possible avec l'ESP8266)
-Servo pour l'enveloppe des salves
....le tout lancé une fois pour toutes dans le Setup()

2) j'ai proposé ci dessus (#101) une version de la librairie IRremote adaptée à l'ESP8266 (lien corrigé)
Bonsoir al1
Je pense qu'il serait bon déjà de voir/regarder ce que donne en sortie   le "recepteur/demodulateur" TSSOP38  utilisé avec une rupture (simulation entrée des piafs   :smiley-mr-green: )de l'illumination continue à 38KHz" généré simplement par l'esp
Si de  l'info en sortie du TTSOP  est  visible/exploitable , le probléme est/sera  quasi réglé
Title: Re: Conception d'un nichoir connecté ! soucis de LED IR modulé !
Post by: al1fch on Sep 15, 2019, 10:18 pm
Oui , Artouste

Si j'avais sous la main un de ces TSSP ou TSOP c'est ce que je testerai en premier = réaction à un signal 38kHz permanent. Puisque la doc ne donne pas de durée maximale de salve on peut espérer que c'est OK avec une salve infinie !!

Ensuite seulement ,en cas d'échec,  je passerai à la modulation du 38kHz
Title: Re: Conception d'un nichoir connecté ! soucis de LED IR modulé !
Post by: Artouste on Sep 15, 2019, 10:27 pm
Oui , Artouste

Si j'avais sous la main un de ces TSSP ou TSOP c'est ce que je testerai en premier = réaction à un signal 38kHz permanent. Puisque la doc ne donne pas de durée maximale de salve on peut espérer que c'est OK avec une salve infinie !!

Ensuite seulement ,en cas d'échec,  je passerai à la modulation du 38kHz
J'en ai , mais pas immédiatement sous la main avant qq jours
Title: Re: Conception d'un nichoir connecté ! soucis de LED IR modulé !
Post by: kamill on Sep 16, 2019, 12:37 am
Bonjour,

J'ai déjà utilisé ce détecteur d'obstacles avec IR modulé et je n'ai pas eu de problème avec le fonctionnement continu. Par  contre je ne sais pas la référence du récepteur utilisé.
(https://forum.arduino.cc/index.php?action=dlattach;topic=628501.0;attach=324596) (https://fr.aliexpress.com/item/32827856277.html?spm=a2g0s.9042311.0.0.27426c37rIvdO2)
Par contre j'avais essayé un détecteur sans modulation tel que celui présenté au post #92 (https://forum.arduino.cc/index.php?topic=628501.msg4307391#msg4307391) et c'était inexploitable à cause de la lumière ambiante.
Title: Re: Conception d'un nichoir connecté ! soucis de LED IR modulé !
Post by: J-M-L on Sep 16, 2019, 08:07 am
Oui kamill - comme je le disais j'ai aussi rencontré le problème de lumière directe sur le capteur en extérieur mais en enfilant le système dans un petit tube de protection pour moi ça avait réglé le problème (c'était installé sous un petit robot donc pas forcément la même exposition à la lumière)

je ne crois pas qu'il ait de modulation embarquée  (ou alors je m'étais fait fourguer une pâle copie chinoise - juste avec un comparateur) mais la possibilité de régler la puissance de l'IR séparément du seuil de détection

Celui que vous montrez dans l'image ci dessus ressemble à un « KS-051 IR » ou « HW-488 » et il me semble que la petite puce qu'on voit sur votre image est un NE555, ce qui serait indicatif de modulation possible (le 555 offrant si je me souviens bien un mode multivibrateur monostable et astable)... à verifier
Title: Re: Conception d'un nichoir connecté ! soucis de LED IR modulé !
Post by: kamill on Sep 16, 2019, 08:27 am
Oui, je confirme il y a 555 qui fait la modulation (on peut ajuster la fréquence avec un potentiomètre).
Title: Re: Conception d'un nichoir connecté ! soucis de LED IR modulé !
Post by: al1fch on Sep 16, 2019, 08:40 am
Bonjour
Ce module parait intéressant.
Voici le schéma d'un module voisin , le KY-032
http://irsensor.wizecode.com/ (http://irsensor.wizecode.com/)
Le code proposé travaille par salves.

le récepteur IR étant incorporé il faudrait juste ajouter un réflecteur ....ou dessouder et déporter la DEl IR
Title: Re: Conception d'un nichoir connecté ! soucis de LED IR modulé !
Post by: kamill on Sep 16, 2019, 09:15 am
Voici le schéma d'un module voisin , le KY-032
Ce n'est pas un module voisin, c'est exactement le même. C'est intéressant car à l'époque j'avais cherché un schéma et n'en avait pas trouvé
Sur la carte il y a un cavalier qui permet de fonctionner en mode continu ou avec une émission pilotée par le micro. C'est utile si on veut limiter la consommation.
Title: Re: Conception d'un nichoir connecté ! soucis de LED IR modulé !
Post by: J-M-L on Sep 16, 2019, 09:36 am
interessant de lire dans l'article référencé par al1fch (http://irsensor.wizecode.com) que même pour ce module au final c'est mieux donc si on protège plus le système de la lumière directe.
Quote
On most versions of this device, the Infra Red (IR) LED is already covered with a small piece of black shrink tubing; but I find that additional optical shielding is required.  A small cardboard tube commonly used as packing material will work satisfactorily, as will a variety of other materials.
j'étais arrivé au même bidouillage avec les autres systèmes sans NE555
Title: Re: Conception d'un nichoir connecté ! soucis de LED IR modulé !
Post by: kamill on Sep 16, 2019, 10:35 am
Oui, dans tous les cas il faut essayer au mieux de protéger de la lumière parasite.
Title: Re: Conception d'un nichoir connecté ! soucis de LED IR modulé !
Post by: al1fch on Sep 16, 2019, 10:41 am
Oui, aider le récepteur IR en éliminant en amont tout ce qui peut être éliminé !

Le schéma du récepteur HS0038B montre que l'étage de Contrôle Automatique de Gain est placé  en amont du filtre Passe Bande.
Le CAG recoit donc le résultat électrique de la totalité du rayonnement reçu et il vaut mieux lui laisser 'du jeu' en évitant de le saturer par un fort rayonnement IR solaire.
 Ceci  parait expliquer ce qui a été  constaté.
(https://forum.arduino.cc/index.php?action=dlattach;topic=628501.0;attach=324628)

Title: Re: Conception d'un nichoir connecté ! soucis de LED IR modulé !
Post by: rer67 on Sep 16, 2019, 01:01 pm
Re bonjour à tous !!
merci de vos remarques et échanges....

mon plan d'action dans les prochains jours :


- essayer le code de @al1fch du post 97 : essayé ce matin : sans résultat probants

- essayer de protéger tout simplement le récepteur IR que j'ai afin qu'il ne soit pas affecté par la lumière ambiante ( tube à l'entre de la LED réceptrice ), suivant les conseils de @J-M-L

- essayer comme le propose @Artouste Le TSOP4038 et TSSP4038 et regarder la forme du signal de sortie ( je les reçoit fin de semaine . Impulsion donnée par le code :
Code: [Select]
analogWriteFreq(38000);
analogWrite(D3, 200);

 (au fait question : le "200" sert à quoi dans cette commande ? un intensité, une durée ?)

- essayer le KY-032 comme le propose @kamill, je l'ai commandé ce matin.

J'espère vraiment pouvoir trouver une solution pour cette barrière IR extérieure car sinon toute ma logique de comptage tombe à l'eau !!

Merci à vous !

Title: Re: Conception d'un nichoir connecté ! soucis de LED IR modulé !
Post by: al1fch on Sep 16, 2019, 01:28 pm
Bonjour

Quote
essayer le code de @al1fch du post 97 : essayé ce matin : sans résultat probants
sans matériel je n'ai pas testé... j'aurai fait le test en mettant la sortie Servo côté anode de la del IR et la sortie AnalogWrite côté cathode , avec bien entendu une résistance en série . signal 38kHz carré donc 512 dans AnalogWrite()

Quote
(au fait question : le "200" sert à quoi dans cette commande ? un intensité, une durée ?)
le second parametre d'AnalogWrite définit indirectement le rapport cyclique sachant que sur un ESP8266 la valeur maximale de ce parametre est 1023
donc 200 donne à peu près 20%  et 512 à peu près 50% soit un signal carré
Title: Re: Conception d'un nichoir connecté ! soucis de LED IR modulé !
Post by: rer67 on Sep 16, 2019, 02:16 pm
donc dans ce cas :
Code: [Select]
analogWriteFreq(38000);
analogWrite(D3, 200);

le signal n'est pas carré ?
pour un signal carré ce serait
Code: [Select]
analogWriteFreq(38000);
analogWrite(D3, 512);

 ?
Title: Re: Conception d'un nichoir connecté ! soucis de LED IR modulé !
Post by: dbrion06 on Sep 16, 2019, 03:15 pm
Oui
Et la sensibilité au bruit serait un peu moindre (mais vous consommez un peu plus). avec analogwrite(D3,200), vous avez des impulsions hautes le 1/5 ième du temps)
Title: Re: Conception d'un nichoir connecté ! soucis de LED IR modulé !
Post by: al1fch on Sep 16, 2019, 04:14 pm
Quote
essayer le code de @al1fch du post 97 : essayé ce matin : sans résultat probants
dans ce message #97 le code proposé produit un signal carré de fréquence 38kHz
Ci dessous le courant dans une DEL dont l'anode est branchée à la sortie D3, la cathode branche à une résistance dont l'autre extrémité  est reliée à  D2

Salve d'environ 0,5ms, carré 38kHz
(https://forum.arduino.cc/index.php?action=dlattach;topic=628501.0;attach=324659)

Je n'affirme pas  que c'est LA solution , il serait plus pratique de travailler en émission continue mais comme la question de la production de salve a été  soulevée je montre que, juste qu'avec AnalogWrite et Servo, sans boucle de code,  on peut produire facilement  des salves de signaux carrés à 38kHz (dans les limites des possibilités de Servo, salves de 0,5 ms à 2,5ms)
Title: Re: Conception d'un nichoir connecté ! soucis de LED IR modulé !
Post by: rer67 on Sep 16, 2019, 08:27 pm
Ce soir j'ai essayé ma barrière ir avec un morceau de gaine thermorétractable de 4cm à l'avant de la led .pour simuler le soleil j'ai pris un phare à incandescence. Avec le tube c'est largement mieux ! Faudrait que je vérifie avec des conditions de soleil réel !. En tout cas merci du tuyau JML.
Je pense que le ky-032 est également une bonne solution en deportant la led....
A voir
Title: Re: Conception d'un nichoir connecté ! soucis de LED IR modulé !
Post by: rer67 on Sep 18, 2019, 09:07 pm
Hello.
Après quelques essais, un petit retour d'expérience :
J'ai reçu mes photodiode Tssp4038 et les del tsal6200. Ce couple fonctionne très bien en branchant la del sur la sortie à 38khz de la node mcu. Donc effectivement pas besoin de train d'impulsions.
Après plusieurs essais à la lampe tungstène, un tout petit bout de tube de 1 cm suffit à inhiber les interférences lié aux UV. Reste à tester en extérieur....
Mai une chose me turlupine... J'ai fait les tests avec une résistance de 100 et 38 ohm avec la led branché sur ma node donc à 38khz. Mais comme je mesure la tension au voltmètre je n'ai pas de valeur correcte.... Quel est la valeur de la résistance que je doit utiliser avec ma del branché sur le 3.3v de ma node en 38khz..... Si elle n'était pas sur du 38khz je dirait  30 ohm pour 1.3v et 60ma  la datasheet est la
http://www.farnell.com/datasheets/2049868.pdf.
Comment alimenter ma led ir de 70 (on va dire 100ma) avec ma node mcu ?  L'essai à fonctionné mais j'ai l'impression que la led était plus que très faiblement alimentée...  Avec un transistor 2n222 ? Faut il y mettre une résistance ?

Merci de votre aide !
Title: Re: Conception d'un nichoir connecté ! soucis de LED IR modulé !
Post by: al1fch on Sep 18, 2019, 10:20 pm
Bonsoir
Quote
J'ai reçu mes photodiode Tssp4038 et les del tsal6200. Ce couple fonctionne très bien en branchant la del sur la sortie à 38khz de la node mcu. Donc effectivement pas besoin de train d'impulsions.
Bonne nouvelle, cela confirme ce que la notice technique des TSSP4038 laissait entrevoir
Merci pour la confirmation. La gestion de la barrière IR à 38kHz reste donc simple a mettre en oeuvre avec un ESP8266 et AnalogWrite()

Pour le courant , si la largeur de la barrière IR de nichoir le permet,  le plus simple serait de rester à une commande par sortie GPIO, en se contentant des 12mA que peut fournir une sortie GPIO d'un ESP8266.
Pourquoi pousser à 100mA le courant dans la DEL Infra Rouge, dans le cas du nichoir ?

S'il est nécessaire de fournir plus que 12mA,  ajouter un transistor bipolaire ou moset et une résistance pour maîtriser le courant dans la DEL à la valeur nécessaire à la largeur de la barrière

(Avec une tension  et un courant carrés  tenir compete du fait que la valeur moyenne est la moitié de la valeur crête)
Title: Re: Conception d'un nichoir connecté ! soucis de LED IR modulé !
Post by: rer67 on Sep 19, 2019, 07:11 am
Salut,
oui tu as raison je vais essayer avec 12ma cela simplifierais grandement le montage , et en plus je n'ai pas beaucoup de place !!!
donc pour 12-15ma environ j'aurai 1.2v a la del et donc il me faut une résistance de 140 à 160 ohm c'est cela ? ou une autre valeur ?

MErci
Title: Re: Conception d'un nichoir connecté ! soucis de LED IR modulé !
Post by: al1fch on Sep 19, 2019, 08:40 am
Bonjour

Une sortie GPIO (ESP8266) fournissant 12mA donnera  une tension un peu plus faible que 3,3V, je tenterai 100 Ohm .
Si l'intensité lumineuse s'avère insuffisante il l est possible , toujours en sortie directe de GPIO, de mettre deux DEL en série et abaisser la résistance  à 50 Ohm ou plus.

Title: Re: Conception d'un nichoir connecté ! soucis de LED IR modulé !
Post by: J-M-L on Sep 19, 2019, 08:49 am
il l est possible , toujours en sortie directe de GPIO, de mettre deux DEL en série et abaisser la résistance  à 50 Ohm ou plus.
si une des deux flanche et devient passante (je ne sais pas si ça peut arriver) l'appel de courant sur la PIN deviendra important, non ?
Title: Re: Conception d'un nichoir connecté ! soucis de LED IR modulé !
Post by: al1fch on Sep 19, 2019, 08:58 am
D'accord !
Il me semble toutejois que la court-circuit n'est pas le mode de défaillance le plus fréquent pour les DEL.
La mise en série de DEL IR se rencontre dans des télécommandes "de marque"
Title: Re: Conception d'un nichoir connecté ! soucis de LED IR modulé !
Post by: J-M-L on Sep 19, 2019, 09:02 am
OK - oui j'imagine que si elle flanche, elle devient plutôt un interrupteur ouvert
Title: Re: Conception d'un nichoir connecté ! soucis de LED IR modulé !
Post by: al1fch on Sep 19, 2019, 09:04 am
D'autre part une éventuelle défaillance en court-circuit de la DEL unique donne également une sur-intensité pour le GPIO
Title: Re: Conception d'un nichoir connecté ! soucis de LED IR modulé !
Post by: rer67 on Sep 19, 2019, 12:51 pm
il l est possible , toujours en sortie directe de GPIO, de mettre deux DEL en série et abaisser la résistance  à 50 Ohm ou plus.


Re,

cela est intéressant car si l'intensité lumineuse est suffisante avec une DEL par barrière, je pourrais tout de même en mettre 2 en série : l'une pour la barrière extérieure et l'autre pour la barrière intérieure ... ( ca simplifierais le cablage. )
A ce moment là et avec une résistance complémentaire de 50 ohm en série, dans quelle plage de fonctionnement de la DEL je me situerais ? ( 1.2V - 20mA par DEL ? )
on est dans ce cas ? :
(http://url=https://www.noelshack.com/2019-38-4-1568890242-2019-09-19-12-50-29-calculateur-de-resistance-serie-pour-led-digikey-electronics.png][img]https://image.noelshack.com/minis/2019/38/4/1568890242-2019-09-19-12-50-29-calculateur-de-resistance-serie-pour-led-digikey-electronics.png)[/img]
Title: Re: Conception d'un nichoir connecté ! soucis de LED IR modulé !
Post by: al1fch on Sep 19, 2019, 01:29 pm
image jointe au message précédent :
(https://forum.arduino.cc/index.php?action=dlattach;topic=628501.0;attach=325005)
ça me parait bon
Title: Re: Conception d'un nichoir connecté ! soucis de LED IR modulé !
Post by: rer67 on Sep 19, 2019, 06:14 pm
alorsss....

si je met 100ohms en resistance j'ai 1.2v et 18ma si je branche le tout sur le 3.3v de la board.
si je met la LED sur le 38KHZ avec les 100 ohms j'ai 0.42v a la led  ??

es-ce normal ?

je n'ai pas d'oscilloscope !
Title: Re: Conception d'un nichoir connecté ! soucis de LED IR modulé !
Post by: kamill on Sep 19, 2019, 06:31 pm
Oui, c'est normal. La tension 'efficace' dépend du rapport cyclique de la modulation.
Title: Re: Conception d'un nichoir connecté ! soucis de LED IR modulé !
Post by: rer67 on Sep 19, 2019, 06:44 pm
Oui, c'est normal. La tension 'efficace' dépend du rapport cyclique de la modulation.
ok merci de ton retour.
donc je peux régler la résistance pour arriver a 12mA sur du 3v fixe puis basculer l'alim de la DEL sur ma sortie 38khz pour être sur de ne pas tirer plus de 12mA de mon GPIO , c'est bien ca ?
merci
Title: Re: Conception d'un nichoir connecté ! soucis de LED IR modulé !
Post by: al1fch on Sep 19, 2019, 06:46 pm
Quote
es-ce normal ?
Signal  carré :si la sortie GPIO passe la moitié de son temps à 3,3V et l'autre moitié à 0 V , la moyenne est à 1,65 Volts
Un multimetre en 'continu' donne la valeur moyenne du signal

Quote
donc je peux régler la résistance pour arriver a 12mA sur du 3v fixe puis basculer l'alim de la DEL sur ma sortie 38khz pour être sur de ne pas tirer plus de 12mA de mon GPIO , c'est bien ca ?
Oui. Si la résistance est dimensionnée  pour que le que le courant soit égal à 12mA lorsque la sortie GPIO est en permanence  à 3,3V , on en déduit que le courant moyen sera egal  à 6mA avec un GPIO sortant un signal de rapport cyclique 50%.  (Wikipedia : rapport cyclique et valeur moyenne (https://fr.wikipedia.org/wiki/Rapport_cyclique))

(J'avais terminé , un peu vite sans doute,le message #124 sur ce point)
Title: Re: Conception d'un nichoir connecté ! soucis de LED IR modulé !
Post by: rer67 on Sep 19, 2019, 07:17 pm
Siganl carré : si la sortie GPIO pase la moitié de son temps à 3,3V et l'autre moitié à zéro , la moyenne est à 1,65 Volts
Un multimetre en 'continu' donne la valeur moyenne du signal

oui, ca je comprends mais alors pourquoi je n'ai que 0.4V sur ma DEL branché sur le 38KHZ au lieu de 1.25/2 soit 0.6 ?
Title: Re: Conception d'un nichoir connecté ! soucis de LED IR modulé !
Post by: al1fch on Sep 19, 2019, 07:20 pm
Quote
Pourquoi je n'ai que 0.4V sur ma DEL branché sur le 38KHZ au lieu de 1.25/2 soit 0.6 ?
1,25 V /2 ?
La relation entre le courant injecté dans la DEL et la tension à ses bornes n'est pas vraiment  lineaire (la DEL comme toute diode n'obéit pas à la loi d'Ohm !)

Le courant injecté dans la DEL est la grandeur significative pour l'intensité lumineuse émise.
On maîtrise le courant injecté ... puis on constate au besoin la valeur de tension qui en découle

Ceci avec une certaine incertitude de mesure de tension ...
L'appareil de mseure utilisé içi a-t-il une bonne précision pour des tensions  inférieures à 1V ?
Quel calibre a été utilisé ?
Title: Re: Conception d'un nichoir connecté ! soucis de LED IR modulé !
Post by: rer67 on Sep 19, 2019, 07:41 pm
Si la résistance est dimensionnée  pour que le que le courant soit égal à 12mA lorsque la sortie GPIO est en permanence  à 3,3V , on en déduit que le courant moyen sera egal  à 6mA avec un GPIO sortant un signal de rapport cyclique 50%.  (Wikipedia : rapport cyclique et valeur moyenne (https://fr.wikipedia.org/wiki/Rapport_cyclique))

(J'avais terminé , un peu vite sans doute,le message #124 sur ce point)

ok compris donc pour avoir 12mA en 38khz je peux mettre 24mA en 3.3v permanent et basculer en 38Khz  c'est Ok comme reglage  ?

Dans ton post 118  tu m'a expliqué que :
Code: [Select]
donc 200 donne à peu près 20%  et 512 à peu près 50% soit un signal carré
donc l'analogWrite devrait etre à 512 non? pour avoir un beau signal carré, pourquoi avoir mis 200 alors ?
Title: Re: Conception d'un nichoir connecté ! soucis de LED IR modulé !
Post by: al1fch on Sep 19, 2019, 07:42 pm
1) Malheureusement quand Espressif ecrit "12mA maxi' en sortie de GPIO, sans plus de précision, il n'est pas du tout certain qu'il s'agisse de la valeur moyenne à ne pas dépasser.!!
Espressif n'a pas (encore) détaillé  les caractéristiques électriques des GPIO :smiley-sad:
Dans le doute mieux vaut prendre  cela comme valeur instantannée  à ne pas dépasser.
(12mA  quand le carré est à l'état haut , donc 6mA en moyenne sur une période)

2) Oui carré = 512, comme dans dans l'exemple proposé (Message #97) où il est question de signal carré !
Title: Re: Conception d'un nichoir connecté ! soucis de LED IR modulé !
Post by: rer67 on Sep 19, 2019, 07:52 pm
1/ tu mettrais combien de mA sur la DEL avec la resistance avec 3.3v permanent (pour avoir le signal le plus fort) avant de rebasculer sur le 38khz , toi ?

2/ logique !;)
Title: Re: Conception d'un nichoir connecté ! soucis de LED IR modulé !
Post by: al1fch on Sep 19, 2019, 07:59 pm
Prévoyant une tension inférieure à 3,3v quand  le GPIO débitera je ne me prendrai pas la tête et mettrai 120 Ohm  (ou  même 100 Ohm si je n'avais rien d'autre en fond de tiroir !!)

La non linéarité de la DEL +  le manque d'info sur le comportement d'un GPIO d'ESP8266 débitant une dizaine de mA, ne permettent pas de positionner par avance avec précision le point de fonctionnement.

On se positionne en gros avec les données  disponibles en ensuite au vu des mesures on améliore.

Une fois trouvée expérimentalement la valeur  de résistance qui  met le courant crête (instants ou la tension vaut 3,3V) vers 12mA ,  l reste possible de faire varier  sur le courant moyen par l'intermédiaire du rapport cyclique (si le récepteur IR utilisé tolère des rapports cycliques très différents de 50%)
Title: Re: Conception d'un nichoir connecté ! soucis de LED IR modulé !
Post by: rer67 on Sep 19, 2019, 09:15 pm
bon  !
après ces essais et tous ces échanges, avec 100ohm çà a l'air de fonctionner.on va donc rester sur ces 100 ohm avec une DEL ( ou 50ohm avec 2 DEL ).
ca c'est fait !

le fait que j'ai des delay dans mon loop ne va affecter l'émission du 38khz vu que le digitalwrite est dans e loop ?
Title: Re: Conception d'un nichoir connecté ! soucis de LED IR modulé !
Post by: al1fch on Sep 19, 2019, 09:21 pm
Quote
le fait que j'ai des delay dans mon loop ne va affecter l'émission du 38khz vu que le digitalwrite est dans e loop ?
Non si les 38kHZ sont produits par AnalogWrite() , lancée eventuellement une fois pour toutes dans le setup().
AnalogWrite() est réalisée par activation d'un  PWM hardware
Title: Re: Conception d'un nichoir connecté ! soucis de LED IR modulé !
Post by: rer67 on Sep 19, 2019, 09:22 pm
Merci pour toutes ces explications
a bientôt...
Title: Re: Conception d'un nichoir connecté ! soucis de LED IR modulé !
Post by: rer67 on Sep 21, 2019, 05:30 pm
rebonjour !

J'ai eut quelques soucis encore ....

La pin D3 sur laquelle était produite le 38Khz me posait soucis au flash du sketch car cette PIN ne doit pas LOW au reboot.
J'ai donc basculer ce 38kHz sur la Pin D3. là c'est OK !

Une autre déconvenue est que mon sketch est basé sur 2 barrières IR qui devaient être "LOW" lors de la rupture d'unes d'elle. Or avec les 2 TSSP4038 que j'utilise la sortie "OUT" est "HIGH" lors de la rupture de la barrière ...
En cela ce ne serait pas grave il faudrait que j'inverse les "LOW" et "HIGH" de mon code, sauf que ..... j'ai dans mon sketch un pullup nécessaire dans mon code.
Code: [Select]
pinMode(IRPinext, INPUT_PULLUP);
pinMode(IRPinint, INPUT_PULLUP);


et a ma grande surprise il n'existe pas de pulldown ....

Je pourrais bien faire un pulldown avec une résistance R1 de 10kohm sur mes 2 PIN d'entrée mais cela ne vas t-il pas contrarier la sortie "OUT de ma photodiode si je mets une résistance R1 de 10Kohm entre le OUT et le GND ?  (https://image.noelshack.com/minis/2019/38/6/1569079715-2019-09-21-172806.png) (https://www.noelshack.com/2019-38-6-1569079715-2019-09-21-172806.jpg)

Auriez vous une autre idée ? ou méthode  pour contourner mon soucis?

et au fait  ... comment faire pour publier mon code alors qu'il fait plus de 9000 caractères ?
Title: Re: Conception d'un nichoir connecté ! soucis de LED IR modulé !
Post by: al1fch on Sep 21, 2019, 05:34 pm
Bonjour

Quote
et au fait  ... comment faire pour publier mon code alors qu'il fait plus de 9000 caractères ?
fichier joint dans ce cas de figure

Quote
mais cela ne vas t-il pas contrarier la sortie "OUT de ma photodiode si je mets une résistance R1 de 10Kohm entre le OUT et le GND ?  
Attention , le TSSP4038 et plus qu'une photodiode
Sa sortie est un transistor NPN associé à une résistance de 33kOhm en tirage vers le haut (pull-up)
la doc dit bien qu'en présence de faisceau lumineux la sortie est au niveau bas
(https://forum.arduino.cc/index.php?action=dlattach;topic=628501.0;attach=325263)
Toute résistance ajoutée entre OUT et masse formera un pont diviseur qui abaissera la tension à l'atat haut envoyée .
Title: Re: Conception d'un nichoir connecté ! soucis de LED IR modulé !
Post by: rer67 on Sep 21, 2019, 05:40 pm
ok, logique, je n'y avait pas pensé !

et pour mon soucis de pulldown tu aurais une idée ?
Title: Re: Conception d'un nichoir connecté ! soucis de LED IR modulé !
Post by: al1fch on Sep 21, 2019, 05:43 pm
non, en particulier parce que je n'ai pas bien compris la problématique du 'pull down'  !

il n'y a pas de possibilité pour mettre les deux barrière IR sur des GPIO 'sans contrainte'(boot ou autre)  ?
des GPIO qui seraient à l'état bas (sans conséquence pour le reste du fonctionnement) et qui passeraient à l'état haut en cas de coupure de faisceau ?

Si le code n'a pas trop changé il n'y a  rien à caser à part le 38kHz, le capteur DHT et les deux barrières.
Title: Re: Conception d'un nichoir connecté ! soucis de LED IR modulé !
Post by: fdufnews on Sep 21, 2019, 05:57 pm
Sur le TSSP40 il y a une résistance de tirage au + intégrée dans le composant donc le INPUT_PULLUP n'est pas indispensable.
Il n'y a pas besoin de PULLDOWN.
Tu complémentes les états dans ton code pour prendre en compte le changement de sens de l'état actif et c'est tout il n'y a pas d'autre problème à priori.
Title: Re: Conception d'un nichoir connecté ! soucis de LED IR modulé !
Post by: rer67 on Sep 21, 2019, 06:06 pm
je m'enmèle les pinceaux ...

quand je coupe la barrière IR avec ma main la sortie "out" passe Vin donc 3v  c'est bien ca ?

or mon code est fait de façon a ce si j'ai 3v sur la PIN d'entrée alors la barrière n'est pas coupée !
Title: Re: Conception d'un nichoir connecté ! soucis de LED IR modulé !
Post by: al1fch on Sep 21, 2019, 06:09 pm
38 kHz présent  -> état bas en sortie du TSSP4038
38kHz absent   -> état haut       "   "
c'est ce que montre la doc
(https://forum.arduino.cc/index.php?action=dlattach;topic=628501.0;attach=325269)

Quote
or mon code est fait de façon a ce si j'ai 3v sur la PIN d'entrée alors la barrière n'est pas coupée !
comme le dit fdufnews inverser la logique du  code !! (en oubliant  le pull up ou down)
Title: Re: Conception d'un nichoir connecté ! soucis de LED IR modulé !
Post by: rer67 on Sep 21, 2019, 06:13 pm
38 kHz présent  -> état bas en sortie du TSSP4038
38kHz absent   -> état haut       "   "
c'est ce que montre la doc
(https://forum.arduino.cc/index.php?action=dlattach;topic=628501.0;attach=325269)

le soucis c'est qu'il me faut l'inverse !!
Title: Re: Conception d'un nichoir connecté ! soucis de LED IR modulé !
Post by: al1fch on Sep 21, 2019, 06:16 pm
Quote
le soucis c'est qu'il me faut l'inverse !!
il est plus facile de changer le code que de changer le composant ou ajouter un inverseur en sortie du composant !!

Le 'il me faut l'inverse' sous-entend que le code est figé .... pourquoi ?

Qu'est ce qui empếche d'adapter les tests dans le code au comportement du TSSP4038 ?

plus haut dans ce fil de discussion on peut voir
Code: [Select]
if (IRval == HIGH) { // détection
mais cela ne correspond peut être plus au code actuel qui pose problème...


Title: Re: Conception d'un nichoir connecté ! soucis de LED IR modulé !
Post by: rer67 on Sep 22, 2019, 08:44 am
Bonjour,

Code: [Select]
//  pinMode(IRPinext, INPUT_PULLUP);  // PULLUP automatique; présent UNIQUEMENT pour les essais !
//  pinMode(IRPinint, INPUT_PULLUP);  // PULLUP automatique; présent UNIQUEMENT pour les essais !

les PULLUP étaient effectivement là uniquement pour les essais sur platine avec mes contacteurs NO branché au 0V car il me fallait au retour au 3v automatique.
je m'était un peu perdu .....
J'ai inversé le code et commenté les PULLUP, a priori cela devrait être ok !

Encore une interrogation sur l'EEPROM,
là j'écris dans 1 et 2 :
Code: [Select]
EEPROM.write(1, uint8_t(entree / 256));
EEPROM.write(2, uint8_t(entree % 256));
EEPROM.commit();

mais une fois les 100000 écritures faites environ j'ai compris que cela pouvait ne plus fonctionner ...
puis-je alors écrire dans 3 et 4 par exemple où es-ce toutes la zone EEPROM qui sera HS ?

MErci
Title: Re: Conception d'un nichoir connecté ! soucis de LED IR modulé !
Post by: al1fch on Sep 22, 2019, 09:04 am
Non, pas tout à fait...
l'Usure vient de l'effacement qui précède l'écriture (cf messages  #75,  # 83, ... )
Cet effacement se fait par secteurs de 4096 octets,
L'usure est secteur par secteur
Après usure du premier secteur (de 0 à 4095) utiliser  le suivant (4096...8191)
Ceci concerne tous les usages de la mémoire Flash (téléchargement, SPIFFS, EEPROM....)
Il est question ici de l'usure  de la mémoire Flash externe , pas de l'usure de l'ESP8266.

Tu peux pratiquer une forme élémentaire de 'répartition d'usure' en déclarant une EEPROM de 8192 octets et en jouant sur deux secteurs :

Code: [Select]
EEPROM.write(1, uint8_t(entree / 256));
EEPROM.write(4096, uint8_t(entree % 256));


Les '100 000 mini' et '4096' sont propres au circuit intégré W25Q32 (https://www.winbond.com/resource-files/w25q32bv_revi_100413_wo_automotive.pdf) (Flash SPI de marque Winbond) référence qui accompagne généralement l'ESP8266 (sous le capot métallique du module s'il y en a un. Ci dessous un module ESP-12)
(https://forum.arduino.cc/index.php?action=dlattach;topic=628501.0;attach=325333)
Title: Re: Conception d'un nichoir connecté ! soucis de LED IR modulé !
Post by: rer67 on Sep 22, 2019, 01:44 pm
Re,
pour ce qui concerne l'eeprom, j'ai compris. Merci

J'ai découvert un autre bug :

Quand le sketch produit du 38Khz, l'indication de température et d'hygro sur ma page web indique parfois :
(https://image.noelshack.com/fichiers/2019/38/7/1569152384-bug.png)
et le moniteur :
(https://image.noelshack.com/fichiers/2019/38/7/1569152494-2019-09-22-13-41-14-com8.png)

et si je commente les lignes :
Code: [Select]
//      analogWriteFreq(38000);
//      analogWrite(D5, 200);


tout s'affiche correctement...?!
le 38khz ferait il des parasites?

j'ai essayer de changer le PIN de sortie du 38khz sur PIN D1 D3 D5 et D8 mais toujours identique ....

Title: Re: Conception d'un nichoir connecté ! soucis de LED IR modulé !
Post by: al1fch on Sep 22, 2019, 02:01 pm
Quote
le 38khz ferait il des parasites?
Possible.
rayonnement du 38 kHz et de ses harmoniques .....perturbant parfois le signal Data du DHT22

comment est le câblage vers le DHT22 et vers la DEL Infra Rouge ?
longueur des  fils ?

la valeur du rapport cyclique du 38kHz influe  sur le spectre.
En sortant un carré (50% , 512) ça pourrait peut être  améliorer un peu, le spectre serait moins chargé.

(Autre piste : creuser les librairies AnalogWrite() et dht() pour ESP8266 pour trouver une éventuelle interaction)
Title: Re: Conception d'un nichoir connecté ! soucis de LED IR modulé !
Post by: rer67 on Sep 22, 2019, 02:19 pm
le DHT 22 est cablé en cable plat de 25cm. Rien d'autre de cablé sur le NodeMCU.

En mettant 512, j'ai moins de pertes de valeurs, cela n'affecte pas le signal de réception de mon TSSP4038 ?

J'ai également ce kit : kit (https://fr.aliexpress.com/item/32890442478.html?spm=a2g0s.9042311.0.0.3af16c374WllZ4)
en utilisant seulement la platine emetteur tu penses que cela pourrais aller ? la broche "SIG" doit etre au 5v permanent c'est cela, je n'ai pas tout cerné ...
Title: Re: Conception d'un nichoir connecté ! soucis de LED IR modulé !
Post by: al1fch on Sep 22, 2019, 02:24 pm
Quote
En mettant 512, j'ai moins de pertes de valeurs, cela n'affecte pas le signal de réception de mon TSSP4038
pas en mal en tout cas  ! mettre 512 (50%) et si le besoin s'en fait sentir du côté de la portée augmenter pour que la valeur moyenne du courant soit plus élevée. (la valeur 200 de mon premier exemple est fortuite, oublions là)

Quote
le DHT 22 est cablé en cable plat de 25cm. Rien d'autre de cablé sur le NodeMCU.
et la liaison entre sortie 38kHz et DEL ?
Quote
'ai également ce kit : kit (https://fr.aliexpress.com/item/32890442478.html?spm=a2g0s.9042311.0.0.3af16c374WllZ4)
en utilisant seulement la platine emetteur tu penses que cela pourrais aller ? la broche "SIG" doit etre au 5v permanent c'est cela, je n'ai pas tout cerné ...
Oui, SIG à +5V. Ce kit permettrait de décharger l'ESP8266 de la production du 38kHz et remplacerait la DEL IR
Voir ce que cela donne en présence du récepteur TSSP4038

Mais avec un peu de mise au point ça doit pouvoir fonctionner correctement sans module extérieur.
C'est un peu dommage de zapper d'une solution à une autre sans aller au bout des choses....
Title: Re: Conception d'un nichoir connecté ! soucis de LED IR modulé !
Post by: rer67 on Sep 22, 2019, 02:32 pm
OK merci de tes retours...
J'ai grillé mon tssp4038. Il faut que j'attende demain. Pour en récupérer d'autres.
Merci en tout cas. Bon dimanche
Title: Re: Conception d'un nichoir connecté ! soucis de LED IR modulé !
Post by: al1fch on Sep 22, 2019, 02:34 pm
Oups !!

combien vaut la résistance de tirage (pull up) associée au DHT22 ?
une résistance trop élevée augmente la 'sensibilité' aux parasites; le fil de 25cm faisant office d'antenne réceptrice.

Sous 3,3v et à 25cm je verrai bien 1k Ohm voire 820 Ohm (la résistance de pull up interne de l'ESP8266 est trop élevée)

Doc pdf DHT22 : https://cdn-shop.adafruit.com/datasheets/Digital+humidity+and+temperature+sensor+AM2302.pdf (https://cdn-shop.adafruit.com/datasheets/Digital+humidity+and+temperature+sensor+AM2302.pdf)
Title: Re: Conception d'un nichoir connecté ! soucis de LED IR modulé !
Post by: rer67 on Sep 22, 2019, 02:55 pm
Oups !!

combien vaut la résistance de tirage (pull up) associée au DHT22 ?
une résistance trop élevée augmente la 'sensibilité' aux parasites; le fil de 25cm faisant office d'antenne réceptrice.

Sous 3,3v et à 25cm je verrai bien 1k Ohm voire 820 Ohm (la résistance de pull up interne de l'ESP8266 est trop élevée)

Doc pdf DHT22 : https://cdn-shop.adafruit.com/datasheets/Digital+humidity+and+temperature+sensor+AM2302.pdf (https://cdn-shop.adafruit.com/datasheets/Digital+humidity+and+temperature+sensor+AM2302.pdf)

jai ce type de DHT22:
(https://image.noelshack.com/fichiers/2019/38/7/1569156848-dht22-module-05.jpg)
avec 472 ecris sur la resistance noire, la orange je ne sais pas ...
...
Title: Re: Conception d'un nichoir connecté ! soucis de LED IR modulé !
Post by: al1fch on Sep 22, 2019, 03:12 pm
4, 7, suivi de 2 zeros = 4700 Ohm
l'autre composant est un condensateur

tu n'as pas répondu sur le câblage (type, longueur) entre ESP8266 et DEL IR (TSAL6200) (c'est l'antenne qui emet les 'parasites')
Title: Re: Conception d'un nichoir connecté ! soucis de LED IR modulé !
Post by: rer67 on Sep 22, 2019, 03:28 pm
4, 7, suivi de 2 zeros = 4700 Ohm
l'autre composant est un condensateur

tu n'as pas répondu sur le câblage (type, longueur) entre ESP8266 et DEL IR (TSAL6200) (c'est l'antenne qui emet les 'parasites')

ici lors des test je n'ai rien de connecté !
Title: Re: Conception d'un nichoir connecté ! soucis de LED IR modulé !
Post by: al1fch on Sep 22, 2019, 03:35 pm
ça va mieux en le disant explicement !!

Pour essayer d'aider j'imagine un schéma, s'il ne correspond pas à la réalité c'est une perte de temps ,  ça tend à casser  la motivation puisque je ne sais plus trop de quoi on parle exactement...
barriére IR , 2 barriéres IR, pas de barrière IR ? (sans DEL on ne peut plus parler de barrière IR en action)
our limiter les échanges sur des malentendus, j'attend que ça se stabilise =
UN schéma représentant la réalité du montage + UN code complet,
sur cette base on peut réfléchir.
Title: Re: Conception d'un nichoir connecté ! soucis de LED IR modulé !
Post by: rer67 on Sep 22, 2019, 03:59 pm
le DHT 22 est cablé en cable plat de 25cm. Rien d'autre de cablé sur le NodeMCU.
Je l'avais déja ecrit que je n'ai rien d'autre de cablé pour le moment.

Mais je comprends ton message, je vais faire un schema et faire suivre le code.
Title: Re: Conception d'un nichoir connecté ! soucis de LED IR modulé !
Post by: rer67 on Sep 22, 2019, 04:08 pm
Je reprends,

Comme j'ai grillé ma TSSP4038, j'ai refait un test simple afin de vérifier le fonctionnement de mon sketch au niveau de l'eeprom et de l'affichage de ma page web.

C'est à ce moment là que je me suis rendu compte que le 38khz générait des parasites.
La seul chose qui est branchée sur la NodeMCU est le câble USB et la sonde DHT22.
(https://image.noelshack.com/fichiers/2019/38/7/1569161174-img-20190922-160222.jpg)

le code est en PJ

on est en phase à présent ?
Title: Re: Conception d'un nichoir connecté ! soucis de LED IR modulé !
Post by: al1fch on Sep 22, 2019, 04:12 pm
sur mon smartphone je ne peux rien tirer d'un fichier ino joint , je verrai plus tard

Sur quel GPIO est raccordé le DATA du DHT22 ? (je vois mal et suis de la viellie école : rien ne vaut un schéma, un vrai avec des composants représentés par leurs symboles, les photos, vidéos, images Fritzing en disent moins sur l'essentiel et mettent en avant des détails inutiles)
Title: Re: Conception d'un nichoir connecté ! soucis de LED IR modulé !
Post by: rer67 on Sep 22, 2019, 04:17 pm
ok merci

sinon ici joint en TXT
Title: Re: Conception d'un nichoir connecté ! soucis de LED IR modulé !
Post by: rer67 on Sep 22, 2019, 04:35 pm
et un croquis du montage final tel que je pensais le réaliser
Title: Re: Conception d'un nichoir connecté ! soucis de LED IR modulé !
Post by: al1fch on Sep 22, 2019, 04:44 pm
les idées à ce stade

chez moi j'aurai :
-examiné à l'oscilloscope l'alimentation et DATA sur le DHT22, eexaminé DATA avec un analyseur logique pour localiser le bug
-soudé une résistance de 1K en parallèle avec celle de 4,7K sur le module DHT22

Pour contourner le pb il est  envisageable  de n'activer le 38kHz que pendant la gestion de la barrière, ou  du moins le couper pendant la lecture du DHT22
ça parait faisable car dans le programme la coupure du faisceau n'est pas détectée par interruption mais par 'polling'
(Analog.write(D5, 0) pour couper ? jamais testé)

Si le 38kHZ n'est jamais coupé , déplacer AnalogWriteFreq() et AnalogWrite() dans le setup, pas  besoin de les relancer à chaque tour de boucle

Autre solution d'évitement = cacher sous le tapis = éliminer par logiciel les données aberrantes issues du DHT22 ne pas les publier sur la page web



Title: Re: Conception d'un nichoir connecté ! soucis de LED IR modulé !
Post by: rer67 on Sep 22, 2019, 08:22 pm
Re,

J'ai récemment reçu un "mini oscilloscope" on va dire bas de gamme .. je vais voir pour le mettre en oeuvre !
Par contre, l'idée d'arrêter le 38Khz pendant la lecture est une bonne piste, j'ai adapté comme cela :
Code: [Select]
// Affichage T&H sur la console
   if (millis() - chronoDHT > duration) {
      chronoDHT = millis();
      analogWrite(D5, 0);     // extinction 38Khz
      Temperature = dht.readTemperature(); // Mesure de la temperature
      Humidity = dht.readHumidity(); // Mesure de l'hygrométrie
      Serial.print("Temperature: ");
      Serial.println(Temperature);
      Serial.print("Humidity: ");
      Serial.println(Humidity);
      analogWrite(D5, 512);   // redémarrage 38Khz
    }

et les lectures du DHT sont 100% correcte pour le moment....
Je confirmerais demain quand je pourrais à nouveau avoir des TSSP4038 et essayer les barrières
Si J'ai bien compris je doit laisser plutôt 512 que 200 dans "analogwrite"  C'est  juste ?
Merci
Title: Re: Conception d'un nichoir connecté ! soucis de LED IR modulé !
Post by: al1fch on Sep 22, 2019, 08:56 pm
512 (rapport cyclique 50%= signal carré ) oui évidemment !!
partir  de cette valeur et OUBLIER 200 (rapport cyclique 20%) qui n'était qu'une valeur anecdotique
Title: Re: Conception d'un nichoir connecté ! soucis de LED IR modulé !
Post by: rer67 on Sep 22, 2019, 09:03 pm
Le changement de rapport cyclique doit me faire changer la valeur de la résistance en série des 2 led émettrices ? Ou pas ?
Title: Re: Conception d'un nichoir connecté ! soucis de LED IR modulé !
Post by: al1fch on Sep 22, 2019, 09:13 pm
Non. il me semble qu'elles ont été dimensionnées pour un rapport cyclique de 50%
Il me semble que depuis le message #121 je ne considère pratiquement que le signal carré (pas rectangulaire) donc rapport cyclique 50%, valeur 512 pour l'Analog.write()  ESP8266

Title: Re: Conception d'un nichoir connecté ! soucis de LED IR modulé !
Post by: rer67 on Sep 24, 2019, 08:14 pm
J'ai enfin tout rebranché selon mon schéma et tout fonctionne.,le code et la page Web.
Avec l'arrêt du 38khz pendant la lecture ca fonctionne. Par contre j'ai du ajouter un petit delay() après la lecture pour laisser un peu le temps au 38khz d'irradier le Tssp car sans ce délais il me détectait un manque du 38khz.

Reste maintenant à tout implémenter dans le nichoir et d'imprimer les support de  led et de la photodiode....

Je compte enregistrer encore le nombre de  sortie d'oiseau donc je devrais plutôt utiliser la zone à partir de 4096 pour équilibrer un peu l'usure c'est bien cela ?
Merci beaucoup....
Title: Re: Conception d'un nichoir connecté ! soucis de LED IR modulé !
Post by: al1fch on Sep 24, 2019, 09:46 pm
Bonsoir

ça commence à bien se présenter !!

içi l'EEPROM est émulée dans une mémoire Flash SPI dont l'effacement se fait par secteur de  4ko , donc oui le second secteur commence en 4096 et l'utiliser permet de soulager le premier secteur et répartir l'usure sur deux secteurs

Title: Re: Conception d'un nichoir connecté ! soucis de LED IR modulé !
Post by: rer67 on Sep 25, 2019, 07:35 pm
oui !! ca avance ....

j'ai tout de même encore une question bête peut être mais c'est pour mieux comprendre.

Si j'écris dans les secteurs 1 et 2 :
Code: [Select]
EEPROM.write(1, uint8_t(entree / 256));
EEPROM.write(2, uint8_t(entree % 256));
EEPROM.commit();


cela implique que j'aurais par la même effacé les secteurs de 3 à 4095 ? Puisque qu'il efface avant d'écrire  sur 4Ko ?
Title: Re: Conception d'un nichoir connecté ! soucis de LED IR modulé !
Post by: al1fch on Sep 25, 2019, 07:51 pm
Bonsoir

le secteur 1 comporte toutes les cellules d'adresses 0 à 4095
le secteur 2 comporte toutes les cellules d'adresses 4096 à 8191

le code proposé ci dessus n'agit donc que sur deux cellules mémoire du secteur 1 , il n'a aucune influence sur les autres secteurs de la mémoire Flash.

concernant les cellules effacées il faudrait se plonger dans le code de bas niveau (dans la mesure ou il est disponible) pour trouver le détail des mises à jour de données  en mémoire Flash seteur par secteur.

(L'extension ESP pour IDE ARduino 'sous-traite' la gestion d ela mémoire Flash adess fonctiosn fournies par ESpressif)

Faute d'avoir vu ce code de bas ou très bas niveau, ma compréhension pour l'instant est la suivante  :

quand le commit arrive :
-les 4096 cellules du secteur sont effacées (pas de détail !)
-les 4096 valeurs présentes dans un buffer (RAM) sont écrites en Flash après mise à jour du buffer  par quelques EEPROM.write(), les autres valeurs du buffer étant inchangées.
Ceci permet de réécrire ce qu'il faut réécrire et changer ce qu'il faut là ou il faut ....et ne rien perdre !!

Title: Re: Conception d'un nichoir connecté ! soucis de LED IR modulé !
Post by: dbrion06 on Sep 25, 2019, 07:57 pm
A priori, je ne pense pas qu'il efface:
il lit le secteur , fait les modifs dans le buffer en RAM et le commit -specifique à ESPxxx-  force l'écriture dans l'"EEPROM": les données en dehors des adresses 1 et 2 sont dans le même état qu'avant..

en passant, excusez moi pour la bêtise de ma question:
pourquoi jouez vous avec l'"EEPROM", alors que vous pouvez utiliser les mêmes bouts de circuit comme un système de fichier  et que spiffs a fait tous les efforts possibles pour maintenir l'intégrité de ce bout de circuit? (c'est mêm dans sa raison sociale sous github , "wear levelled SPI flash file system for embedded devices "  https://github.com/pellepl/spiffs (https://github.com/pellepl/spiffs)? si vous voulez stocker davantage, ou avez l'expérience de fichiers sur PC, faire tout en spiffs vous simplifiera la vie, au prix peut être d'une certaine lenteur...
Title: Re: Conception d'un nichoir connecté ! soucis de LED IR modulé !
Post by: al1fch on Sep 25, 2019, 08:10 pm
Quote
es données en dehors des adresses 1 et 2 sont dans le même état qu'avant..
de mon point  de vue cela se réalise par effacement et réécriture

en absence d'EEPROM physique,  l'EEPROM est émulée en Flash , non dans la petite Flash interne des soc ESP8266 mais dans le circuit intégré Flash SPI de 'forte capacité' indispensable en complément.

Deux contraintes :
-la technologie Flash des Flash SPI en général
-les particularités des puces utilisées en accompagnement des soc ESP8266  (W25Q32BV de Winbond (https://www.winbond.com/resource-files/w25q32bv_revi_100413_wo_automotive.pdf) la pluart du temps , notament dans les modules ESP-12)

La technologie Flash utilisée içi permet d'écrire un 0 sur un 1 mais pas un 1 sur un zéro Il faut donc effacer  pour remettre partout des  1, puis des 0 par endroits

ça ne peut se faire ni par octets, ni par pages , mais par secteurs (ou groupes de secteurs)  qui, dans le cas des puces Winbond accompagnant généralement les ESP8266 ont une  taille de 4ko

D'où  le rôle central de ce buffer dont la taille est nécessairement celle des secteurs

(ceci est intégré également à SPIFFS qui en plus assure effectivement en plus une répartition d'usure.)

N.B je n'ai pas  été dans les tréfonds  du 'framework' d'Espressif (lDF) pour étudier par le détail la gestion de bas niveau de la mémoire Flash  et vérifier que c'est 'comme je l'imagine à partir des contraintes technologiques des puces.
Title: Re: Conception d'un nichoir connecté ! soucis de LED IR modulé !
Post by: rer67 on Sep 25, 2019, 08:18 pm
Bonsoir

le secteur 1 comporte toutes les cellules d'adresses 0 à 4095
le secteur 2 comporte toutes les cellules d'adresses 4096 à 8191

le code proposé ci dessus n'agit donc que sur deux cellules mémoire du secteur 1 , il n'a aucune influence sur les autres secteurs de la mémoire Flash.

concernant les cellules effacées il faudrait se plonger dans le code de bas niveau (dans la mesure ou il est disponible) pour trouver le détail des mises à jour de données  en mémoire Flash seteur par secteur.

(L'extension ESP pour IDE ARduino 'sous-traite' la gestion d ela mémoire Flash adess fonctiosn fournies par ESpressif)

Faute d'avoir vu ce code de bas ou très bas niveau, ma compréhension pour l'instant est la suivante  :

quand le commit arrive :
-les 4096 cellules du secteur sont effacées (pas de détail !)
-les 4096 valeurs présentes dans un buffer (RAM) sont écrites en Flash après mise à jour du buffer  par quelques EEPROM.write(), les autres valeurs du buffer étant inchangées.
Ceci permet de réécrire ce qu'il faut réécrire et changer ce qu'il faut là ou il faut ....et ne rien perdre !!


parfait là c'est plus clair !!

je suis en plein impression 3D des supports de DEL !
(https://image.noelshack.com/fichiers/2019/39/3/1569435455-2019-09-25-20-17-02-ext2-skp-sketchup-pro-2018.png)
Title: Re: Conception d'un nichoir connecté ! soucis de LED IR modulé !
Post by: dbrion06 on Sep 25, 2019, 08:27 pm
Seul le commit assure une écriture physique (terme emprunté aux bases de données) https://randomnerdtutorials.com/esp32-flash-memory/ (https://randomnerdtutorials.com/esp32-flash-memory/)
write ne fait "que" mettre un flag ("dirty") à un; commit regarde si le flag est à un, dans ce cas , le remet à zero   après écriture.https://forum.arduino.cc/index.php?topic=509169.0 (https://forum.arduino.cc/index.php?topic=509169.0) montrent des bouts de code de la librairie EPROM pour ESP (en passant, si j'ai stocké 3.141, que je veux écrire 2.7, puis que je change d'avis et veux écrire 3.141 -revenant à l'état initial-, le commit fera une écriture inutile; je suppose que ce cas est suffisamment rare pour être omis)
Title: Re: Conception d'un nichoir connecté ! soucis de LED IR modulé !
Post by: al1fch on Sep 25, 2019, 08:33 pm
Quote
Seul le commit assure une écriture physique
Nous sommes d'accord s'il s'agit de l'écriture physique en Flash (ici Flash imitant une EEprom)
EEPROM.write écrit physiquement en RAM

J'ai aussi regardé les librairies Arduino touchant d'une manière ou d'une autre à la mémoire Flash
Elles appellent  toujours des fonctions de bas niveau d'Espressif où se passe la cuisine que j'imagine (sur la base de qui me parait incontournable au vu des notices techniques des composants)

Un jour peut être j'irai voir ces fonctions  de bas niveau (drivers Flash-SPI dans l'IDF) et je découvrirai que ça se passe autrement ;)
En attendant au vu de la doc W25Q32BV et de la librairie Arduino j'en reste à ce qui me parait le plus plausible même si cela parait peu élégant et illogique à première vue.
Title: Re: Conception d'un nichoir connecté ! soucis de LED IR modulé !
Post by: dbrion06 on Sep 25, 2019, 08:55 pm
JE reste toujours intrigué par le fait que l'on peut aussi profiter d'une librairie, spiffs, qui assure l'équilibrage de l'usure "wear levelling" au prix de temps longs et variables (j'ai joué avec les programmes de démo, qui mesurent les temps d'écriture: d'un essai à l'autre, les temps variaient beaucoup). Si l'usure de l"eeprom"flash est un problème, ou si on est paresseux (gestion de fichiers presque classiques) , c'est peut être interessant.
Title: Re: Conception d'un nichoir connecté ! soucis de LED IR modulé !
Post by: al1fch on Sep 25, 2019, 09:09 pm
Si l'usure de l'EEPROM émulée en Flash est un réel problème  à l'échelle de la durée de vie présumée de l'objet alors oui, autant profiter de SPIFFS.
A chacun de peser le pour et le contre dans les situations qu'il rencontre.
l'EEPROM dans ce fil a été proposée  comme une des solutions possibels sans négliger cette question

Title: Re: Conception d'un nichoir connecté ! soucis de LED IR modulé !
Post by: rer67 on Oct 04, 2019, 10:12 pm
bonsoir,

j'ai tout de meme encore un soucis d'enregistrement dans l'eeprom ...

- je veux enregistrer dans EepromE la variable "entrée" si supérieur de 10 de la valeur de l'eepromE en mémoire
- je veux enregistrer dans EepromS la variable "sortie" si supérieur de 10 de la valeur de l'eepromS en mémoire

Au démarrage je charge les valeurs des eepromE et eepromS :

Code: [Select]
// Chargement des valeurs d'eeprom's
  EEPROM.begin(2); // 2 octets pour le int à sauver
  eepromE = EEPROM.read(1) * 256 + EEPROM.read(2);
  entree = eepromE;
  Serial.print("nombre d'entrée reprise de l'eeprom: ");
  Serial.println(entree);
 
  eepromS = EEPROM.read(4096) * 256 + EEPROM.read(4097);
  sortie = eepromS;
  Serial.print("nombre de sortie reprise de l'eeprom: ");
  Serial.println(sortie);
  delay(100);


puis dans loop :

Code: [Select]
// Sauvegarde du nombre d'entrée dans l'eeprom si " entrée +10 "
      eepromE = EEPROM.read(1) * 256 + EEPROM.read(2);
   if (eepromE + 10 == entree) {
        EEPROM.write(1, uint8_t(entree / 256));
        EEPROM.write(2, uint8_t(entree % 256));
        EEPROM.commit();
    }   
// Sauvegarde du nombre de soties dans l'eeprom si " sorties +10 "
      eepromS = EEPROM.read(4096) * 256 + EEPROM.read(4097);
   if (eepromS + 10 == sortie) {
        EEPROM.write(4096, uint8_t(sortie / 256));
        EEPROM.write(4097, uint8_t(sortie % 256));
        EEPROM.commit();
    }   


j'ai mis 1,2 et 4096,4097 pour utiliser uniformément la mémoire et eviter l'usure prématurée.

MAIS ....
la valeur de mon eproomS reste toujours à 0 !!
Title: Re: Conception d'un nichoir connecté ! soucis de LED IR modulé !
Post by: al1fch on Oct 04, 2019, 11:11 pm
Bonsoir

désolé ! :smiley-red:  j'ai été imprudent en proposant de répartir l'usure de la Flash sur plusieurs secteurs, c'était une 'fausse bonne idée" que je n'avais pas testée.

En relisant la description de la librairie EEPROM pour ESP8266 on voit qu'elle est  limitée à  un secteur unique Pas question donc avec cette librairie d'étendre l'EEPROM émulée sur plusieurs secteurs de mémoire Flash.

lien : https://arduino-esp8266.readthedocs.io/en/2.5.2/libraries.html#eeprom (https://arduino-esp8266.readthedocs.io/en/2.5.2/libraries.html#eeprom)
Quote
EEPROM.begin(size)  : before you start reading or writing, size being the number of bytes you want to use. Size can be anywhere between 4 and 4096 bytes........... EEPROM library uses one sector of flash located just after the SPIFFS.
Title: Re: Conception d'un nichoir connecté ! soucis de LED IR modulé !
Post by: rer67 on Oct 05, 2019, 08:53 am
hello !

merci de ta réponse... c'est pas grave ! je vais essayer de corriger !
Title: Re: Conception d'un nichoir connecté ! soucis de LED IR modulé !
Post by: rer67 on Oct 05, 2019, 08:59 am
J'ai essayé de faire un enregistrement sur l'eeprom quand la tension d'alimentation disparaît sur D6.
pour cela j'ai fait une interruption :

Code: [Select]

// PInteruption coupure alim
   #define interpin D6 // D6 pour pin interuption de perte de 3V sur GPIO12

Code: [Select]
// Interuption D6
   attachInterrupt(digitalPinToInterrupt(interpin), sauvEeprom, FALLING);

Code: [Select]
// Sauv eproom's en cas de coupure d'alimentation
ICACHE_RAM_ATTR void sauvEeprom() {     // via interuption

   Serial.println("perte alim");
        EEPROM.write(1, uint8_t(entree / 256));
        EEPROM.write(2, uint8_t(entree % 256));
        EEPROM.write(3, uint8_t(sortie / 256));
        EEPROM.write(4, uint8_t(sortie % 256));
        EEPROM.commit();
}


Cependant, la fonction "sauvErprom" ne se lance pas ... et la compilation ne montre pas d'erreur ...
Title: Re: Conception d'un nichoir connecté ! soucis de LED IR modulé !
Post by: rer67 on Oct 05, 2019, 09:15 am
Bonsoir

désolé ! :smiley-red:  j'ai été imprudent en proposant de répartir l'usure de la Flash sur plusieurs secteurs, c'était une 'fausse bonne idée" que je n'avais pas testée.

En relisant la description de la librairie EEPROM pour ESP8266 on voit qu'elle est  limitée à  un secteur unique Pas question donc avec cette librairie d'étendre l'EEPROM émulée sur plusieurs secteurs de mémoire Flash.

lien : https://arduino-esp8266.readthedocs.io/en/2.5.2/libraries.html#eeprom (https://arduino-esp8266.readthedocs.io/en/2.5.2/libraries.html#eeprom)
ça y est c'est corrigé !
Code: [Select]
// Chargement des valeurs d'eeprom's
  EEPROM.begin(8); // 2 octets pour le int à sauver
  eepromE = EEPROM.read(1) * 256 + EEPROM.read(2);
  entree = eepromE;
  Serial.print("nombre d'entrée reprise de l'eeprom: ");
  Serial.println(entree);

  eepromS = EEPROM.read(3) * 256 + EEPROM.read(4);
  sortie = eepromS;
  Serial.print("nombre de sortie reprise de l'eeprom: ");
  Serial.println(sortie);
  delay(100);


merciii
Title: Re: Conception d'un nichoir connecté ! soucis de LED IR modulé !
Post by: rer67 on Oct 05, 2019, 02:14 pm
J'ai essayé de faire un enregistrement sur l'eeprom quand la tension d'alimentation disparaît sur D6.
pour cela j'ai fait une interruption :

Code: [Select]

// PInteruption coupure alim
   #define interpin D6 // D6 pour pin interuption de perte de 3V sur GPIO12

Code: [Select]
// Interuption D6
   attachInterrupt(digitalPinToInterrupt(interpin), sauvEeprom, FALLING);

Code: [Select]
// Sauv eproom's en cas de coupure d'alimentation
ICACHE_RAM_ATTR void sauvEeprom() {     // via interuption

   Serial.println("perte alim");
        EEPROM.write(1, uint8_t(entree / 256));
        EEPROM.write(2, uint8_t(entree % 256));
        EEPROM.write(3, uint8_t(sortie / 256));
        EEPROM.write(4, uint8_t(sortie % 256));
        EEPROM.commit();
}


Cependant, la fonction "sauvErprom" ne se lance pas ... et la compilation ne montre pas d'erreur ...
je me reponds :
il faut placer
Code: [Select]
// Sauv eproom's en cas de coupure d'alimentation
ICACHE_RAM_ATTR void sauvEeprom() {     // via interuption

   Serial.println("perte alim");
        EEPROM.write(1, uint8_t(entree / 256));
        EEPROM.write(2, uint8_t(entree % 256));
        EEPROM.write(3, uint8_t(sortie / 256));
        EEPROM.write(4, uint8_t(sortie % 256));
        EEPROM.commit();
}


avant le setup !