↩ Alle projecten en sketches This page in English
ESP8266 · ESP32 · TM1637

TM1637-display: NTP-klok met ESP8266 of ESP32

TM1637 7-segment LED-display aangesloten op een ESP8266
TM1637 op Amazon — 7-segment LED-display, aangestuurd via 2 pinnen (CLK/DIO)

Bouw een compact NTP-klokje met een TM1637 7-segment display — automatische zomer-/wintertijd, geen hard gecodeerd WiFi-wachtwoord, en amper 18 regels code.

Wat heb je nodig?

TM1637-display + ESP8266

Verbindingen:

ESP8266 -> TM1637
=================
GND --------> GND
3V3 --------> VCC
D2  --------> DIO
D1  --------> CLK

Sketch voor een eenvoudig klokje:

#include <WiFiManager.h>    // https://github.com/tzapu/WiFiManager/
#include <TM1637Display.h>  // https://github.com/avishorp/TM1637/

struct tm tInfo;  // https://cplusplus.com/reference/ctime/tm/
WiFiManager myWiFi;
TM1637Display ledSeg(5, 4);  // scl (clk) -> GPIO5 (D1) / sda (dio) -> GPIO4 (D2).

void setup() {
  Serial.begin(115200);                                           // watch serial monitor in case of new WiFi-connection
  myWiFi.autoConnect("TM1637_ESP");                               // connect ESP to new wifi via GSM or PC in that case
  ledSeg.setBrightness(2);                                        // 0 .. 7
  configTzTime("CET-1CEST,M3.5.0,M10.5.0/3", "be.pool.ntp.org");  // https://github.com/nayarsystems/posix_tz_db/blob/master/zones.csv
}

void loop() {
  getLocalTime(&tInfo);                                                                           // sntp sync at startup & every hour from then on
  ledSeg.showNumberDecEx(tInfo.tm_hour * 100 + tInfo.tm_min, 0x40 * (millis() % 1000 < 500), 1);  // 0x40 = ":", 1 = leading zeros
}

Hoe werkt het?

Waar zijn de bibliotheken? Bij de vele voorbeelden van klokjes die je op internet vindt, zie je "NTPClient.h", "Time.h", "TimeLib.h" en "WiFiUDP.h". Waar zijn die naartoe in deze sketch? Kort antwoord: je hebt die niet nodig. Time.h is ingebouwd in de ESP core. We moeten deze bibliotheken dus niet toevoegen aan de lijst van de Arduino IDE, en we moeten ze niet declareren in deze sketches.

TM1637-display + ESP32

Volgende code voor ons "minimumklokje" is aangepast voor zowel de ESP8266 als de ESP32. Het standaard interval voor de tijdsynchronisatie voor de ESP32 is 3 uur, voor de ESP8266 is dat 1 uur. De enige aanpassingen zijn de GPIO-aansluitingen van het display:

Verbindingen:

ESP32 ---> TM1637
=================
GND --------> GND
3V3 --------> VCC
G21 --------> DIO
G22 --------> CLK

Sketch:

#include <WiFiManager.h>    // https://github.com/tzapu/WiFiManager/
#include <TM1637Display.h>  // https://github.com/avishorp/TM1637/

struct tm tInfo;  // https://cplusplus.com/reference/ctime/tm/
WiFiManager myWiFi;
#if defined(ESP32)  
TM1637Display ledSeg(22, 21);  // scl (clk) -> G22 / sda (dio) -> G21.
#elif defined(ESP8266)
TM1637Display ledSeg(5, 4);  // scl (clk) -> GPIO5 (D1) / sda (dio) -> GPIO4 (D2).
#endif

void setup() {
  Serial.begin(115200);                                           // watch serial monitor in case of new WiFi-connection
  myWiFi.autoConnect("TM1637_ESP");                               // connect ESP to new wifi via GSM or PC in that case
  ledSeg.setBrightness(2);                                        // 0 .. 7
  configTzTime("CET-1CEST,M3.5.0,M10.5.0/3", "be.pool.ntp.org");  // https://github.com/nayarsystems/posix_tz_db/blob/master/zones.csv
}

void loop() {
  getLocalTime(&tInfo);                                                                           // sntp sync at startup & every hour from then on
  ledSeg.showNumberDecEx(tInfo.tm_hour * 100 + tInfo.tm_min, 0x40 * (millis() % 1000 < 500), 1);  // 0x40 = ":", 1 = leading zeros
}

We zouden deze code kunnen uitbreiden, zodat het klokje, als het een WiFi-verbinding aangaat tijdens de opstart, zelf zijn locatie opzoekt via een API. Dan kan de tijdzone automatisch toegekend worden. Zo zou je een NTP-klokje kunnen maken met de ESP, dat je om het even waar ter wereld kan gebruiken. Na het verbinden met een beschikbare WiFi geeft het de correcte locale tijd weer.

Meer displays met de ESP8266 / ESP32

Benieuwd naar andere displays? Bekijk het volledige overzicht met o.a. SSD1306, SH1106, ST7735, ST7789, e-paper en geïntegreerde displays zoals de Lilygo T-Display en de Waveshare ESP32-S3.