esp8266 affichage de l'heure au 1 jan 1970

Bonjour a tous,

Je butte sur un affichage d'heure et de date dans la console qui reste désespérément au 1 janvier1970.

Le code que j'utilise fonction dans un sketch tout seul, par contre quand je l’intègre avec du code supplémentaire il me donne une date en 1970.

Je galère et je ne vois pas d'ou cela vient.

Voici mon code, désolé il ne doit pas être très lisible et clair, car je ne suis pas un pro.

Par contre j'ai essayé de mettre mon code, mais il excède le nombre de caractères , comment puis je mettre mon code ?

Merci d'avance

Bonjour,

Tu le mets en fichier attaché.

Ok et merci kamill

voici mon code:

dht22_6.ino (10.2 KB)

Treza88:
'heure et date dans la console qui restent désespérément au 1 janvier1970.

cette date n'est pas anodine, c'est l'origine de l'"Unix Time".
L'Unix Time est le nombre de secondes écoulées depuis cette date.
Donc dans ton programme, tu dois avoir un bug qui met à zéro une variable qui devrait contenir l'Unix Time.
Du coup, retour en 1970 !

ce code semble louche... c'est quoi ce server ? (dans une config NTP pourquoi pas mais est-ce bien cette API ici ?)

configTime(1 * 3600, 0, "server 0.fr.pool.ntp.org");

peut-être un truc du genre:un truc du genre

const char *ntpServer = "0.fr.pool.ntp.org";
const long gmtOffset_sec = 3600;
const int daylightOffset_sec = 0;
configTime(gmtOffset_sec, daylightOffset_sec, ntpServer);

Bonjour et merci de vos retour.

Biggil merci pour tes précision je vois bien ton raisonnement, mais je ne trouve pas le bug, pour plus de précision il ne met pas a 0 mais a 28800 exactement car l'heure débute a 8h.

J-M-L j'ai bien tester de gérer le code avec des constantes, mais rien n'y fait non plus.

J'ai beau chercher l'erreur et faire des changements, mais je reste toujours en 1970 le 1 janvier a 8h, ce qui me fait bizarre car je suis en train d'utiliser un ordinateur qui n'existe pas a cette date et que j'ai a peine 2 ans.

Si vous avez une autre idée, merci d'avance

écrivez un code tout simple qui ne fait que configurer le réseau et accès internet, puis le configTime() et ensuite affichez l'heure et regardez si ça fonctionne. --> Postez ce code (vous semblez l'avoir)

tant que ce truc là ne fonctionne pas, pas la peine d'aller plus loin.

ensuite on peut comparer le code qui marche à votre intégration.

Ok J-M-L.

Voici le code simple qui fonctionne

Jour_Heure.ino (670 Bytes)

Quand le code est court, postez le directement dans le forum avec les balises de code.

#include <ESP8266WiFi.h>
#include <time.h>


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

int timezone = 2;
int dst = 1;

void setup() {
  Serial.begin(115200);
  Serial.setDebugOutput(true);

  WiFi.mode(WIFI_STA);
  WiFi.begin(ssid, password);
  Serial.println("\nConnecting to WiFi");
  while (WiFi.status() != WL_CONNECTED) {
    Serial.print(".");
    delay(1000);
  }

  configTime(1 * 3600, 0, "0.fr.pool.ntp.org");
  Serial.println("\nWaiting for time");
  while (!time(nullptr)) {
    Serial.print(".");
    delay(1000);
  }
  Serial.println("");
}

void loop() {
  time_t now = time(nullptr);
  Serial.println(ctime(&now));
  delay(1000);
}

==> Donc on est bien d'accord que dans ce code (j'ai pas testé) qui "fonctionne" vous écrivez

  configTime(1 * 3600, 0, "0.fr.pool.ntp.org");

et dans l'autre vous avez:

 configTime(1 * 3600, 0, "server 0.fr.pool.ntp.org");

--> pourquoi cette différence ?

configTime(1 * 3600, 0, "[color=red]server[/color] 0.fr.pool.ntp.org");

Treza88:
et que j'ai a peine 2 ans.

Whaou ! vraiment très très impressionnant ! et tu as commencé à quel age ?
;D ;D ;D

Oui dans ton premier post tu m"en avais parlé je j'ai supprimé mais ça na rien changé.

Par contre en faisant d'autre test je me suis a perçu que le code simple affichait la date de 1970 en première ligne de la console et après il basculait en 2019.

Est ce que le code des dht qui est avec pourrait empêcher que le code bascule en 2019 et qu'il continu sur la date de 1970

Sinon comment modifier le code simple pour qu'il affiche la date de 2019 des le départe du code?

Çà pourrait peut être résoudre le problème.

si le premier affiche 1970 c'est que le premier

  time_t now = time(nullptr);

n'a pas marché.

Le type time_t sert à représenter le temps depuis le 00h00 du 1er janvier 1970 --> quand now vaut zéro c'est donc que la fonction a retourné un temps erroné...

si vous faites un

void loop() {
  time_t now = time(nullptr);
  if (now) Serial.println(ctime(&now));
  delay(1000);
}

ça n'affichera que quand le temps retourné n'est pas merdique.

Merci J-M-L pour ta modification de code mais rien y fait, je suis toujours en 1970.

Et quand je parlait du premier c'est dans le code simple mais pas dans l'autre, dans l'autre code toute les date son en 1970

Qu'est-ce que ce code fait:

#include <ESP8266WiFi.h>
#include <time.h>


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

int timezone = 2;
int dst = 1;

void setup() {
  Serial.begin(115200);
  Serial.setDebugOutput(true);

  WiFi.mode(WIFI_STA);
  WiFi.begin(ssid, password);
  Serial.println("\nConnecting to WiFi");
  while (WiFi.status() != WL_CONNECTED) {
    Serial.print(".");
    delay(1000);
  }

  configTime(1 * 3600, 0, "0.fr.pool.ntp.org");
  Serial.println("\nWaiting for time");
  while (!time(nullptr)) {
    Serial.print(".");
    delay(1000);
  }
  Serial.println("");
}

void loop() {
  time_t now = time(nullptr);
  if (now) Serial.println(ctime(&now));
  delay(1000);
}

C'est le code simple qui donne la date et l'heure toutes les secondes

extrait de la console:

Sun Nov  3 14:28:35 2019

Sun Nov  3 14:28:36 2019

Sun Nov  3 14:28:37 2019

Sun Nov  3 14:28:38 2019

Contrairement au resultat de la console avec l'autre code:

Thu Jan  1 08:02:33 1970

Thu Jan  1 08:02:35 1970

Thu Jan  1 08:02:37 1970

Thu Jan  1 08:02:39 1970

repostez tout l'autre code

L'autre code est toujours téléchargeable depuis le post N°3

Tentative folle:
Essaye de mettre

 configTime(1 * 3600, 0, "0.fr.pool.ntp.org");
  Serial.println("\nWaiting for time");
  while (!time(nullptr)) {
    Serial.print(".");
    delay(1000);
  }
  Serial.println("");

toute de suite après la connexion établie.

  while (WiFi.status() != WL_CONNECTED) {
    delay(1000);
    Serial.println(".");
  }

Merci savoriano,

Mais cette partie de code était déjà dans mon code dans le void setup

 while (WiFi.status() != WL_CONNECTED) {
    delay(1000);
    Serial.println(".");
  }

Voir ici pour l'utilisation de la bibliothèque Ntpclient Lib et le nom du serveur ntp utilisé : pool.ntp.org ou fr.ntp.org