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 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107
| #include <WiFi.h>
#include <NTPClient.h> // https://github.com/taranais/NTPClient
#include <WiFiUdp.h>
const char* ssid = "*********";
const char* password = "*********";
WiFiUDP ntpUDP;
NTPClient timeClient(ntpUDP);
#include <RTClib.h>
RTC_DS3231 rtc;
const char* jours[] = {"Dimanche", "Lundi", "Mardi", "Mercredi", "Jeudi", "Vendredi", "Samedi"};
const char* mois[] = {"Janvier", "Février", "Mars", "Avril", "Mai", "Juin", "Juillet", "Août", "Septembre", "Octobre", "Novembre", "Décembre"};
void imprimerDateRTC(DateTime& d) {
Serial.print("---\nHeure RTC: Nous sommes le ");
Serial.print(jours[d.dayOfTheWeek()]); Serial.write(' ');
Serial.print(d.day()); Serial.write(' ');
Serial.print(mois[d.month() - 1]); Serial.write(' ');
Serial.print(d.year()); Serial.print(", il est ");
Serial.print(d.hour());
Serial.print('h');
if (d.minute() < 10) Serial.write('0');
Serial.print(d.minute());
Serial.print(" et ");
Serial.print(d.second());
Serial.println(" secondes.");
Serial.print("Jour de semaine : ");
Serial.println(d.dayOfTheWeek());
}
void imprimerDateNTP(struct tm *pTime) {
Serial.print("---\nHeure NTP: Nous sommes le ");
Serial.print(jours[pTime->tm_wday]); Serial.write(' ');
Serial.print(pTime->tm_mday); Serial.write(' ');
Serial.print(mois[pTime->tm_mon]); Serial.write(' ');
Serial.print(pTime->tm_year + 1900); Serial.print(", il est ");
Serial.print(pTime->tm_hour);
Serial.print('h');
if (pTime->tm_min < 10) Serial.write('0');
Serial.print(pTime->tm_min);
Serial.print(" et ");
Serial.print(pTime->tm_sec);
Serial.println(" secondes.");
Serial.print("Jour de semaine : ");
Serial.println(pTime->tm_wday);
}
void setup() {
Serial.begin(115200);
while (!Serial);
WiFi.begin(ssid, password);
if (WiFi.waitForConnectResult() != WL_CONNECTED) {
Serial.println("Erreur connexion WiFi");
while (true) yield();
}
Serial.println("WiFi OK");
Serial.print("Adresse IP: ");
Serial.println(WiFi.localIP());
if (! rtc.begin()) {
Serial.println("Couldn't find RTC");
while (true) yield();
}
Serial.println("RTC trouvée");
if (rtc.lostPower()) {
Serial.println("Force l'heure de la RTC");
rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
}
DateTime maintenant = rtc.now();
imprimerDateRTC(maintenant);
timeClient.begin();
timeClient.setTimeOffset(7200);
while (!timeClient.update()) timeClient.forceUpdate();
time_t timestamp = timeClient.getEpochTime(); // heure UNIX
struct tm *tmPtr = localtime(×tamp);
imprimerDateNTP(tmPtr);
// changement de l'heure de la RTC
rtc.adjust(DateTime(tmPtr->tm_year + 1900, tmPtr->tm_mon + 1, tmPtr->tm_mday, tmPtr->tm_hour, tmPtr->tm_min, tmPtr->tm_sec));
maintenant = rtc.now();
imprimerDateRTC(maintenant);
// sinon on peut directement utiliser les fonctions de l'ESP32
configTime(0, 0, "pool.ntp.org");
setenv("TZ", "CET-1CEST,M3.5.0/2,M10.5.0/3", 1); // France
}
void loop() {
delay(5000);
DateTime maintenantDT = rtc.now();
imprimerDateRTC(maintenantDT);
struct tm timeinfo;
getLocalTime(&timeinfo);
imprimerDateNTP(&timeinfo);
} |
Partager