Go Down

Topic: Conception d'un nichoir connecté ! soucis de LED IR modulé ! (Read 3102 times) previous topic - next topic

rer67

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.

Zlika

#1
Jul 27, 2019, 01:22 pm Last Edit: Jul 27, 2019, 01:23 pm by Zlika
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 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...



Si ça coince, forcez. Si ça casse, ça devait probablement être réparé, de toute façon.

Artouste

#2
Jul 27, 2019, 02:07 pm Last Edit: Jul 27, 2019, 02:07 pm by Artouste
...

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
 :smiley-mr-green:

lesept

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.
A force d'essayer on finit par réussir... Donc, plus ça rate, plus on a de chances que ça marche (proverbe Sharduinok).

rer67

Bonjour,

Merci de vos encouragements.
pour vous montrer un peu le contexte et ma passion :
mon site web
ma chaine youtube
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 )



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
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.


lesept

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 ?
A force d'essayer on finit par réussir... Donc, plus ça rate, plus on a de chances que ça marche (proverbe Sharduinok).

rer67

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,

lesept

A force d'essayer on finit par réussir... Donc, plus ça rate, plus on a de chances que ça marche (proverbe Sharduinok).

rer67

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 ?

lesept

Oui
Je tenterai de faire une première version demain matin.
En attendant, je te conseille de lire des tutos : eskimon, openclassrooms par exemple
A force d'essayer on finit par réussir... Donc, plus ça rate, plus on a de chances que ça marche (proverbe Sharduinok).

lesept

#10
Jul 28, 2019, 10:47 am Last Edit: Jul 28, 2019, 11:00 am by lesept
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. Tu peux le faire par le biais du gestionnaire de bibliothèques :


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+
A force d'essayer on finit par réussir... Donc, plus ça rate, plus on a de chances que ça marche (proverbe Sharduinok).

rer67

Bonjour le7 !

Un grand merci, je vais me familiariser avec le logiciel arduino et essayer de charger cela, je tiens informé.
@ toute

rer67

re,

j'ai bien télécharger la bibliothèque :


puis j'ai televerser le code.
dans le moniteur je vois bien le rafrachissement toutes les 5 secondes :

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


lesept

#13
Jul 28, 2019, 12:03 pm Last Edit: Jul 28, 2019, 12:06 pm by lesept
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
A force d'essayer on finit par réussir... Donc, plus ça rate, plus on a de chances que ça marche (proverbe Sharduinok).

lesept

J'ai trouvé un tuto 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...
A force d'essayer on finit par réussir... Donc, plus ça rate, plus on a de chances que ça marche (proverbe Sharduinok).

Go Up