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