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.
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
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.
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.