Heltec ESP9266 Wifi keine Anzeige im Display wenn Wlan gestartet

Hallo,
ich habe einen Heltec HTIT-W8266 im folgenden Code werden 3 Zeilen auf dem
Display angezeigt. Wenn ich aber das Wlan in der Initialisierung einschalte, bleibt
die Anzeige dunkel. Beim Hochfahren gibt er mir den Wlan Namen und die erhaltene
IP über den seriellen Monitor aus. Ebenso kommen die Meldungen "Anzeige aufrufen" und 3x "Anzeige aufgerufen bei jedem Durchlauf aus. Aber die Anzeige bleibt dunker. Wenn ich den Wlan Start auskommentiere werden die drei Zeilen auf
dem Display angezeigt.
Wäre schön wenn mir jemand helfen könnte.



//************************************************************************
//***********         iclude Bibliotheken                   **************
//************************************************************************

 #include "ESP8266WiFi.h"
#include <Arduino.h>
#include <U8g2lib.h>
#include "time.h"

#ifdef U8X8_HAVE_HW_SPI
#include <SPI.h>
#endif
#ifdef U8X8_HAVE_HW_I2C
#include <Wire.h>
#endif

//*** String Definitionen

char Router[] = "MusterWlan";
char Passwort[] = "MusterPW";

// statischeIP = false -> IP-Adresse über DHCP vergeben
// statischeIP = true -> statische IP festlegen
// ip und gateway müssen an das lokale Netz angepasst werden
bool statischeIP = false;
IPAddress ip(192, 168, 1, 200);
IPAddress gateway(192, 168, 1, 1);
IPAddress subnet(255, 255, 255, 0);

// NTP-Server aus dem Pool
#define Zeitserver "de.pool.ntp.org"

/*
  öffentliche DNS-Server
  -----------------------------------------------
  OpenDNS 208, 67, 222, 222 (USA)
  Google 8, 8, 8, 8 (USA)
  Cloudfare 1, 1, 1, 1 (USA)
  DNSWWatch 84.200.69.80 (Deutschland)
  Quad9 9, 9, 9, 9 (Schweiz)
  Neustar UltraDNS 56, 154, 70, 3 (USA, gefiltert)
  Deutsche Telekom 217, 5,100,185
  ------------------------------------------------
  oder die im Router eingetragene IP
  im Beispiel: 192, 168, 1, 20
*/
IPAddress primaryDNS(192, 168, 1, 20);
IPAddress secondaryDNS(9, 9, 9, 9);

// NTP-Server aus dem Pool
#define Zeitserver "de.pool.ntp.org"

/*
  Liste der Zeitzonen
  https://github.com/nayarsystems/posix_tz_db/blob/master/zones.csv
  Zeitzone CET = Central European Time -1 -> 1 Stunde zurück
  CEST = Central European Summer Time von
  M3 = März, 5.0 = Sonntag 5. Woche, 02 = 2 Uhr
  bis M10 = Oktober, 5.0 = Sonntag 5. Woche 03 = 3 Uhr
*/
#define Zeitzone "CET-1CEST,M3.5.0/02,M10.5.0/03"

// time_t enthält die Anzahl der Sekunden seit dem 1.1.1970 0 Uhr
time_t aktuelleZeit;

/* 
  Struktur tm
  tm_hour -> Stunde: 0 bis 23
  tm_min -> Minuten: 0 bis 59
  tm_sec -> Sekunden 0 bis 59
  tm_mday -> Tag 1 bis 31
  tm_wday -> Wochentag (0 = Sonntag, 6 = Samstag)
  tm_mon -> Monat: 0 (Januar) bis 11 (Dezember)
  tm_year -> Jahre seit 1900
  tm_yday -> vergangene Tage seit 1. Januar des Jahres
  tm_isdst -> Wert > 0 = Sommerzeit (dst = daylight saving time)
*/
tm Zeit;
WiFiServer Server(80);
WiFiClient Client;

//***************** Display Auswahl f. Bibliothek ************************

U8G2_SSD1306_128X32_UNIVISION_F_HW_I2C u8g2(U8G2_R0, /* reset=*/ U8X8_PIN_NONE);  // Adafruit ESP8266/32u4/ARM Boards + FeatherWing OLED


void u8g2_prepare(void) {
  u8g2.setFont(u8g2_font_6x10_tf);
  u8g2.setFontRefHeightExtendedText();
  u8g2.setDrawColor(1);
  u8g2.setFontPosTop();
  u8g2.setFontDirection(0);
}

//*********           String auf Anzeige schreiben       *******************

void u8g2_string(uint8_t x, uint8_t y,char text[21]) {
  u8g2.setFontDirection(0);
  u8g2.drawStr(x,y, text);
    Serial.println("Anzeigeroutine aufgerufen");
}

//************************************************************************
//***********            Initialisierung                    **************
//************************************************************************

void setup(void)
{
  u8g2.begin();
  Serial.begin(9600);

  // Zeitzone: Parameter für die zu ermittelnde Zeit
  configTzTime(Zeitzone, Zeitserver);

  // WiFi starten
  WiFi.begin(Router, Passwort);

  Serial.println("------------------------");

   // Wenn statische IP vergeben
   if (statischeIP) 
  {
    WiFi.config(ip, gateway, subnet, primaryDNS, secondaryDNS); 
    Serial.print("Verbunden mit ");
    Serial.println(Router);

    // IP anzeigen
    Serial.print("Statische IP: ");
    Serial.println(ip);
  }

  // Oder IP über DHCP ermitteln
  else
  {
    while (WiFi.status() != WL_CONNECTED) 
    {
      delay(200);
      Serial.print(".");
    }
    Serial.println();
    Serial.print("Verbunden mit ");
    Serial.println(Router);
    Serial.print("IP über DHCP: ");
    Serial.println(WiFi.localIP());
  }

}

//***********************************************************************
//***********              Hauptschleife                    *************
//***********************************************************************

void loop(void) {
  // picture loop  
  u8g2.clearBuffer();
  u8g2_prepare();

  u8g2_string(0,0,"123456789012345678901");
  u8g2_string(0,11,"Textzeile 2");
  u8g2_string(0,22,"Textzeile 3");
  Serial.println("Anzeige aufrufen");
  u8g2.sendBuffer();
  

  delay(1000);

}```

Willkommen im Forum :wink:
Versetze mall das

 u8g2.begin();

hinter der WLAN Geschichte.

@chris1959

//***************** Display Auswahl f. Bibliothek ************************

U8G2_SSD1306_128X32_UNIVISION_F_HW_I2C u8g2(U8G2_R0, /* reset=*/ U8X8_PIN_NONE);  // Adafruit ESP8266/32u4/ARM Boards + FeatherWing OLED


kommt normaler weise direkt nach

#include <U8g2lib.h>

hat zwa nichts zu sagen ist aber besser bei lesen, bin ja selber reingefallen :wink:

@chris1959
Das kann auch ein Problem der Betriebsspannung sein.
Wie sieht die Spannungsversorgung des ESP8266 aus ? Wo angeschlossen ?

Bei den 11mA für das Display eher nicht, umgekehrt schon, WLAN funktioniert ja, das Display + WLAN aber nicht.

Die Anzeige fällt doch aus, wenn Wlan (ca. 400 mA) startet.

So wie ich verstanden habe mit WLAN startet der OLED nicht.

Um das im Code zu initialisieren, muss das Teil ja neu gestartet werden.

Einfach mal abwarten, ob noch was kommt. :wink:

Ich habe den Display Start nach dem Wlan Start verschoben. Jetzt startet das Wlan danach das Display aber nach einiger Zeit geht das Display aber aus. Die Meldungen
"Display aufrufen" und "Display aufgerufen" kommen aber wie erwartet weiterhin
alle Sekunden auf dem Seriellen Monitor. Der Heltec wird über einen USB-Hub mit
eigenem Netzteil versorgt. Auf dem laufen auch Harddisks ohne Probleme.
Die Zeit bis zum Ausgehen des Displays ist sehr unterschiedlich. 2 - 8 Sekunden.

Stelle mall den Serial.begin auf 115200 , meine Vermutung der ESP macht Resett und startet neu.
Falsch 115200 ist für ESP32, der ESP8266 hat 74880Baudrate, bei Restart sollte was angezeigt werden.

Alles falsch den dann sollte auch neu WIFI angezeigt werden.

@chris1959 versuche das mall

//************************************************************************
//***********         iclude Bibliotheken                   **************
//************************************************************************

#include "ESP8266WiFi.h"
#include <Arduino.h>

#include <U8g2lib.h>
#include "time.h"

#ifdef U8X8_HAVE_HW_SPI
#include <SPI.h>
#endif
#ifdef U8X8_HAVE_HW_I2C
#include <Wire.h>
#endif

//*** String Definitionen

char Router[] = "MusterWlan";
char Passwort[] = "MusterPW";

// statischeIP = false -> IP-Adresse über DHCP vergeben
// statischeIP = true -> statische IP festlegen
// ip und gateway müssen an das lokale Netz angepasst werden
bool statischeIP = false;
IPAddress ip(192, 168, 1, 200);
IPAddress gateway(192, 168, 1, 1);
IPAddress subnet(255, 255, 255, 0);

// NTP-Server aus dem Pool
#define Zeitserver "de.pool.ntp.org"

/*
  öffentliche DNS-Server
  -----------------------------------------------
  OpenDNS 208, 67, 222, 222 (USA)
  Google 8, 8, 8, 8 (USA)
  Cloudfare 1, 1, 1, 1 (USA)
  DNSWWatch 84.200.69.80 (Deutschland)
  Quad9 9, 9, 9, 9 (Schweiz)
  Neustar UltraDNS 56, 154, 70, 3 (USA, gefiltert)
  Deutsche Telekom 217, 5,100,185
  ------------------------------------------------
  oder die im Router eingetragene IP
  im Beispiel: 192, 168, 1, 20
*/
IPAddress primaryDNS(192, 168, 1, 20);
IPAddress secondaryDNS(9, 9, 9, 9);

// NTP-Server aus dem Pool
#define Zeitserver "de.pool.ntp.org"

/*
  Liste der Zeitzonen
  https://github.com/nayarsystems/posix_tz_db/blob/master/zones.csv
  Zeitzone CET = Central European Time -1 -> 1 Stunde zurück
  CEST = Central European Summer Time von
  M3 = März, 5.0 = Sonntag 5. Woche, 02 = 2 Uhr
  bis M10 = Oktober, 5.0 = Sonntag 5. Woche 03 = 3 Uhr
*/
#define Zeitzone "CET-1CEST,M3.5.0/02,M10.5.0/03"

// time_t enthält die Anzahl der Sekunden seit dem 1.1.1970 0 Uhr
time_t aktuelleZeit;

/*
  Struktur tm
  tm_hour -> Stunde: 0 bis 23
  tm_min -> Minuten: 0 bis 59
  tm_sec -> Sekunden 0 bis 59
  tm_mday -> Tag 1 bis 31
  tm_wday -> Wochentag (0 = Sonntag, 6 = Samstag)
  tm_mon -> Monat: 0 (Januar) bis 11 (Dezember)
  tm_year -> Jahre seit 1900
  tm_yday -> vergangene Tage seit 1. Januar des Jahres
  tm_isdst -> Wert > 0 = Sommerzeit (dst = daylight saving time)
*/
tm Zeit;
WiFiServer Server(80);
WiFiClient Client;

//***************** Display Auswahl f. Bibliothek ************************

U8G2_SSD1306_128X32_UNIVISION_F_HW_I2C u8g2(U8G2_R0, /* reset=*/ U8X8_PIN_NONE);  // Adafruit ESP8266/32u4/ARM Boards + FeatherWing OLED


void u8g2_prepare(void) {
  u8g2.setFont(u8g2_font_6x10_tf);
  u8g2.setFontRefHeightExtendedText();
  u8g2.setDrawColor(1);
  u8g2.setFontPosTop();
  u8g2.setFontDirection(0);
}

//*********           String auf Anzeige schreiben       *******************

void u8g2_drawStr(uint8_t x, uint8_t y, char text[21]) {
  u8g2.setFontDirection(0);
  u8g2.drawStr(x, y, text);
  Serial.println("Anzeigeroutine aufgerufen");
}

//************************************************************************
//***********            Initialisierung                    **************
//************************************************************************

void setup(void)
{
  u8g2.begin();
  Serial.begin(9600);

  // Zeitzone: Parameter für die zu ermittelnde Zeit
  configTzTime(Zeitzone, Zeitserver);

  // WiFi starten
  WiFi.begin(Router, Passwort);

  Serial.println("------------------------");

  // Wenn statische IP vergeben
  if (statischeIP)
  {
    WiFi.config(ip, gateway, subnet, primaryDNS, secondaryDNS);
    Serial.print("Verbunden mit ");
    Serial.println(Router);

    // IP anzeigen
    Serial.print("Statische IP: ");
    Serial.println(ip);
  }

  // Oder IP über DHCP ermitteln
  else
  {
    while (WiFi.status() != WL_CONNECTED)
    {
      delay(200);
      Serial.print(".");
    }
    Serial.println();
    Serial.print("Verbunden mit ");
    Serial.println(Router);
    Serial.print("IP über DHCP: ");
    Serial.println(WiFi.localIP());
  }

}

//***********************************************************************
//***********              Hauptschleife                    *************
//***********************************************************************

void loop(void) {
  u8g2_prepare();// picture loop
  u8g2.clearBuffer();


  u8g2.drawStr(0, 0, "123456789012345678901");
  u8g2.drawStr(0, 11, "Textzeile 2");
  u8g2.drawStr(0, 22, "Textzeile 3");
  Serial.println("Anzeige aufrufen");
  u8g2.sendBuffer();


  delay(1000);

}

@chris1959
Achtung oberen Code habe gerade geändert !
Hast das alles selber geschrieben oder hast eine Vorlage gehabt?
Wen Vorlage dann Link bitte.

@fony
Verstehe ich nicht, müsste eigentlich das gleiche sein. Bei Dir werden die Displayroutinen im Loop aufgerufen und bei mir in einer Subroutine. Bringt auch nichts, der gleiche
Effekt, nach spätestens 9 Sek. ist das Display dunkel.
Spannungsversorgung ist es auch nicht, hab den Heltec an ein 1500mA Netzteil angeschlossen, keine Auswirkungen.

Verstehe ich es richtig, wenn du kein WLan verwendest, funktioniert das Display ständig ?

Sobald WLan aktiv wird, ist das Display nach ca. 9 Sek. aus ?

Yep, ich glaube ich habe es genau so im ersten Posting beschrieben. Wenn ich den
Wlan Start auskommentiere werden die drei Zeilen dauerhaft angezeigt.

Funktioniert denn in dem Fall (Display dunkel) dein WLan noch ?
Kannst du dann die 3,3Volt messen ? Welche Spannung ist da noch vorhanden ?

Kannst du den Heltec direkt mit 3,3Volt versorgen und prüfen, ob das besser geht ?

Werde ich mal testen, dauert aber ein Weilchen.

Ok, wäre wichtig, da dann evtl. ein Hardwarefehler vorliegen kann.
Tippe dann auf den Spannungsregler, der nicht die Leistung bringt.

Hast du eine Fritzbox?
wen ja, nutze mall den internen NTP Server

#define Zeitserver "fritz.box"

Du nutzt zwar noch nicht den NTP, jedoch läuft er im Hintergrund.
Nicht das der blockt dir ganzen Sketch, nach gewisser Zeit.
Wen das nicht hilft ist was faul mit deiner Hardware.
Was noch könnte sein das der I²C Bus aus irgend welchen Grunde steigt aus, wenn die Spannung OK ist, und bleibt bei Min 3,1V

Ich hab jetzt alles ausprobiert. Wlan-Verbindung ist vorhanden. Versorgung ist in Ordnung, habe das Ding über eine Lithiumzelle versorgt. Mit internem NTP Server
der gleich Effekt. Neue Hardware ausprobiert, immer das Gleiche nach einigen Sekunden verschwinden die angezeigten Zeilen vom Bildschirm aber im seriellen Monitor kommen weiterhin die beschriebenen Meldungen.
Ich bin kurz vorm aufgeben und überlege die Rückkehr zur SPS, mir sind die debugging Möglichkeiten eigentlich zu rudimentär. Das macht eigentlich keinen Spaß mehr. Hat noch jemand eine Idee?