moinsen Community,
ich habe folgendes Vor:
- mit einem NodeMCU eine Email versenden. Das läuft schon mal
- 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 
aber sollte erstmal allgemein laufen
mindblow1999:
ne wird hinterher noch mit ner pufferbatterie versorgt 
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 
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 
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 
Bei mir geht das auch ohne Knopf. 
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 
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 
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
Derfips:
Das wäre zu einfach!
Mist. Ich hab mir sagen lassen du hast da was im petto :))