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

SSD1306-display: NTP-klok met ESP8266 of ESP32

SSD1306 OLED-display, witte tekst SSD1306 OLED-display, blauwe tekst
SSD1306 op Amazon · blauwe tekst-versie — 0.96 inch OLED-display, aangestuurd via I2C

Een klein, goedkoop OLED-display met plaats voor meer info dan een 7-segment display — datum, uur en seconden, via dezelfde code op ESP8266 én ESP32.

Wat heb je nodig?

SSD1306-display + ESP8266 | ESP32

Dit is een klein en goedkoop display (0.96"), eveneens eenvoudige aansluiting via dezelfde pinnen als I2C. Hier kan heel wat meer informatie op in vergelijking met LED-segment displays. Deze code kan zonder wijzigingen zowel op de ESP8266 als op de ESP32 gezet worden. Uiteraard moet SCL en SDA naar resp. D1 (GPIO5) en D2 (GPIO4) [ESP8266] of naar 22 en 21 [ESP32].

In de code hieronder hebben we een interval van 4 uur ingesteld om te synchroniseren met SNTP.

Verbindingen:

ESP32 ---> SDD1306 / SH1106
===========================
GND  --------> GND
3V3  --------> VCC
G21  --------> SDA
G22  --------> SCL
===========================
ESP8266 -> SDD1306 / SH1106
===========================
GND  --------> GND
3V3  --------> VCC
D2   --------> SDA
D1   --------> SCL

Sketch:

#include <WiFiManager.h>  // https://github.com/tzapu/WiFiManager/
#if defined(ESP32) 
#include <esp_sntp.h>  // ESP32 core
#endif
#include <Adafruit_SSD1306.h>
#include <Fonts/FreeSansBold12pt7b.h>
#include <Fonts/FreeSansBold18pt7b.h>

WiFiManager myWiFi;
Adafruit_SSD1306 display(128, 64, &Wire, -1); // GND -> GND, 3V3 -> VCC, esp32: G21 -> SDA, G22 -> SCL
struct tm tInfo;  // https://cplusplus.com/reference/ctime/tm/          esp8266: D1 -> SCL,  D2 -> SDA

void setup() {
  Serial.begin(115200);  // watch serial monitor in case of new WiFi-connection
  display.begin(2, 0x3C);
  display.setTextColor(1);  // white = 1, black = 0
  display.setFont(&FreeSansBold12pt7b);
  myWiFi.autoConnect("SSD1306_ESP");  // connect ESP to new wifi via GSM or PC if new WiFi-connection
#if defined(ESP32)
  sntp_set_sync_interval(4 * 60 * 60 * 1000UL);
#endif
  configTzTime("CET-1CEST,M3.5.0,M10.5.0/3", "be.pool.ntp.org");
}

void loop() {
  getLocalTime(&tInfo);  // sntp sync at startup & every 4 hours from then on
  display.clearDisplay();
  display.drawRect(0, 0, 128, 40, 1);
  display.setFont(&FreeSansBold18pt7b);
  display.setCursor(4, 31);
  display.printf("%02d:%02d", tInfo.tm_hour, tInfo.tm_min);
  display.setFont(&FreeSansBold12pt7b);
  display.printf(":%02d", tInfo.tm_sec);
  display.setCursor(4, 63);
  display.printf("%02d-%02d-%04d", tInfo.tm_mday, 1 + tInfo.tm_mon, 1900 + tInfo.tm_year);
  display.display();
}
#if defined(ESP8266)
uint32_t sntp_update_delay_MS_rfc_not_less_than_15000() {  // declare only, unnecessary to call this function.
  return 4 * 60 * 60 * 1000UL;                             // NTP sync every 4 hr
}
#endif
Synchronisatie-interval Op de ESP32 stelt sntp_set_sync_interval() het synchronisatie-interval in op 4 uur. Op de ESP8266 gebeurt dat via de functie sntp_update_delay_MS_rfc_not_less_than_15000(), die je enkel moet declareren — de ESP-core roept ze zelf aan.

Meer displays met de ESP8266 / ESP32

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