Womo-Monitor 2.0

Am ende wird das ganze vermutlich sowieso nur als AP fungieren, da das Ding ja unterwegs ist.....ich denke ich muss da mal mit rumexperimentieren, wenn der ESp nicht als AP_STA konfiguriert ist

Rumexperimentieren ist eigentlich nicht notwendig, da ja beide benannt werden können.

Mehr Augenmerk würde ich darauf legen, daß setup nur nach Reset durchlaufen wird. Die Verbindungserstellung geschieht also nur genau ein Mal. In der Praxis dürfte es besser sein, connect auch von loop aus aufzurufen und innerhalb connect die Verbindung zu prüfen, um ggf. eine neue Verbindung herzustellen.

Beispiel für STA
void routerVerbindung()
{
  unsigned long connDauer = 20000;
  unsigned long connTimer = millis();

  if (WiFi.status() != WL_CONNECTED)
  {
    DEBUG_F("Verbindung zum Router ");
    WiFi.mode(WIFI_STA);
    WiFi.disconnect();
    WiFi.begin(STA_SSID, STA_PASSWORD);
    while (WiFi.status() != WL_CONNECTED && (millis() - connTimer < connDauer)) {
      digitalWrite(LED_BUILTIN, 1);
      delay(250);
      digitalWrite(LED_BUILTIN, 0);
      delay(250);
      DEBUG_F(".");
    }
    if (WiFi.status() == WL_CONNECTED)
    {
      WiFi.setAutoReconnect(true);
      WiFi.persistent(false);  // true = default, bei reboot werden ssid+pass in den Flash geschrieben, killt den freien Speicher!
      DEBUG_L("\nVerbunden mit: " + WiFi.SSID());
      DEBUG_L("Esp32 IP: " + WiFi.localIP().toString() + "\n");
    } else {
      DEBUG_L(" nicht hergestellt");
    }
  }
}

Nur so als Anregung :wink:

1 Like

Wie ist bei Dir DEBUG_F und DEBUG_L angelegt?

Gruß Tommy

//#define DEBUGGING                     // Einkommentieren für die Serielle Ausgabe

#ifdef DEBUGGING
#define DEBUG_B(...) Serial.begin(__VA_ARGS__)
#define DEBUG_P(...) Serial.print(__VA_ARGS__)
#define DEBUG_L(...) Serial.println(__VA_ARGS__)
#define DEBUG_F(...) Serial.printf(__VA_ARGS__)
#else
#define DEBUG_B(...)
#define DEBUG_P(...)
#define DEBUG_L(...)
#define DEBUG_F(...)
#endif

Danke.
Das Serial.printf nur bei den ESP und nicht den AVR vorhanden ist, habe ich das bei mir etwas erweitert:

#if defined ESP8266	|| defined ESP32
	#define dbgpf(...) Serial.printf(__VA_ARGS__)
#else
  #define dbgpf(x, ... ) {char dbgBuf[80]; snprintf_P( dbgBuf, sizeof(dbgBuf), PSTR( x ), ##__VA_ARGS__ ) ; Serial.println( dbgBuf ); }
#endif

Gruß Tommy

1 Like

So, da es langsam dem Ende zugeht (hoffe ich) habe ich in der Version 2.0.20250705.0938 noch ein kleines OLED Display hinzugefügt, welches mir beim Start die IP ausgibt, und danach nach Bedarf die Temperatur anzeigt. Ebenso wurden noch 2 Taster hinzugefügt. Einmal Reset und einmal um das Display für 1 Minute einzuschalten (das wird nach 1 Minute automatisch dunkel) Und die zusätzlichen Funktionen sind in einen separaten Tab gewandert
Womo_Monitor_ohne_Display-250705_SSD.zip (281,7 KB)

Weshalb diese Version auch "ohne_Display" heißt :joy:

Der ESP32 hat kein EEPROM, weshalb mich dieser Kommentar stört:

#include <Preferences.h> //Bibliothek für EEProm einbinden

"Bibliothek zum Speichern von Voreinstellungen" genügt.

Als Anregung:

OLED mit durchlaufendem Text wie serieller Monitor
#if defined(DEBUG) && (DEBUG == OLED)
#include <Wire.h>
#include <U8g2lib.h>

U8G2_SSD1306_128X64_NONAME_F_HW_I2C oled(U8G2_R0, /* reset=*/ U8X8_PIN_NONE);
//U8G2_SH1106_128X64_NONAME_F_HW_I2C oled(U8G2_R0);
#endif

void setup_OLED() {
#if defined(DEBUG) && (DEBUG == OLED)
  oled.begin();
#endif
}

void anzeigeOLED(const char * text) {
#if defined(DEBUG) && (DEBUG == OLED)
  const byte ZEILEMAX = 8;
  const byte SPALTEMAX = 22;
  static char buf[ZEILEMAX][SPALTEMAX] = {" ", " ", " ", " ", " ", " ", " ", " "};
  oled.clearBuffer();              // clear the internal memory
  oled.setFont(u8g2_font_6x12_tr); // choose a suitable font
  for (byte zeile = 0; zeile < ZEILEMAX; zeile++) {
    oled.setCursor(0, ((zeile + 1) * 8) - 1);
    for (byte spalte = 0; spalte < (SPALTEMAX - 1); spalte++) {
      if (zeile < (ZEILEMAX - 1)) {
        buf[zeile][spalte] = buf[zeile + 1][spalte];
        if (buf[zeile][spalte] == '\0') {
          break;
        }
      } else {
        buf[zeile][spalte] = text[spalte];
        buf[zeile][spalte + 1] = '\0';
        if (buf[zeile][spalte] == '\0') {
          break;
        }
      }
      oled.print(buf[zeile][spalte]);
    }
  }
  oled.sendBuffer();          // transfer internal memory to the display
#endif
}

Die Bibliothek von Oli Kraus bietet UTF8 so wie der serielle Monitor. Beim ESP32 ist normalerweise genügend Platz für die Fonts.

1 Like

Das ist durchaus ein Gedanke wert. Ich habe ja des kleine OLED primär für die IP, welche sich allerdings nicht ändern sollte. Das Passwort soll dann später auch noch anpassbar sein. Aber ich habe ja noch Zeit bis zum nächsten Spanienurlaub 2027 :grinning_face_with_smiling_eyes:

Funktioniert OTA eigentlich auch mit AP?

edit:

Der Sketch heisst auch nicht mehr ohne Display. Die Checkliste für die Abfahrt ist jetzt auch integriert

Womo_Monitor_OLED-250706a.zip (282,7 KB)