IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Arduino Discussion :

Gestion de l'heure et de la date


Sujet :

Arduino

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    bricoleur
    Inscrit en
    Octobre 2014
    Messages
    406
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : bricoleur
    Secteur : Alimentation

    Informations forums :
    Inscription : Octobre 2014
    Messages : 406
    Par défaut Gestion de l'heure et de la date
    Bonjour à tous,
    j'ai développé une application sur Arduino Uno dans lequel j'entre l'heure manuellement au départ (par Bluetooth), je maintiens l'heure à jour par l'horloge interne de l'Arduino, je rafraichis l'affichage de l'heure toutes les secondes puis je mets à jour toutes les heures par un module RTC. Tout va bien.
    Aujourd'hui je passe cette cette application sur ESP32; l'heure est chargée d'Internet par le WiFi et j'escompte mettre à jour toutes les heures par Internet. Pas de problème. Mais je ne vois pas comment maintenir l'heure à jour par l'horloge interne de l'ESP32 afin de rafraichir l'affichage toutes les secondes. J'ai bien trouvé des explications chez Espressif mais je n'arrive pas à les mettre en oeuvre.
    Si quelqu'un pouvait éclairer ma lanterne ...Merci.
    Michel

  2. #2
    Expert confirmé

    Homme Profil pro
    mad scientist :)
    Inscrit en
    Septembre 2019
    Messages
    2 921
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : mad scientist :)

    Informations forums :
    Inscription : Septembre 2019
    Messages : 2 921
    Par défaut
    je ne comprends pas bien la question. Si vous avez une RTC pourquoi vous souciez vous de maintenir l'heure en utilisant l'horloge interne de l'Arduino. Il suffit de demander l'heure à la RTC quand vous en avez besoin (en plus le résonateur d'un Arduino genre UNO n'est pas super précis)

  3. #3
    Membre éclairé
    Homme Profil pro
    bricoleur
    Inscrit en
    Octobre 2014
    Messages
    406
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : bricoleur
    Secteur : Alimentation

    Informations forums :
    Inscription : Octobre 2014
    Messages : 406
    Par défaut
    Non justement je n'ai pas de RTC sur mon projet ESP32. Cest pour cela que je souhaite utiliser la gestion du temps en interne. Sachant que je resynchroniserai de temps en temps avec Internet comme je le faisais auparavant avec un module RTC.

  4. #4
    Membre éclairé
    Homme Profil pro
    bricoleur
    Inscrit en
    Octobre 2014
    Messages
    406
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : bricoleur
    Secteur : Alimentation

    Informations forums :
    Inscription : Octobre 2014
    Messages : 406
    Par défaut Solution trouvée
    Bonjour,
    enfin de compte j'ai trouvé la solution sur Internet par Github: ESP32Time de Felix Biego
    Si cela peut aider voici comment je procède:
    au départ je me connecte sur le Net pour obtenir l'heure et j'utilise la même procédure toutes les heures pour resynchroniser:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    //************ Lecture de l'heure sur Internet *********************************
    void miseALHeure(){
      WiFi.begin(ssid,pass);
      while(WiFi.waitForConnectResult() != WL_CONNECTED && i>17){     
        afficMsgLcd(i,0,".",false);
        delai('m',500);
        i++;
      }
      if(i>=16){
        afficLigLcd("Connexion WiFi","impossible");
        delai('s',2); ESP.restart();  //besoin du wifi au démarrage pour acquérir l'heure
      }
      configTime(gmtOffset,dayLightOffset,ntpServeur);
      struct tm ptm;
      if(getLocalTime(&ptm)) {
        rtc.setTimeStruct(ptm);
      }
      else{
        afficLigLcd("Obtention heure","impossible");
        return;
      }
      jS=ptm.tm_wday; jM=ptm.tm_mday;ms=ptm.tm_mon;an=ptm.tm_year+1900;
      hr=ptm.tm_hour+1;mn=ptm.tm_min;sd=ptm.tm_sec; 
      WiFi.disconnect(true);
      WiFi.mode(WIFI_OFF);  
    }
    Puis pour lire l'heure de l'ESP32:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    /************ lecture de l'heure sur ESP32 ************************************
      void lectureHeure(){
        jS=rtc.getDayofWeek();
        jM=rtc.getDay();
        ms=rtc.getMonth();
        an=rtc.getYear();
        hr=rtc.getHour(true);
        mn=rtc.getMinute();
        sd=rtc.getSecond();
      }
    Enfin j'affiche l'heure sur LCD:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    //************** affichage de l'heure *****************************************
    void afficDateHeure(){
      char buf0[40],buf1[40];
      sprintf(buf0,"%s %0d %s %d",nomJour[jS],jM,nomMois[ms], an);
      sprintf(buf1,"%02d:%02d:%02d",hr,mn,sd);
      afficLigLcd(buf0,buf1);
    }
    Je ne sais pas encore la dérive du temps ESP32 mais apparamment après quelques minutes de test cela n'a pas l'air important.
    Je suis preneur de toute remarque constructive. Merci
    Michel

  5. #5
    Expert confirmé

    Homme Profil pro
    mad scientist :)
    Inscrit en
    Septembre 2019
    Messages
    2 921
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : mad scientist :)

    Informations forums :
    Inscription : Septembre 2019
    Messages : 2 921
    Par défaut
    OK - je comprends le besoin alors

    Oui l’approche c’est la lecture NTP régulière pour éviter toute dérive de la partie gestion du temps de l’ESP

    Il semble que vous ayez trouvé la solution avec une bibliothèque mais au cas où ça aide, Un article sur ce thème

    https://www.upesy.fr/blogs/tutorials...r-arduino-code

  6. #6
    Membre éclairé
    Homme Profil pro
    bricoleur
    Inscrit en
    Octobre 2014
    Messages
    406
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : bricoleur
    Secteur : Alimentation

    Informations forums :
    Inscription : Octobre 2014
    Messages : 406
    Par défaut
    Merci pour cet infoDommage qu'on n'ai pas accès à l'utilisation des "TimeZones" pour gérer automatiquement les horaires été/hiver.

    Cordialement

  7. #7
    Expert confirmé

    Homme Profil pro
    mad scientist :)
    Inscrit en
    Septembre 2019
    Messages
    2 921
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : mad scientist :)

    Informations forums :
    Inscription : Septembre 2019
    Messages : 2 921
    Par défaut
    On peut faire des choses - cf

    https://randomnerdtutorials.com/esp3...ylight-saving/

    Pour la france
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    configTzTime("CET-1CEST-2,M3.5.0/02:00:00,M10.5.0/03:00:00", ntpServer);
    J’ai retrouvé un bout de code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
     
    #include <WiFi.h>
    const char *ssid = "xxx";
    const char *password = "xxx";
    const char* ntpServer = "pool.ntp.org";
     
    void setup() {
      Serial.begin(115200);
      WiFi.begin(ssid, password);
      Serial.println("\nTest WiFi ");
      while (WiFi.status() != WL_CONNECTED) {
        Serial.write('.');
        delay (500);
      }
      Serial.println("\nWiFi OK");
      configTzTime("CET-1CEST-2,M3.5.0/02:00:00,M10.5.0/03:00:00", ntpServer);
    }
     
    void loop() {
      time_t timestamp = time( NULL );
      char buffer[80];
      struct tm *pTime = localtime(&timestamp );
      strftime(buffer, 80, "%d/%m/%Y %H:%M:%S", pTime);
      Serial.println(buffer);
      delay(1000);
    }
    Le serveur NTP ne sera dérangé que une fois par heure - dans l’absolu il faut aussi prévoir la reconnection au wifi


    Aussi cet exemple pour 8266

    https://github.com/esp8266/Arduino/blob/master/libraries/esp8266/examples/NTP-TZ-DST/NTP-TZ-DST.ino

    PS: la recurrence est définie par une variable des bibliothèques ESP c’est la constante SNTP_UPDATE_DELAY qu’il faut modifier

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 2
    Dernier message: 16/02/2012, 16h31
  2. Gestion de l'heure
    Par developeuz93 dans le forum Langage
    Réponses: 2
    Dernier message: 01/06/2010, 16h23
  3. [Dates] Gestion de l'heure d'été
    Par Coussati dans le forum Langage
    Réponses: 3
    Dernier message: 28/03/2009, 19h05
  4. Gestion de l'heure sur Catalys 4500
    Par bbkenny dans le forum Windows Serveur
    Réponses: 0
    Dernier message: 24/04/2008, 12h18
  5. Réponses: 2
    Dernier message: 30/03/2007, 17h17

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo