Gartenhäuschen mit Micro Controller und Sensoren überwachen - Teil 3 - AZ-Delivery
Dans la première partie, j'ai décrit comment le D1 Mini (ESP8266) avec le capteur de température DHT22 et le capteur de gaz MQ-2 comme serveur web envoie les valeurs mesurées de notre abri de jardin au WLAN de la maison.
Ces valeurs sont affichées dans le navigateur du PC ou du smartphone si vous saisissez l'adresse IP du serveur web (dans mon cas : http://192.168.178.100) dans la ligne d'adresse.

Le serveur web est programmé pour afficher le mot "Alarme" lorsqu'une température de 50°C ou une concentration de gaz de 100 est dépassée. Mais il faut chercher activement sur la page correspondante pour que tout soit affiché. Cela ne me suffisait pas, je voulais aussi être informé par un signal acoustique et optique. J'ai donc dû évaluer la page web avec un micro contrôleur ou un micro ordinateur, filtrer les valeurs mesurées et déclencher l'alarme avec un buzzer et une LED si nécessaire. Dans la deuxième partie, j'ai présenté une solution avec un Raspberry Pi compatible WLAN et un Display OLED I2C 128 x 64 pixels de 1,3 pouce.

Maintenant je voudrais montrer la configuration avec une carte D1 et un clavier LCD :

Matériel requis pour la première partie :

1

D1 Mini NodeMcu avec module WLAN ESP8266-12F

optionnel

Bouclier pour piles au lithium pour D1 Mini

optionnel

Pile au lithium 3,7V 

1

DHT22 AM2302 Capteur de température et d'humidité

1

Capteur de gaz MQ-2 Module Capteur de fumée et qualité de l'air

Mini Breadboard, câble de liaison


Matériel requis pour la troisième partie :

1

D1 Board NodeMCU ESP8266MOD-12F WiFi Wlan Module

1

LCD1602 Module Shield HD44780 1602 avec 2x16 caractères

alternativement

HD44780 1602 Module LCD Display 2x16 caractères 

Mini Breadboard, câble de liaison

Buzzer

LED rouge avec résistance en série de 200 à 330 Ohm


Le point de départ de nombreux projets est la collection de Sketchs d'exemples, qui s'enrichit à chaque installation de nouveaux microcontrôleurs ou d'une bibliothèque de programmes. J'ai rapidement trouvé les sketches WiFiClient et WiFiClientBasic sous Examples/ESP8266WiFi, qui conviennent en principe pour se connecter à des sites web depuis Internet.

Deux défis (j'ai appris à l'OTAN : " No Problems, only Challenges ") :

Tout d'abord, je ne veux pas aller sur Internet, mais demander une adresse IP dans le WLAN de la maison. Et deuxièmement, je veux sauvegarder le texte HTML transmis dans une variable de type chaîne pour un traitement ultérieur.

Il faut donc étendre et modifier le Sketch WiFiClientBasic. Nous avons besoin des bibliothèques de programmes suivantes pour enregistrer la carte D1 avec le routeur à la maison, puis lire la page HTML du serveur Web dans l'abri de jardin en tant que client Web.

 #include 
 #include
 #include
 Esp8266wifImulti Wifimulti;

Ensuite, on déclare le SSID et le mot de passe pour l'accès WLAN et on saisit l'adresse IP du serveur web (dans mon cas http://192.168.178.100) et le port pour HTML (80). Vous devez faire vos propres entrées ici.

Ensuite, les variables globales pour les valeurs mesurées sont définies de sorte qu'elles soient disponibles dans toutes les fonctions.

Dans le void setup(), les connexions au moniteur série de l'IDE Arduino et au WLAN local sont établies.

La requête régulière du serveur web est ensuite effectuée avec http.GET() et http.GetString() dans la boucle void(), la page web entière est stockée dans la variable payload.

Après de nombreuses lignes de formatage et le code pour la mise à jour automatique de la page web dans le navigateur, nous trouvons les valeurs mesurées souhaitées pour la température, l'humidité relative du DHT22 et pour la concentration de gaz du MQ-2 à la toute fin. Au début, la seule chose qui aide est "Tabula rasa" = effacer les 721 premiers caractères avec la méthode string StringName.substring(from,to). Dans mon cas, from=722, to est facultatif et peut être omis.

Avec une boucle for, je recherche ensuite les indices des lettres T (pour température), H (pour humidité) et G (pour concentration de gaz) comme valeurs de référence pour la réutilisation de la méthode StringName.substring(from,to). J'ai dû jouer un peu avec les valeurs respectives des paramètres from et to, car la température peut avoir un ou deux chiffres et éventuellement un signe moins, et la valeur de la concentration de gaz peut avoir deux ou trois chiffres. Heureusement, la méthode String.toFloat() est très tolérante et ignore les espaces dans la température et le caractère < à la fin d'une valeur à deux chiffres pour la concentration de gaz.

Voilà, cela affiche les valeurs de température, d'humidité et de concentration de gaz dans le moniteur série. Voici le sketch (partiel) Télécharger

Mais ce n'est que la moitié de la bataille. Nous voulons utiliser la carte D1 sans la connecter au PC et, si nécessaire, déclencher une alarme lorsque les valeurs limites sont dépassées. Nous avons donc besoin d'un petit écran et bien sûr de notre buzzer et éventuellement d'une LED rouge pour l'alarme lorsque les valeurs limites sont dépassées.

En raison de son aspect agréable et pratique, j'utilise le LCD Keypad Shield. Pour plus de détails sur la façon d'utiliser le clavier (c'est-à-dire les boutons), consultez le Blog post "Le nouveau D1 avec ESP8266mod-12F au format Uno". Mais nous n'avons pas besoin des clés ici. Nous n'utilisons que le LCD, qui est connecté aux broches GPIO dans ce cas. Installez et incluez la bibliothèque appropriée (pas I2C) et définissez les broches selon le diagramme de brochage de la carte D1 :

 // L'écran LCD n'a pas l'adaptateur i2c, les données sont transmises via les broches D4 à D7
 #include
 // LCD Pin à Arduino
 constant int pin_bl = 15;
 constant int pin_en = 2;
 constant int pin_rs = 0;
 constant int pin_d4 = 4;
 constant int pin_d5 = 14;
 constant int pin_d6 = 12;
 constant int pin_d7 = 13;  

Nous utilisons la broche libre D2 = GPIO16 pour le Buzzer et la LED.

Voici le Sketch étendue : (Télécharger)

 /*
     Cette esquisse Reads le texte HTML A partir de TCP Server dans votre réseau local.
     Par Gerald Lechner et Bernd Albrecht AZ-livraison * /
 
 #include
 #include
 
 #include // *** client HTTP
 
 #ifndef Stassid
 #define Stassid "Votre SSID"
 stapsk #define « votre mot de passe »
 #endif
 
 constant Char * SSID     = Stasid;
 constant Char * le mot de passe = Stapk;
 
 constant Char * url = "Http://192.168.178.100";
 constant uint16_t Port = 80;
 
 // L'écran LCD n'a pas l'adaptateur i2c, les données sont transmises via les broches D4 à D7
 #include
 // LCD Pin à Arduino
 constant int pin_bl = 15;
 constant int pin_en = 2;
 constant int pin_rs = 0;
 constant int pin_d4 = 4;
 constant int pin_d5 = 14;
 constant int pin_d6 = 12;
 constant int pin_d7 = 13;  
 
 Liquide Crystal LCD( pin_rs,  pin_en,  pin_d4,  pin_d5,  pin_d6,  pin_d7);
 
 flotter t = 0.0;
 flotter H = 0.0;
 flotter g = 0.0;
 int indice;
 int indexh;
 int indice;
 int avertisseur sonore=16;
 
 Esp8266wifImulti Wifimulti;
 
 annuler d'installation() {
   En série.Commencer(115200);
   // Initialiser numérique Pin D2 = GPIO16 AS sur SORTIE.
   pinMode(avertisseur sonore, SORTIR);  
   LCD.Commencer(16, 2);       // LCD1602 avec 16 caractères et 2 lignes
   // On commence par connexion à un réseau Wifi
   Wifi.Mode(Wifi_sta);
   Wifimulti.ADDAP(SSID, le mot de passe);
 
   En série.println();
   En série.println();
   En série.imprimer(« Attendez wifi ... »);
 
   Whiler (Wifimulti.Cours() != Wl_connected) {
     En série.imprimer(".");
     retard(500);
  }
 
   En série.imprimeur("");
   En série.imprimeur("Wifi connecté");
   En série.imprimeur("Adresse IP: ");
   En série.imprimeur(Wifi.localip());
 
   retard(500);
 }
 
 
 annuler boucle() {
   En série.imprimer("connexion à ");
 // série.print (hôte);
   En série.imprimer(URL);    // neueu
   En série.imprimer(':');
   En série.imprimeur(Port);
 
 
   // **** Neue Hauptschleife
   si ((Wifimulti.Cours() == Wl_connected)) {
 
     Charmant client;
 
     Httpclient http;
 
     En série.imprimer("[Http] commence ... \ n");
     si (http.commencer(client, URL)) {  // http "URL" "" ENDERNT
 
 
       En série.imprimer("[Http] obtenir ... \ n");
       // Démarrer la connexion et envoyez une en-tête HTTP
       int httpcode = http.AVOIR();
 
       // httpcode sera négatif sur l'erreur
       si (httpcode > 0) {
         // L'en-tête HTTP a été envoyé et une en-tête de réponse du serveur a été traitée.
         En série.printf("[Http] get ... code:% d \ n", httpcode);
 
         // Fichier trouvé sur le serveur
         si (httpcode == Http_code_ok || httpcode == Http_code_moved_permanemment) {
           Chaîne de caractères charge utile = http.getString();
           Chaîne de caractères Charge utile1 = charge utile.sous-chaîne(722);
 // série.println (charge utile);
 // série.println ();
           En série.imprimeur(Charge utile1);
           pour (int je=0;je<=Charge utile1.longueur();je++)  
            {
               si (Charge utile1.charret(je) == 'T') index = je;
 // série.println (indiquement);
               si (Charge utile1.charret(je) == "H") index = je;          
 // série.println (Indexh);
               si (Charge utile1.charret(je) == 'G') index = je;          
 // série.println (indexg);
              }
             Chaîne de caractères Ttring = Charge utile1.sous-chaîne(index+12,index-10);
             Chaîne de caractères Hstring = Charge utile1.sous-chaîne(index+10,index+12);
             Chaîne de caractères Gage = Charge utile1.sous-chaîne(index+18,index+22);
 // série.println (charge utile1);
             En série.imprimeur(Ttring);
             En série.imprimeur(Hstring);
             En série.imprimeur(Gage);
             t = Ttring.flotter();
             h = int(Hstring.flotter());
             g = int(Gage.flotter());
             En série.imprimeur(t,1);
             En série.imprimeur(int(h));
             En série.imprimeur(int(g));
             LCD.dégager();
             LCD.setcursor(0,0);     // zählung débutant bei null, Ètal Zeichen, Dann Zeile
             LCD.imprimer("t =");
             LCD.imprimer(Chaîne de caractères(t));
             LCD.imprimer("h =");
             LCD.imprimer(Chaîne de caractères(int(h)));            
             LCD.setcursor(0,1);     // 0 = erstes Zeichen, 1 = Zeile Zweite
             LCD.imprimer("g =");
             LCD.imprimer(Chaîne de caractères(int(g)));
             si (t>50.0 || g>100) {
               LCD.imprimer("Alarme!");
               denadewrite(avertisseur sonore, HAUTE);   // Tournez la sonnerie et conduit sur
               retard(200);                       // attendre
               denadewrite(avertisseur sonore, MEUGLER);    // Tournez la sonnerie et mentionné
               retard(100);                        // attendre
               denadewrite(avertisseur sonore, HAUTE);   // Tournez la sonnerie et conduit sur
               retard(200);                       // attendre
               denadewrite(avertisseur sonore, MEUGLER);    // Tournez la sonnerie et mentionné
               retard(100);                       // attendre
              }        
          }
        }
       autre {
         En série.printf("[Http] get ... a échoué, erreur:% s \ n", http.errorostring(httpcode).c_str());
      }
 
       http.finir();
    } autre {
       En série.printf("[Http} Impossible de connecter \ n");
    }
  }
 
   retard(5000);
 }

Dans le blog en trois parties, j'ai montré comment envoyer les données des capteurs via le WLAN de la maison et afficher les valeurs sur le PC, le smartphone, avec Raspberry ou ESP8266 (même tous en même temps) et déclencher une alarme lorsque les valeurs limites sont dépassées. Comme nous l'avons mentionné au début, vous pouvez également ajouter des détecteurs de mouvement et d'autres capteurs comme dispositif antivol. Amusez-vous bien à le construire.


Télécharger en pdf

DisplaysEsp-8266Projekte für anfängerRaspberry piSmart home

Laisser un commentaire

Tous les commentaires sont modérés avant d'être publiés

Articles de blog recommandés

  1. ESP32 jetzt über den Boardverwalter installieren - AZ-Delivery
  2. Internet-Radio mit dem ESP32 - UPDATE - AZ-Delivery
  3. Arduino IDE - Programmieren für Einsteiger - Teil 1 - AZ-Delivery
  4. ESP32 - das Multitalent - AZ-Delivery