ESP32 Internetzeit auf OLED-Display

Hallo liebe Gemeinde,
ich hätte da mal gerne ein Problem...
ich bekomme es gerade nicht hin, die Uhrzeit (13:25) auf dem display anzuzeigen...

HELP!!!

/*
  04.01.2025
0,66" Display an ESP32 DEVKIT V1 TYPEC/ SDA GPIO 21 / SCL GPIO 22

PINOUT unter https://www.circuitstate.com/pinouts/doit-esp32-devkit-v1-wifi-development-board-pinout-diagram-and-reference/#!fancybox/06b225e2/ESP32-DevKit-V1-Pinout-Diagram-r0.1-CIRCUITSTATE-Electronics-2.png

Fonts-Beschreibung unter https://github.com/olikraus/u8g2/wiki/fntlist8
und Infos hier : https://github.com/olikraus/u8g2
für den Beispielfont Inos hier : https://github.com/olikraus/u8g2/wiki/fnticons


*/

#include <Arduino.h>
#include <U8g2lib.h>
#include <WiFi.h>
#include "time.h"
#include <Wire.h>

const char* ssid       = "SSID";
const char* password   = "KEY";
const char* ntpServer = "pool.ntp.org";
const long  gmtOffset_sec = 3600;//3600 // 0=GMT
const int   daylightOffset_sec = 3600;
struct tm timeinfo;


int stunde = 0;
U8G2_SSD1306_64X48_ER_F_HW_I2C u8g2(U8G2_R0, /* reset=*/ U8X8_PIN_NONE);   // EastRising 0.66" OLED breakout board, Uno: A4=SDA, A5=SCL, 5V powered

void setup(void) {  
  u8g2.begin();
  Serial.begin(9600);
  //connect to WiFi
  Serial.printf("Connecting to %s ", ssid);
  WiFi.begin(ssid, password);
  while (WiFi.status() != WL_CONNECTED) {
      delay(500);
      Serial.print(".");
  }
  Serial.println(" CONNECTED");
  
  //init and get the time
  configTime(gmtOffset_sec, daylightOffset_sec, ntpServer);
}

void loop(void) {
  u8g2.clearBuffer();					// clear the internal memory

// Uhrzeit ermitteln
  if(!getLocalTime(&timeinfo)){
    Serial.println("Failed to obtain time");
    return;
  }



//  Serial.println(&timeinfo, "%A, %B %d %Y %H:%M:%S");
    Serial.println(&timeinfo, "%H:%M");


// Uhrzeit anzeigen
  u8g2.clearBuffer();
  u8g2.setFont(u8g2_font_freedoomr10_mu); // SEHR SCHÖN!!
  u8g2.print(&timeinfo, "%H:%M");
  u8g2.sendBuffer();					// transfer internal memory to the display
  delay(1000);
}

Gruß
Uwe

Ich habe Ihr Thema in eine passende Forenkategorie verschoben.

Im englischen Teil des Forums müssen Beiträge und Diskussionen in englischer Sprache verfasst werden. Daher wurde diese Diskussion in den deutschen Teil des Forums verschoben.

Bitte posten Sie nicht in "Uncategorized"; sehen Sie sich die angepinnten Themen unter Uncategorized - Arduino Forum an.

Zukünftig bitte ich Sie, sich die Zeit zu nehmen, die Forenkategorie auszuwählen, die am besten zum Thema Ihres Beitrags passt. Oben in jeder Kategorie gibt es ein Thema "Über die _____-Kategorie", das deren Zweck erklärt.

Dies ist ein wichtiger Bestandteil der verantwortungsvollen Nutzung des Forums, wie im Leitfaden "Wie man dieses Forum benutzt" erklärt. Der Leitfaden enthält auch viele weitere nützliche Informationen. Bitte lesen Sie ihn.

Vielen Dank im Voraus für Ihre Kooperation.

:slight_smile:
Willkommen im Forum!

Was siehst Du denn bisher auf dem seriellen Monitor?
Connecting to ... CONNECTED?
Failed to obtain time?
10:41?

Das geht aus zwei Gründen so nicht.

  • println() kennt keine Formatstrings wie das C-printf().
  • Du willst nicht die ganze Struktur timeinfo ausgeben, sondern nur Stunde und Minute.
Serial.print(timeinfo.tm_hour);
Serial.print(':');
Serial.println(timeinfo.tm_min);

Sorry, ich gelobe Besserung !!!

1 Like

was genau bekommst du nicht hin?
Ergänze mal im Setup() die Ausgabe eines Statischen Textes auf das OLED.
Dann siehst du - ob du das OLED richtig ansprechen kannst.

Bitte bestätige auch, dass die Ausgabe auf der Seriellen Schnittstelle funktioniert (das tut es bei mir).

@wno158 ... mit dem ESP32 Core geht diese printf Formatierung...

1 Like

Na kuck an. Mit welcher ESP32-Core-Version geht das? Bzw. ab welcher ESP32-Core-Version?

ich kompiliere hier mit 2.0.16

Vielen Dank,

die Serielle Ausgabe klappt ja, nur auf dem Display bekomme ich es nicht hin...

  u8g2.drawStr(20,30, timeinfo.tm_hour);

lieber @skr-soft

es gibt zwei gaaanz wichtige Grundregeln

  1. IMMER den kompletten Sketch posten.
  2. ausführlich beschreiben was du beobachten kannst

auf dem Display bekomme ich es nicht hin heißt was?

Compilierfehler?
Hast du mit einem einfachen Testprogramm auf dem Display etwas anzeigen lassen können ? oder bleibt das Display komplett dunkel ?

usw. usw. usw. usf.

Wenn du denkst deine Beschreibung ist jetzt ausführlich genug dann überlege was du noch hinzufügen kannst.
Das einzige was du weglassen kannst ist die Sockenfarbe deiner Oma.

ich wiederhole mich:
schreibe mal im setup einen Fixtext auf das OLED.

z.B. mach dir eine Funktion und rufe diese in setup() am Ende auf.

void splash() {
  u8g2.clearBuffer();
  u8g2.setFont(u8g2_font_freedoomr10_mu);
  u8g2.setCursor(0,15);
  u8g2.print("Uhrzeit");
  u8g2.sendBuffer();
  
  delay(3000);  // damit man eine chance hat das zu sehen
}

siehst du das?

Doch, auf einem ESP32 geht das. (Core 2.0.17) Wurde bereits geklärt.

@skr-soft: Dabei zu beachten ist, der Font hat einen eingeschränkten Zeichensatz!

Anders als bei anderen Bibliotheken befindet sich der Nullpunkt für den Font nicht links oben, sondern auf der Grundlinie. Ohne setCursor landet Dein Text oberhalb des sichtbaren Bereichs. Siehe print und setCursor.

Es sind immer die Kleinigkeiten :slightly_smiling_face:

... ich glaube das jetzt nicht!!!
mit: u8g2.setCursor(0, 30); // diese Zeile ergänzen u8g2.print(&timeinfo, "%H:%M");
klappt es, nicht zu fassen dass es so banal war, verdammt!!!

Trotzdem Danke an ALLE, bis demnächst :slight_smile:

Danke für Deine Rückmeldung. Du könntest das Thema noch als gelöst markieren.

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.