/* * https://github.com/arduino-libraries/NTPClient/blob/master/NTPClient.h ESP8266 ESP8266_HW-341A Rouge 2x15 pins BOARD : NodeMCU 1.0 (ESP_12E Module) nodemcuv2 ESP-D2823A mac address: 84:F3:EB:D2:82:3A Summer time starts 03:00:00 CET Sun Mar 29 2015 Summer time ends 02:00:00 CET Sun Oct 25 2015 */ #include #include // Appel des bibs #include #include #include #include // version 2.23.15 installed #include // adresse I2C = 0x78 // voir nodemcu_esp8266_pinout.jpg #include #include #include #define SCL 12 // D6 GPIO12 #define SDA 14 // D5 GPIO14 #define VERSION "29-05-2025" //#define VERSION "04-11-2024" #define DIRECTORY "D:\\_ESP8266_avec_OLED_HW-364A_2025\\_ESP8266_HW364A-Rouge_server_NTP_2025" #define MODULE "ESP8266_HW-341A ESP-D2823A" #define BOARD "NodeMCU 1.0 (ESP_12E Module) nodemcuv2" #define LED_Bleue 4 //led bleue 2 (pull Up) interne au module ESP // Declarations WIFI const char* ssid = "Freebox-5CF3C9"; const char* password = "mittebant-lacrymula.-fimbri-inmensum"; // Création des objets const int oneWireBus = 4; // ATTENTION ! pin repérée D2 ... DS18B20 OneWire ds(oneWireBus);// Setup a oneWire instance to communicate with OneWire devices (DS18B20) DallasTemperature sensors(&ds);// Pass our oneWire reference to Dallas Temperature sensor float tempC; // Variables de travail int i; int j; int k; unsigned long epoch = 0; int nujour = 0; //numero jour de la semaine avec 0 pour dimanche String jour = "mon jour"; // dimanche, lundi, etc. String heure = "mon heure .."; char buffer[80]; // Stockage de la date complete float temperatureC ; byte addr[8]; #define HIVER '1' #define ETE '0' int jd; int m1; int mn; int hh; int CH=HIVER; int Once=1; // Declaration des couleurs #define BLACK 0x0000 #define BLUE 0x001F #define RED 0xF800 #define GREEN 0x07E0 #define CYAN 0x07FF #define MAGENTA 0xF81F #define YELLOW 0xFFE0 #define WHITE 0xFFFF unsigned long lastTime = 0; unsigned long timerDelay = 4500; //4sec U8G2_SSD1306_128X64_NONAME_F_SW_I2C u8g2(U8G2_R0,SCL,SDA, U8X8_PIN_NONE); void setBusClock(uint32_t clock_speed); IPAddress local_IP(192, 168, 1, 11); IPAddress gateway(192, 168, 1, 254); IPAddress subnet(255, 255, 255, 0); IPAddress primaryDNS(212,27,40,241); //optional IPAddress secondaryDNS(212,27,40,240); //optional //Creation objet WIFI UDP WiFiUDP ntpUDP; //Creation objet client NTP avec les parametres suivants : // - pool de serveurs NTP // - en option le décalage horaire en secondes, ici 3600 pour GMT+1, pour GMT+8 mettre 28800, etc. // - en option l intervalle de mise à jour en millisecondes par défaut à 60 secondes NTPClient timeClient(ntpUDP, "europe.pool.ntp.org", 7200, 60000); // hiver String readDSTemperatureC() { // Call sensors.requestTemperatures() to issue a global temperature and Requests to all devices on the bus sensors.requestTemperatures(); float tempC1 = sensors.getTempCByIndex(0); if(tempC1 == -127.00) { Serial.println("Failed to read from DS18B20 sensor"); return "--"; } else { Serial.print("Temperature Celsius: "); Serial.print(tempC1); Serial.println(" degC"); } return String(tempC1); } void OneWireScanner(){ if ( !ds.search(addr)) { Serial.println(" No more addresses."); Serial.println(); ds.reset_search(); return; } Serial.print(" ROM = "); for( i = 0; i < 8; i++) { Serial.write(' '); Serial.print("0x"); if (addr[i] < 0x10) Serial.write('0'); Serial.print(addr[i], HEX); if ( i != 7 ) { Serial.print(", "); } } if (OneWire::crc8(addr, 7) != addr[7]) { Serial.println("CRC is not valid!"); return; } Serial.println(); // the first ROM byte indicates which chip switch (addr[0]) { case 0x10: Serial.println(" Chip = DS18S20"); // or old DS1820 // type_s = 1; break; case 0x28: Serial.println(" Chip = DS18B20"); // type_s = 0; break; case 0x22: Serial.println(" Chip = DS1822"); // type_s = 0; break; default: Serial.println(" other family device."); return; } Serial.println(); } void setup(){ // Demarrage liaison serie Serial.begin(115200); // Demarrage ecran oled ssd1331 // Connection au reseau WIFI Serial.begin(115200); Serial.println("\r\n"); Serial.print(" Directory : "); Serial.println(DIRECTORY); Serial.print(" MODULE : "); Serial.println(MODULE); Serial.print(" BOARD : "); Serial.println(BOARD); Serial.println(F(" ESP8266 NodeMCU ESP-D2823A avec SSD1306 OLED inclus\r\n")); Serial.print(" _ESP8266_HW364A-Rouge_server_NTP_2025 "); Serial.println(VERSION); Serial.println(" NTP Server: europe.pool.ntp.org"); Serial.println(" version 2.23.15 installed"); Serial.println(" D5=SDA=GPIO14,D6=SCL=GPIO12,I2C@=0x78\r\n DS18B20 sur pin D2"); Serial.print("\r\n ESP getCoreVersion : "); Serial.println(ESP.getCoreVersion()); Serial.print(" ESP getSdkVersion : "); Serial.println(ESP.getSdkVersion() ); u8g2.setBusClock(600000); u8g2.setI2CAddress(0x78); // LCD pinMode(LED_Bleue, OUTPUT); // digitalWrite(LED_Bleue, LOW); delay(1000); digitalWrite(LED_Bleue, HIGH); delay(1000); // Start up the DS18B20 library sensors.begin(); Serial.println("\r\n Scan OWS Sensors :"); OneWireScanner(); Serial.print(" "); //Serial.println(readDSTemperatureC()); readDSTemperatureC(); u8g2.begin(); u8g2.clearBuffer(); u8g2.setFont(u8g2_font_7x14B_tf); u8g2.drawStr(0,14, " NTP Server "); u8g2.drawStr(10,28,"ESP8266 341A "); u8g2.drawStr(10,42,"I2C @0x78 "); u8g2.drawStr(10,56,"D5=SDA D6=SCL"); u8g2.sendBuffer(); delay(4000); j=0; Serial.println(" Attente connection STAtion Wifi\r\n"); u8g2.clearBuffer(); u8g2.setFont(u8g2_font_ncenR18_tf ); // Font size 18 u8g2.drawStr(10, 38,"Wait Wifi"); u8g2.sendBuffer(); WiFi.begin(ssid, password); while ( WiFi.status() != WL_CONNECTED ) { delay ( 500 ); Serial.print ( "." ); } Serial.println ( "." ); // Demarrage client NTP timeClient.begin(); } void loop() { /* if ( ( m1==0x03) && (jd>0x24) && (nujour==7) && (heure==0x02) && (mn==0x00) && (CH==HIVER)) { CH=ETE ; //'0' _timeOffset=7200; NTPClient timeClient(ntpUDP, "europe.pool.ntp.org",_timeOffset, 60000);//ete } } if ( ( m1==0x03) && (jd>0x24) && (nujour==7) && (heure==0x02) && (mn==0x00) && (CH==HIVER)) { CH=ETE ; // ETE ='0' _timeOffset=3600; CPrint("Passage en Horaire d'Hiver "); NTPClient timeClient(ntpUDP, "europe.pool.ntp.org",_timeOffset, 60000);// été } */ // Recup heure puis affichage timeClient.update(); epoch = timeClient.getEpochTime(); // Heure Unix nujour = timeClient.getDay(); // jour de la semaine heure = timeClient.getFormattedTime(); // heure // Calcul de la date en convertissant le temps UNIX epoch time_t timestamp = epoch; struct tm * pTime = localtime( & timestamp ); strftime( buffer,80, "%d/%m/%Y", pTime ); // Serial.println(" "); switch (nujour) { // on determine le jour case 0: jour = "dimanche"; break; case 1: jour = "lundi"; break; case 2: jour = "mardi"; break; case 3: jour = "mercredi"; break; case 4: jour = "jeudi"; break; case 5: jour = "vendredi"; break; case 6: jour = "samedi"; break; } // Envoi des donnees recuperees sur la liaison serie if (j%60==0) { Serial.print("\r\nTemps UNIX : "); Serial.print(epoch); } Serial.print(" J="); Serial.print(j); Serial.print(","); Serial.print(jour); Serial.print(","); Serial.print(timeClient.getFormattedTime()); Serial.print(","); if( Once==1) { jd=(buffer[0]-48) *10 ; jd=jd+(buffer[1]-48); m1=(buffer[3]-48) *10; m1= m1+(buffer[4]-48); hh=(heure[0]-48)*10; hh= hh+ (heure[1]-48); mn=(heure[3]-48)*10; mn= mn+ (heure[4]-48); Serial.println(" "); Serial.print("mois="); Serial.print(m1,DEC);Serial.println(" "); Serial.print("jour="); Serial.print(jd,DEC);Serial.println(" "); Serial.print("heure=");Serial.print(hh,DEC);Serial.println(" "); Serial.print("minute="); Serial.print(mn,DEC);Serial.println(" "); Serial.println(" "); Once=0; } // Affichage sur oled ssd1331 u8g2.clearBuffer(); u8g2.setFont(u8g2_font_10x20_tf); u8g2.setCursor(8, 14); u8g2.print(jour); // u8g2.setFont(u8g2_font_7x14B_tf); u8g2.setFont(u8g2_font_ncenR18_tf ); // Font size 18 if((j & 0x0001)>0) { u8g2.setCursor(8, 42); // was 8,28 u8g2.print(temperatureC); u8g2.write(' ');u8g2.write(0xB0);u8g2.write('c'); } else { u8g2.setCursor(8,42); u8g2.print(heure); } u8g2.setFont(u8g2_font_7x14B_tf); u8g2.drawStr(8,64,buffer); u8g2.sendBuffer(); j++; delay(900); // tempo de 1 sec Serial.print(buffer); sensors.requestTemperatures(); delay(98); temperatureC = sensors.getTempCByIndex(0); if (temperatureC < -10.0) temperatureC= -9.99; Serial.print(",DS#1= "); Serial.print(temperatureC); Serial.println(" degC"); } /* =================================== Creating BIN file "C:\Users\Paul\AppData\Local\Temp\arduino_build_309705/_ESP8266_HW364A-Rouge_server_NTP_2024.ino.bin" using "C:\Users\Paul\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\3.1.2/bootloaders/eboot/eboot.elf" and "C:\Users\Paul\AppData\Local\Temp\arduino_build_309705/_ESP8266_HW364A-Rouge_server_NTP_2024.ino.elf" "C:\\Users\\Paul\\AppData\\Local\\Arduino15\\packages\\esp8266\\tools\\python3\\3.7.2-post1/python3" -I "C:\\Users\\Paul\\AppData\\Local\\Arduino15\\packages\\esp8266\\hardware\\esp8266\\3.1.2/tools/signing.py" --mode sign --privatekey "D:\\_ESP8266_avec_OLED_HW-364A_2024\\_ESP8266_HW364A-Rouge_server_NTP_2024/private.key" --bin "C:\\Users\\Paul\\AppData\\Local\\Temp\\arduino_build_309705/_ESP8266_HW364A-Rouge_server_NTP_2024.ino.bin" --out "C:\\Users\\Paul\\AppData\\Local\\Temp\\arduino_build_309705/_ESP8266_HW364A-Rouge_server_NTP_2024.ino.bin.signed" --legacy "C:\\Users\\Paul\\AppData\\Local\\Temp\\arduino_build_309705/_ESP8266_HW364A-Rouge_server_NTP_2024.ino.bin.legacy_sig" "C:\\Users\\Paul\\AppData\\Local\\Arduino15\\packages\\esp8266\\tools\\python3\\3.7.2-post1/python3" -X utf8 -I "C:\\Users\\Paul\\AppData\\Local\\Arduino15\\packages\\esp8266\\hardware\\esp8266\\3.1.2/tools/sizes.py" --elf "C:\\Users\\Paul\\AppData\\Local\\Temp\\arduino_build_309705/_ESP8266_HW364A-Rouge_server_NTP_2024.ino.elf" --path "C:\\Users\\Paul\\AppData\\Local\\Arduino15\\packages\\esp8266\\tools\\xtensa-lx106-elf-gcc\\3.1.0-gcc10.3-e5f9fec/bin" --mmu "-DMMU_IRAM_SIZE=0x8000 -DMMU_ICACHE_SIZE=0x8000" . Variables and constants in RAM (global, static), used 31884 / 80192 bytes (39%) ║ SEGMENT BYTES DESCRIPTION ╠══ DATA 1612 initialized variables ╠══ RODATA 2480 constants ╚══ BSS 27792 zeroed variables . Instruction RAM (IRAM_ATTR, ICACHE_RAM_ATTR), used 60735 / 65536 bytes (92%) ║ SEGMENT BYTES DESCRIPTION ╠══ ICACHE 32768 reserved space for flash instruction cache ╚══ IRAM 27967 code in IRAM . Code in flash (default, ICACHE_FLASH_ATTR), used 274552 / 1048576 bytes (26%) ║ SEGMENT BYTES DESCRIPTION ╚══ IROM 274552 code in flash Multiple libraries were found for "NTPClient.h" Used: C:\Users\Paul\AppData\Local\Arduino15\libraries\NTPClient-master Not used: C:\Users\Paul\AppData\Local\Arduino15\libraries\ESP8266_Weather_Station Using library NTPClient-master at version 3.1.0 in folder: C:\Users\Paul\AppData\Local\Arduino15\libraries\NTPClient-master Using library ESP8266WiFi at version 1.0 in folder: C:\Users\Paul\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\3.1.2\libraries\ESP8266WiFi Using library U8g2 at version 2.32.15 in folder: C:\Users\Paul\AppData\Local\Arduino15\libraries\U8g2 Using library Wire at version 1.0 in folder: C:\Users\Paul\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\3.1.2\libraries\Wire Using library SPI at version 1.0 in folder: C:\Users\Paul\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\3.1.2\libraries\SPI C:\Users\Paul\AppData\Local\Arduino15\packages\esp8266\tools\python3\3.7.2-post1/python3 -I C:\Users\Paul\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\3.1.2/tools/upload.py --chip esp8266 --port COM4 --baud 115200 --before default_reset --after hard_reset write_flash 0x0 C:\Users\Paul\AppData\Local\Temp\arduino_build_309705/_ESP8266_HW364A-Rouge_server_NTP_2024.ino.bin esptool.py v3.0 Serial port COM4 Connecting.... Chip is ESP8266EX Features: WiFi Crystal is 26MHz MAC: 84:f3:eb:d2:82:3a Uploading stub... Running stub... Stub running... Configuring flash size... Auto-detected Flash size: 4MB Compressed 310768 bytes to 227983... Writing at 0x00000000... (7 %) Writing at 0x00004000... (14 %) Writing at 0x00008000... (21 %) Writing at 0x0000c000... (28 %) Writing at 0x00010000... (35 %) Writing at 0x00014000... (42 %) Writing at 0x00018000... (50 %) Writing at 0x0001c000... (57 %) Writing at 0x00020000... (64 %) Writing at 0x00024000... (71 %) Writing at 0x00028000... (78 %) Writing at 0x0002c000... (85 %) Writing at 0x00030000... (92 %) Writing at 0x00034000... (100 %) Wrote 310768 bytes (227983 compressed) at 0x00000000 in 20.0 seconds (effective 124.2 kbit/s)... Hash of data verified. Leaving... Hard resetting via RTS pin... */