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 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168
| #include <TouchScreen.h>
#include <Elegoo_GFX.h>
#include <Elegoo_TFTLCD.h>
#include <registers.h>
#define LCD_CS A3
#define LCD_CD A2
#define LCD_WR A1
#define LCD_RD A0
#define LCD_RESET A4
#define TS_MINX 122
#define TS_MINY 111
#define TS_MAXX 942
#define TS_MAXY 890
#define YP A3
#define XM A2
#define YM 9
#define XP 8
#define BLACK 0x0000
#define BLUE 0x001F
#define RED 0xF800
#define GREEN 0x07E0
#define CYAN 0x07FF
#define MAGENTA 0xF81F
#define YELLOW 0xFFE0
#define WHITE 0xFFFF
Elegoo_TFTLCD tft(LCD_CS, LCD_CD, LCD_WR, LCD_RD, LCD_RESET);
/***********************************************************************************
Horloge connectée à base d'ESP8266 ou d'ESP32
Affichage de l'heure et de la date dans le moniteur série.
L'heure est obtenue grâce à un serveur NTP
https://electroniqueamateur.blogspot.com/2018/10/horloge-wi-fi-esp8266.html
*************************************************************************************/
#if defined ARDUINO_ARCH_ESP8266 // s'il s'agit d'un ESP8266
#include <ESP8266WiFi.h>
#elif defined ARDUINO_ARCH_ESP32 // s'il s'agit d'un ESP32
#include "WiFi.h"
#endif
#include <time.h>
const char* ssid = "**********";
const char* password = "**********";
const int decalage = -4; // la valeur dépend de votre fuseau horaire. Essayez 2 pour la France.
const int delaiDemande = 5 * 60; // nombre de secondes entre deux demandes consécutives au serveur NTP
unsigned long derniereDemande = millis(); // moment de la plus récente demande au serveur NTP
unsigned long derniereMaJ = millis(); // moment de la plus récente mise à jour de l'affichage de l'heure
time_t maintenant;
struct tm * timeinfo;
void afficheHeureDate() {
// à voir s'il ne faut pas effacer la zone avant
timeinfo = localtime(&maintenant);
tft.setCursor(10, 50);
if ((timeinfo->tm_hour ) < 10) {
Serial.print("0");
tft.print("0");
}
Serial.print(timeinfo->tm_hour ); // heure entre 0 et 23
tft.print(timeinfo->tm_hour);
Serial.print(":");
tft.print(":");
if (timeinfo->tm_min < 10) {
Serial.print("0");
tft.print("0");
}
Serial.print(timeinfo->tm_min); // timeinfo->tm_min: minutes (0 - 59)
tft.print(timeinfo->tm_min);
Serial.print(":");
tft.print(":");
if (timeinfo->tm_sec < 10) {
Serial.print("0");
tft.print("0");
}
Serial.print(timeinfo->tm_sec); // timeinfo->tm_sec: secondes (0 - 60)
tft.print(timeinfo->tm_sec);
}
void setup() {
Serial.begin(115200);
WiFi.mode(WIFI_STA);
Serial.println();
WiFi.begin(ssid, password);
Serial.print("Connexion au reseau WiFi");
while (WiFi.status() != WL_CONNECTED) {
Serial.print(".");
delay(1000);
}
Serial.println();
configTime(decalage * 3600, 0, "ca.pool.ntp.org"); //serveurs canadiens
// en Europe, essayez europe.pool.ntp.org ou fr.pool.ntp.org
Serial.print("Attente date et heure");
while (time(nullptr) <= 100000) {
Serial.print(".");
delay(1000);
}
time(&maintenant);
Serial.println("");
tft.reset();
tft.begin(0x9341); // SPFD5408 compatible
tft.setRotation(2); // This settings works for me with correct orientation
tft.fillScreen(BLACK); //Set Background Color with BLACK
tft.setTextColor(GREEN);
tft.setTextSize(4);
}
void loop() {
// est-ce le moment de demander l'heure NTP?
if ((millis() - derniereDemande) >= delaiDemande * 1000ul ) {
time(&maintenant);
derniereDemande = millis();
Serial.println("Interrogation du serveur NTP");
}
// est-ce que millis() a débordé?
if (millis() < derniereDemande ) {
time(&maintenant);
derniereDemande = millis();
}
// est-ce le moment de raffraichir la date indiquée?
if ((millis() - derniereMaJ) >= 1000ul ) {
maintenant = maintenant + 1;
afficheHeureDate();
derniereMaJ = millis();
}
} |
Partager