nodemcu Wlan Verbindung per Serieller Monitor eingeben

moinsen Community,

ich habe folgendes Vor:

  1. mit einem NodeMCU eine Email versenden. Das läuft schon mal
  2. Wlan Daten per Seriellen Monitor eingeben. Also bis jetzt habe ich es hinbekommen dass ich daten in den Seriellen Monitor eingebe und die dann zurückbekomme.

jetzt wollte ich die beiden einzelnen Codes zusammen fügen und hab mir das natürlich ganz einfach Vorgestellt. Einfach den wert Den ich vom Seriellen Monitor bekomme dort einfügen wo ich sonst den WLan Name und Passwort eingebe. Hmm ja läuft nicht. Am seriellen Monitor bekomme ich ohne irgendwas einzugeben das er verbunden ist (ohne wlan name oder passwort ) und er sagt mir die Mail wurde gesendet. Bekommen tu ich keine ( is ja logisch ohne Internet ). Hat jemand ne idee was ich falsch gemacht habe oder einen verbesserungsvorschlag? :))

#include <ESP8266WiFi.h>
#include <WiFiClient.h>
#include <ESPMail.h> 

#include <CmdBuffer.hpp>
#include <CmdCallback.hpp>
#include <CmdParser.hpp> // Benötigte Bibliotheken 

CmdCallback<3> cmdCallback;

char strWlan_Name[]  = "Wlan_Name"; // Befehl den ich am Seriellen Monitor eingebe
char strWlan_Passwort[]   = "Wlan_Passwort"; // Befehl den ich am Seriellen Monitor eingebe

char Wlan_Passwort[24]; // Länge des Passwortes 
char Wlan_Name[24]; // Länge des Names

const char* ssid = Wlan_Name;  // Wlan Name 
const char* password = Wlan_Passwort; // Wlan Passwort 

ESPMail mail; // Bibliothek ESPMail starten

int send = 1; // Wert fürs senden 

void setup_wifi() {
  
  Serial.print("\nVerbinden mit  "); 
  Serial.println(ssid); // Serieller Monitor Verbindung mit Wlan Name  

  WiFi.begin(ssid, password); // Mit Wlan verbinden 

  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print("."); // Solange er Verbindet '.' anzeigen 
  }

  Serial.println("\nWiFi Verbunden"); // Verbunden 
  Serial.print("IP address: "); 
  Serial.println(WiFi.localIP()); // IP-Adresse des Netzwerks 
}

void setup() {
  Serial.begin(115200); // Serielle Verbindung starten 

    cmdCallback.addCmd(strWlan_Name, &functWlan_Name);
  cmdCallback.addCmd(strWlan_Passwort, &functWlan_Passwort);

   
  Serial.println("Bitte Befehl eingeben. Verfügbar:");
  Serial.println(" 1: Wlan_Name ");
  Serial.println(" 2: Wlan_Passwort");

  setup_wifi(); // Setup starten : Wlan Verbinden, Status anzeigen, IP_Adresse 

  mail.begin(); // Email Programm starten
}

void loop() {

  

  if (send == 0)
    return;  // Wenn senden 1 ist mail senden wenn 0 Programm stopt 

  mail.setSubject("*************", "Test"); // Senderadresse, Betreff
  mail.addTo("***********"); // Zieladresse
  //mail.addCC("cc@example.com"); // CC
  //mail.addBCC("bcc@example.com"); // BCC

  mail.addAttachment("test.txt", "Anlage"); // Textdatei: Name, Anhang

  mail.setBody("Das ist eine Beispiel mail "); // Mail
  //  mail.setHTMLBody("This is an example html <b>e-mail<b/>.\n<u>Regards Grzesiek</u>");  // Email als HTML Senden

  //mail.enableDebugMode();

  if (mail.send("***********", 587, "*******", "*********") == 0)  // SMTP Serverdaten
  {
    Serial.println("Mail gesendet"); // Mail erfolgreich gesendet 
  }

  send = 0; // send status 0. Programm stopt 
}


void functWlan_Passwort(CmdParser *myParser)
{
  Serial.print("Passwort erhalten");

  if (myParser->equalCmdParam(1, "WIFI_PASS")) {
    Serial.println(myParser->getCmdParam(2));
  }

  else {
    strcpy(Wlan_Passwort,(myParser->getCmdParam(1)));
    Serial.println(Wlan_Passwort);

  }
}

void functWlan_Name(CmdParser *myParser) 
{
  Serial.print("Wlan Name erhalten: ");

  // Alarm
  if (myParser->equalCmdParam(1, "WIFI_PASS")) {
    Serial.println(myParser->getCmdParam(2));
  }
  // Command Unknwon
  else {
    strcpy(Wlan_Name,(myParser->getCmdParam(1)));
    Serial.println(Wlan_Name);
    
  }
}

mindblow1999:
Wlan Daten per Seriellen Monitor eingeben

Bei jedem Neustart?
Ändern die sich so oft?

Gruß Fips

Derfips:
Bei jedem Neustart?
Ändern die sich so oft?

Gruß Fips

ne wird hinterher noch mit ner pufferbatterie versorgt :wink:
aber sollte erstmal allgemein laufen

mindblow1999:
ne wird hinterher noch mit ner pufferbatterie versorgt :wink:

Ach!

Darf ich jetzt nochmal die Frage nach dem Sinn stellen, den Esp jedesmal an die Serielle anzuschliesen um die Wlan Zugangsdaten einzugeben?

Oder hat sich das Mit der Pufferbatterie dann für alle Zeit erledigt?

Gruß Fips

Derfips:
Darf ich jetzt nochmal die Frage nach dem Sinn stellen, den Esp jedesmal an die Serielle anzuschliesen um die Wlan Zugangsdaten einzugeben?

der Plan ist das Hinterher das einmal anzuschließen paar dinge zu konfigurieren und das Ding laufen zu lassen

die Wlan Daten ändern sich ja nicht ständig

Warum machst Du das nicht einfach so:

Der ESP8266 merkt sich im SPIFFS seine Netzwerkeinstellungen.
Diese liest er beim Start aus. Wenn er sich nicht mit dem Netz verbinden kann, startet er sich als AccessPoint und stellt ein Webinterface bereit, in dem man die neuen Netzwerkdaten eingeben kann.

Fips hat da schon was in der Hinterhand :wink:

Gruß Tommy

mindblow1999:
die Wlan Daten ändern sich ja nicht ständig

Dann könnte man die doch in den Sketch schreiben.

So einen Wlan Teil, Konfigurationen per Serieller zu schicken, das hab ich echt noch nirgends gelesen.

Damit betrittst du wahrscheinlich Neuland.

Gruß Fips

Derfips:
Damit betrittst du wahrscheinlich Neuland.

Da hast du wahrscheinlich Recht. Hab das das von Tommy56 probiert habe ein Beispiel Code gefunden der läuft denke ich auch soweit also er erzeugt ein eigenes WLAN was ich auch mit dem Handy sehen kann nur kann ich nicht auf dem Web Server zugreifen weil er die IP im Beispiel Code nicht findet

mindblow1999:
habe ein Beispiel Code gefunden

Wenn dein geheimer Beispiel Code die IP für den Browser nicht seriell zur Verfügung stellt, ist es kein gutes Beispiel.

Mein Beispiel zeigt die IP im Seriellen Monitor!

Gruß Fips

Derfips:
Mein Beispiel zeigt die IP im Seriellen Monitor!

Meine auch
Er zeigt an: Configuration access point...AP IP : 192.168.4.1.
HTTP server started

Mit freundlichen Grüßen

Ich habe mir jetzt was gebastelt in der Art eines "Wifi-Reset" Knopfes (umgspr. für "Schalter" für die lieben deutschen Freunde):
Ist bei einem Neustart ein Pin auf Ground, dann startet der ESP mit einem AP und einem Standard-Passwort.
Wenn also mal die WLAN Verbindung zufällig nicht erreichbar ist, versucht er weiterhin dieses zu erreichen, nur wenn der Anwender bewusst den Wifi-Reset macht, bekommt er die Möglichkeit mit Hilfe des AP Modus seine WLAN Credentials neu abzuspeichern. Quasi ein WIFI-Manager für arme :wink:

noiasca:
Ich habe mir jetzt was gebastelt in der Art eines "Wifi-Reset" Knopfes:
Ist bei einem Neustart ein Pin auf Ground, dann startet der ESP mit einem AP und einem Standard-Passwort.
Wenn also mal die WLAN Verbindung zufällig nicht erreichbar ist, versucht er weiterhin dieses zu erreichen, nur wenn der Anwender bewusst den Wifi-Reset macht, bekommt er die Möglichkeit mit Hilfe des AP Modus seine WLAN Credentials neu abzuspeichern. Quasi ein WIFI-Manager für arme :wink:

Bei mir geht das auch ohne Knopf. :slight_smile:

Sollte das Wlan nicht ereichbar sein öffnet der Esp einen AP, prüft aber aller fünf Minuten ob der Router wieder erreichbar ist.
Will man bewusst neue Zugangsdaten eingeben, reicht es vor dem Neustart die Datei mit den Zugangsdaten aus dem Spiffs zu löschen.

Gruß Fips

Derfips:

Bei mir klappt es trotzdem nicht.
Er sagt mir der HTTP Server wurde gestartet und ich soll auf folgende Webseite gehen : 192.168.4.1 aber die Seite ist nicht erreichbar :frowning:

hast du dich auch im (W)LAN vom NodeMCU angemeldet?

Wenn ja - dann mach bitte mal ein ipconfig und schreibe uns welche IP-Adresse dein PC vom NodeMCU erhalten hat.

mindblow1999:
Bei mir klappt es trotzdem nicht.
Er sagt mir der HTTP Server wurde gestartet und ich soll auf folgende Webseite gehen : 192.168.4.1 aber die Seite ist nicht erreichbar :frowning:

Immer wenn ich deinen Sketch auf meinem Esp... lade sagt mir die Arduino IDE Fehler in Zeile 42!
Hast du eine Erklärung dafür?

Gruß Fips

Ist das Gerät, mit dem Du die IP 192.168.4.1 erreichen willst auch im 192.168.4.0 - Netz erreichbar?
Bei einem PC dürfte das nicht gegeben sein. Da musst Du erst mal eine neue Netzverbindung einrichten.

Mobil sollte man sich auf das neue WLAN connecten können.

Gruß Tommy

noiasca:
hast du dich auch im (W)LAN vom NodeMCU angemeldet?

Ich trau mich's gar nicht zu sagen aber ich wusste nicht das ich mich mit diesem erzeugten WLAN anmelden muss.
Ich hatte gedacht ich bekomme einfach eine Seite im Internet wo ich meine neuen Netzwerkdaten eingeben muss und er so seine neuen Daten bekommt statt die Netzwerkdaten über den seriellen Monitor einzugeben. Jetzt wird mir auf der IP Adresse nur angezeigt das ich verbunden bin. Das bringt mir irgendwie nichts

Du musst da natürlich eine Website programmieren, die die Daten entgegen nimmt und z.B. im SPIFFS ablegt und die beim Neustart wieder liest.
Solange Du uns aber Deinen Sketch geheim hälst, wir es mir der Hilfe wohl nicht so prickelnd werden.

Gruß Tommy

mindblow1999:
Ich hatte gedacht ich bekomme einfach.....

Das wäre zu einfach!

Gruß Fips

Derfips:
Das wäre zu einfach!

Mist. Ich hab mir sagen lassen du hast da was im petto :))