diff --git a/Horloge_Nixie_firmware.ino b/Horloge_Nixie_firmware.ino index b851a67..5c31c8e 100644 --- a/Horloge_Nixie_firmware.ino +++ b/Horloge_Nixie_firmware.ino @@ -5,78 +5,103 @@ * * Horloge Nixie basée sur ESP + module RTC-DS1307, avec fonctionnalités wifi pour synchro NTP */ - #include "hardware.h" -#include "nixie.h" -#include "horlogerie.h" #include "secrets.h" +#include +#include +#include // Date and time functions using a DS1307 RTC connected via I2C and Wire lib +#include // The NTP library allows you to receive time information from the Internet. https://github.com/sstaub/NTP +#include "nixie.h" // Mes routines de pilotage d'affichage Nixie -// Date and time functions using a DS1307 RTC connected via I2C and Wire lib -#include - -// Les affectations physiques - -// event at to 14:45 (for tests) -uint8_t DAILY_EVENT_HH = 14; // event start time: hour -uint8_t DAILY_EVENT_MM = 45; // event start time: minute +const char *ssid = SECRET_WIFI_SSID; +const char *password = SECRET_WIFI_PASS; +char daysOfTheWeek[7][12] = {"Dimanche", "Lundi", "Mardi", "Mercredi", "Jeudi", "Vendredi", "Samedi"}; +WiFiUDP wifiUdp; +NTP ntp(wifiUdp); RTC_DS1307 rtc; -char daysOfTheWeek[7][12] = { - "Dimanche", - "Lundi", - "Mardi", - "Mercredi", - "Jeudi", - "Vendredi", - "Samedi" -}; +///////////////////////////////////////////////////// +//////////// FONCTIONS //////////////// +///////////////////////////////////////////////////// +// +void syncNTPtoRTC(){ -void setup () { - Serial.begin(115200); - Wire.begin(I2C_SDA,I2C_SCL); // Broches (SDA,SCL) de l'I2C pour la RTC + Serial.println ("Routine de synchro NTP vers RTC :"); + Serial.print ("- récupération du temps Internet : "); + ntp.update(); // récupération du temps NTP + Serial.println(ntp.formattedTime("%T")); // hh:mm:ss - // SETUP RTC MODULE - if (! rtc.begin()) { - Serial.println("Couldn't find RTC"); - while (1); - } + Serial.print ( "- enregistrement du temps Internet dans l'horlore RTC" ); + rtc.adjust(DateTime(ntp.year(), ntp.month(), ntp.day(), ntp.hours(), ntp.minutes(), ntp.seconds())); + Serial.println ( " : OK." ); + Serial.print ( "Maintenant l'horloge interne indique : " ); - // sets the RTC to the date & time on PC this sketch was compiled - rtc.adjust(DateTime(F(__DATE__), F(__TIME__))); - - // sets the RTC with an explicit date & time, for example to set - // January 21, 2021 at 3am you would call: - // rtc.adjust(DateTime(2021, 1, 21, 3, 0, 0)); - initwifintp(); + DateTime now = rtc.now(); + Serial.print(daysOfTheWeek[now.dayOfTheWeek()]); + Serial.print(" "); + Serial.print(now.day(), DEC); + Serial.print('/'); + Serial.print(now.month(), DEC); + Serial.print('/'); + Serial.print(now.year(), DEC); + Serial.print(" "); + Serial.print(now.hour(), DEC); + Serial.print(':'); + Serial.print(now.minute(), DEC); + Serial.print(':'); + Serial.println(now.second(), DEC); } + +///////////////////////////////////////////////////// +//////////// setup et loop //////////////// +///////////////////////////////////////////////////// +// +void setup () { + //// Initialisation de la liaison série + Serial.begin(115200); + Serial.println (""); + Serial.println ("Liaison série OK"); + + //// Connexion au WIFI + WiFi.begin(ssid, password); + Serial.print ("Connexion au WiFi"); + while ( WiFi.status() != WL_CONNECTED ) { + delay ( 500 ); + Serial.print ( "." ); + } + Serial.println ( " OK" ); + + // Récup du temps avec prise en compte de l'heure d'été pour la France + Serial.print("Initialisation NTP"); + ntp.ruleDST("CEST", Last, Sun, Mar, 2, 120); // last sunday in march 2:00, timetone +120min (+1 GMT + 1h summertime offset) + ntp.ruleSTD("CET", Last, Sun, Oct, 3, 60); // last sunday in october 3:00, timezone +60min (+1 GMT) + ntp.begin(); + Serial.println(" : OK"); + Serial.print("- sur Internet, nous sommes le : "); + ntp.update(); + Serial.println(ntp.formattedTime("%A %d/%m/%Y, il est : %T")); // www dd/mm/yyyy hh:mm:ss + + Serial.print("Initialisation RTC"); + if (! rtc.begin()) { + Wire.begin(I2C_SDA,I2C_SCL); // Broches (SDA,SCL) de l'I2C pour la RTC + delay(1000); + if (! rtc.begin()) { + Serial.println(" --> RTC introuvable ! Fin."); + while (1); + } + } + Serial.println (" : OK"); + + syncNTPtoRTC(); +} + +///////////////////////////////////////////////////// + void loop () { - DateTime now = rtc.now(); - printTime(now); - if (now.hour() == DAILY_EVENT_HH && - now.minute() == DAILY_EVENT_MM) { - Serial.println("It is on scheduled time"); - // TODO: write your code" - } else { - Serial.println("It is NOT on scheduled time"); - } - delay(1000); -} -void printTime(DateTime time) { - Serial.print("Date : "); - Serial.print(time.year(), DEC); - Serial.print('/'); - Serial.print(time.month(), DEC); - Serial.print('/'); - Serial.print(time.day(), DEC); - Serial.print(" ("); - Serial.print(daysOfTheWeek[time.dayOfTheWeek()]); - Serial.print(") - Heure : "); - Serial.print(time.hour(), DEC); - Serial.print(':'); - Serial.print(time.minute(), DEC); - Serial.print(':'); - Serial.println(time.second(), DEC); + Serial.println("Rien"); + delay(10000); + } diff --git a/boutsdecode.txt b/boutsdecode.txt new file mode 100644 index 0000000..3bbef67 --- /dev/null +++ b/boutsdecode.txt @@ -0,0 +1,15 @@ + +// event at to 14:45 (for tests) +uint8_t DAILY_EVENT_HH = 14; // event start time: hour +uint8_t DAILY_EVENT_MM = 45; // event start time: minute + + + DateTime now = rtc.now(); + printTime(now); + if (now.hour() == DAILY_EVENT_HH && + now.minute() == DAILY_EVENT_MM) { + Serial.println("It is on scheduled time"); + // TODO: write your code" + } else { + Serial.println("It is NOT on scheduled time"); + } \ No newline at end of file diff --git a/horlogerie.cpp b/horlogerie.cpp deleted file mode 100644 index 1766b02..0000000 --- a/horlogerie.cpp +++ /dev/null @@ -1,49 +0,0 @@ -#include "horlogerie.h" -#include "Arduino.h" -#include "hardware.h" -#include "secrets.h" - -#include -#include -#include - - -void initwifintp() { - - // Replace with your network credentials (see in 'arduino_secrets.h' file) - char ssid[] = SECRET_WIFI_SSID; - const char* password = SECRET_WIFI_PASS; - - // Define NTP Client to get time - WiFiUDP ntpUDP; - NTPClient timeClient(ntpUDP); - - // Variables to save date and time - String formattedDate; - String dayStamp; - String timeStamp; - - // Initialize Serial Monitor - Serial.begin(115200); - Serial.print("Connecting to "); - Serial.println(ssid); - WiFi.begin(ssid, password); - while (WiFi.status() != WL_CONNECTED) { - delay(100); - Serial.print("."); - } - // Print local IP address and start web server - Serial.println(""); - Serial.println("WiFi connected."); - Serial.println("IP address: "); - Serial.println(WiFi.localIP()); - - // Initialize a NTPClient to get time - timeClient.begin(); - // Set offset time in seconds to adjust for your timezone, for example: - // GMT +1 = 3600 - // GMT +8 = 28800 - // GMT -1 = -3600 - // GMT 0 = 0 - timeClient.setTimeOffset(3600); -} \ No newline at end of file diff --git a/horlogerie.h b/horlogerie.h deleted file mode 100644 index e53e38c..0000000 --- a/horlogerie.h +++ /dev/null @@ -1,11 +0,0 @@ -/* fichier nixie.h */ -#include "Arduino.h" -#include "hardware.h" -#include "secrets.h" - -#include -#include -#include - - -void initwifintp(); \ No newline at end of file diff --git a/secrets.h.default b/secrets.h.default index c13a152..492e987 100644 --- a/secrets.h.default +++ b/secrets.h.default @@ -1,2 +1,4 @@ +## Change with your credentials and rename this file in 'secrets.h' + #define SECRET_WIFI_SSID "YOUR_SSID" #define SECRET_WIFI_PASS "YOUR_PASS"