claudiusmarius

ESP32ClockInternet01

Nov 24th, 2022
221
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 10.27 KB | None | 0 0
  1.   #include "WiFi.h"
  2.   #include <TM1637Display.h>
  3.   #include <time.h>  
  4.    
  5.   #define DIO2 21                                                         // Affectation port de données du Display2
  6.   #define DIO1 23                                                         // Affectation port de données du Display1
  7.   #define CLK0 22                                                         // Particularité : un seul clock pour l'ensemble des Display
  8.   #define BrocheBuzzer                25                                  // Affectation du port de sortie du Buzzer
  9.  
  10.   #define BrocheLedRouge              26                                  // Absence de connexion WIFI        
  11.   #define BrocheLedVerte              27                                  // Présence connection WIFI
  12.   #define BrocheLedBleue              14                                  // Marquage lumineux bref incrémentation heure
  13.  
  14.   bool LastEtatMin = LOW;                                                 // Etat indiquant 59 minutes
  15.  
  16.   TM1637Display display1(CLK0, DIO1);                                     // Afficheur Heures Minutes
  17.   TM1637Display display2(CLK0, DIO2);                                     // Afficheur Jours Mois
  18.  
  19.   const char* ssid = "World cup 2022";                                    // +++++++++++++++++++++++++++++ATTENTION : D0C et no pas DOC+++++++++++++++++++++++++++++++
  20.   const char* password = "ALLER LA FRANCE";
  21.  
  22.   const int decalage = 1;                                                 // la valeur dépend de votre fuseau horaire. Essayez 2 pour la France.
  23.   //const int delaiDemande = 5 * 60;                                      // nombre de secondes entre deux demandes consécutives au serveur NTP
  24.   const int delaiDemande = 10;                                            // MEILLEUR QUE CI-DESSUS QUI INTRODUIT UN LEGER RETARD
  25.  
  26.   unsigned long derniereDemande = millis();                               // moment de la plus récente demande au serveur NTP
  27.   unsigned long derniereMaJ = millis();                                   // moment de la plus récente mise à jour de l'affichage de l'heure
  28.   unsigned long MonTime;                                                  // MonTime est la variable remise en forme de heure minute pour la compatibilité TM1637
  29.   unsigned long MaDate;                                                   // MaDate est la variable remise en forme de jour mois pour la compatibilité TM1637
  30.  
  31.   int compteur = 0;                                                       // Compteur utilisé dans l'affichage erreur pour limiter le nombre de bips
  32.   time_t maintenant;
  33.   struct tm * timeinfo;
  34.    
  35.   void setup()
  36.   {
  37.  
  38.   Serial.begin(115200);
  39.   pinMode(BrocheBuzzer, OUTPUT);
  40.   pinMode(BrocheLedRouge, OUTPUT);
  41.   pinMode(BrocheLedVerte, OUTPUT);
  42.   pinMode(BrocheLedBleue, OUTPUT);
  43.  
  44.   digitalWrite (BrocheBuzzer, LOW);
  45.   digitalWrite (BrocheLedRouge, LOW);
  46.   digitalWrite (BrocheLedVerte, LOW);
  47.   digitalWrite (BrocheLedBleue, LOW);
  48.  
  49.   display1.setBrightness(0x0f);                                           // Brillance maximale
  50.   display2.setBrightness(0x0f);                                           // Brillance maximale
  51.  
  52.   display1.clear ();
  53.   display2.clear ();
  54.  
  55.   delay (5);
  56.   WiFi.begin(ssid, password);
  57.  
  58.   while (WiFi.status() != WL_CONNECTED)
  59.   {
  60.   digitalWrite (BrocheLedBleue, LOW);
  61.   digitalWrite (BrocheLedRouge, HIGH);
  62.   digitalWrite (BrocheLedVerte, LOW);
  63.   afficheErreur01();
  64.   delay(10);
  65.   display1.clear ();
  66.   display2.clear ();
  67.   }
  68.  
  69.   compteur = 0;
  70.   digitalWrite (BrocheLedBleue, LOW);
  71.   delay (10);
  72.   digitalWrite (BrocheLedRouge, LOW);
  73.   delay (10);
  74.   digitalWrite (BrocheLedVerte, HIGH);
  75.   delay (10);
  76.   Buzzer(300, 10, 1);
  77.   delay(200);
  78.  
  79.   configTime(decalage * 3600, 0, "fr.pool.ntp.org");
  80.   delay(1200);
  81.   time(&maintenant);
  82.  
  83.   }
  84.  
  85.   void loop()
  86.   {
  87.   digitalWrite (BrocheLedBleue, LOW);
  88.   //------------------------------------------------------------------------Condition de demande de l'heure NTP---------------------------------------------------------------------------
  89.   if ((millis() - derniereDemande) >=  delaiDemande * 1000 )              // Dernière demande depuis plus de 10 secondes
  90.   {
  91.   time(&maintenant);                                                      // Rafraichissement
  92.   derniereDemande = millis();                                             // Réactualisation du temps de la dernière demande d'heure (en millisecondes)
  93.   }
  94.   //--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
  95.  
  96.   //--------------------------------------------------------------Détection du dépassement de millis () (redémarrage à zéro---------------------------------------------------------------
  97.   if (millis() < derniereDemande )                                        // si millis () est plus bas que précédemment c'est donc qu'il redémarre enbas
  98.   {
  99.   time(&maintenant);                                                      // Rafraichissement
  100.   derniereDemande = millis();                                             // Réactualisation du temps de la dernière demande d'heure (en millisecondes)
  101.   }
  102.   //--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
  103.  
  104.   //-------------------------------------------------------------------Condition sur la MAJ de l'affichage heure/date---------------------------------------------------------------------
  105.   //+++++++++++++++Point important : dans notre cas le temps est incrémenté d'une seconde et l'afichage est mis à jour à chaque seconde (entre 2 lectures de l'heure NTP++++++++++++++++++
  106.   if ((millis() - derniereMaJ) >=   1000 )
  107.   {
  108.   maintenant = maintenant + 1;                                            // Incrémentation d'une seconde
  109.   afficheHeureDate();                                                     // Activation de la fonction afichage heure date
  110.   derniereMaJ = millis();                                                 // Réactualisation du temps de la dernière
  111.   }
  112.   //--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
  113.   }
  114.  
  115.   void afficheHeureDate()
  116.   {
  117.   if (WiFi.status() != WL_CONNECTED)
  118.   {
  119.   digitalWrite (BrocheLedBleue, LOW);
  120.   digitalWrite (BrocheLedRouge, HIGH);
  121.   digitalWrite (BrocheLedVerte, LOW);
  122.   display1.clear ();
  123.   display2.clear ();
  124.  
  125.   afficheErreur01();
  126.   delay(10);
  127.   }
  128.  
  129.   else
  130.   {
  131.   digitalWrite (BrocheLedBleue, LOW);
  132.   digitalWrite (BrocheLedRouge, LOW);
  133.   //delay (10);
  134.   digitalWrite (BrocheLedVerte, HIGH);
  135.   //delay (10);
  136.  
  137.   timeinfo = localtime(&maintenant);                                      // MAJ de timeinfo
  138.   //MonTime = 100*timeinfo->tm_hour + timeinfo->tm_min +10000 ;           // Conversion pour Display (2 digits heures/ 2digits minutes
  139.   MonTime = 100*timeinfo->tm_hour + timeinfo->tm_min ;
  140.  
  141.   //if (timeinfo->tm_min == 59)                                           // Faire le choix entre ces 2 lignes, ici pour signalisation incrémentation de l'heure
  142.   if (timeinfo->tm_sec == 59)                                             // Faire le choix entre ces 2 lignes, ici pour signalisation incrémentation des minutes (principalement pout tests
  143.   {
  144.   LastEtatMin = HIGH;
  145.   }
  146.   //if ( timeinfo->tm_min == 0 && LastEtatMin == HIGH)
  147.   if ( timeinfo->tm_sec == 0 && LastEtatMin == HIGH)
  148.   {
  149.   delay (10);
  150.   digitalWrite (BrocheLedBleue, HIGH);
  151.   LastEtatMin = LOW;
  152.   Buzzer (15, 5,1);
  153.   delay (10);
  154.   }
  155.  
  156.   digitalWrite (BrocheLedBleue, LOW);
  157.   MaDate = 100*timeinfo->tm_mday + timeinfo->tm_mon + 1;          
  158.   display1.showNumberDecEx(MonTime,0b01000000,true, 4,0);                 // Affichage MonTime en incluant ":"  
  159.   display2.showNumberDec(MaDate,true, 4,0);
  160.   }
  161.   }
  162.  
  163.   void afficheErreur01()
  164.   {
  165.   digitalWrite (BrocheLedBleue, LOW);
  166.   compteur++;
  167.   if (compteur < 5 )
  168.   {
  169.   Buzzer(40, 10, 6);                                                      // Signal sonore d'entrée en défaut
  170.   }
  171.   delay (1000);
  172.    
  173.   //-------------------------------------------------------------------Ci-dessous l'animation des segments---------------------------------------------------------------------------
  174.   const uint8_t segments01 [] = {
  175.   SEG_A ,
  176.   SEG_A ,
  177.   SEG_A ,
  178.   SEG_A ,
  179.   };
  180.  
  181.   const uint8_t segments02 [] =
  182.   {
  183.   SEG_G ,
  184.   SEG_A ,
  185.   SEG_G ,
  186.   SEG_A ,
  187.   };
  188.  
  189.   const uint8_t segments03 [] =
  190.   {
  191.   SEG_D ,
  192.   SEG_G ,
  193.   SEG_D ,
  194.   SEG_G ,
  195.   };
  196.  
  197.   const uint8_t segments04 [] =
  198.   {
  199.   SEG_D ,
  200.   SEG_D ,
  201.   SEG_D ,
  202.   SEG_D ,
  203.   };
  204.  
  205.   int tempo = 20;                                                          // tempo avant le passage à l'affichage suivant
  206.   for (int i = 0; i < 30; i++)                                             // i = nmbre de repition de la boucle d'affichage
  207.   {
  208.   display1.setSegments (segments01, 4, 0);
  209.   display2.setSegments (segments04, 4, 0);
  210.   delay (tempo);
  211.  
  212.   display1.setSegments (segments02, 4, 0);
  213.   display2.setSegments (segments03, 4, 0);
  214.   delay (tempo);
  215.  
  216.   display1.setSegments (segments03, 4, 0);
  217.   display2.setSegments (segments02, 4, 0);
  218.   delay (tempo);
  219.  
  220.   display1.setSegments (segments04, 4, 0);
  221.   display2.setSegments (segments01, 4, 0);
  222.   delay (tempo);
  223.   }
  224.   }
  225.  
  226.   void Buzzer (int TempsH, int TempsL, int nb)                            // TempsH => délai buzzer ON, TempsL => délai buzzer OFF, nb => nombre de bips
  227.   {
  228.   for (int x = 1; x <= nb; x++) // ************************************** // Boucle le nombre de fois voulu passé par l'argument "int nb"
  229.   {
  230.   digitalWrite(BrocheBuzzer, HIGH);                                       // Active le buzzer
  231.   delay (TempsH);                                                         // Temporisation à l'état haut du buzzer pendant la durée passée par l'argument "int TempsH"
  232.   digitalWrite(BrocheBuzzer, LOW);                                        // Désactive le buzzer
  233.   delay (TempsL);                                                         // Temporisation à l'état bas du buzzer pendant la durée passée par l'argument "int TempsL"
  234.   }
  235.   }
Add Comment
Please, Sign In to add comment