Hallo Mitleser,
nochmal kurz die Aufgabe: 2 Module, ein Empfänger- und Anzeigemodul "Flag" und ein Überwachungsmodul "Pbox", beide als ESP8266MOD 12-F. Zur Information die aktellen Codes; es sind etliche LED-Aktionen und Textzeilen zum Debuggen eingefügt. Die Funktion wurde meist ohne diese "Debug"-Einfügungen getestet, funktionierte gleich bis auf immer wieder gleiche, meist aber geänderte ip´s. Diese meist sehr zufälligen, von mir nicht beeinflussbaren ip-Änderungen sind mein eigentliches Problem. Bisher :-/ Vielleicht kann/will jemand helfen? Danke im Voraus.
Anmerkung: die drei Platinen wurden testweise auch mal getauscht, um ihre vollständige Funktionalität sicher zu stellen.
Einschub CODEs
Code:
// Programm Flag-ESP aus "ESP8266 Das Projektbuch", Seiten 27ff ... korr 08072023
// Beginn: bearbeitet am 20.07.2023 00:44 => hh:mm Boardeinstellg >>FLAG<< auf Board #01
// . . . . . . .
//Aktuell bearbeitet 02 08 23 0944 GENAU abstimmen mit Projektbuch, ABER eigene Fix-Daten
#include <ESP8266WiFi.h>
#include <ESP8266WebServer.h>
#include <Servo.h>
#define LED 2 // LED16=D0; LED wird mit "low" eingeschaltet, "high" => aus
// LED2 =!D4 (int. LED)
const char* ssid = "NodeKTM"; // Empfänger ist hier FLAG ! ! <<< Aufrufer = Postbox ! !
const char* password = "12345678"; //Enter Password here
IPAddress ip (192,168, 1, 92);
IPAddress local_ip (192,168, 1, 92);
IPAddress gateway (192,168, 1, 1);
IPAddress subnet (255,255,255, 0);
Servo myservo;
String inString;
ESP8266WebServer server(80);
// --------------------------
void handleRoot()
{
server.send(200, "text/plain", "ESP Flag Server");
Serial.println("\r\nhandleRoot on"); // ###> 1 Zeile Einfügung
}
// --------------------------
void handleFlag()
{
server.send(200, "text/plain", "Flag is up");
// 1 Zeile Einfügung zur besseren Veständlichkeit
Serial.println("\r\nhandleFlag on"); // ###> 1 Zeile Einfügung
delay(1500);
}
// ---------------------------------------------------------------------------------------------------------
void setup() // ssid = "FLAG";
{ // Sequenz setup Start
Serial.begin(115200);
delay( 2000);
Serial.println("\r\n"); // Start mit neuer Zeile
// -------------------------------------------------------
// -------------------------- #01 Beginn zu LED, LED IST aus
pinMode(LED, OUTPUT); // Port Ausgang D0 schalten
digitalWrite(LED, HIGH); // LED ein LED (1) LED I EIN IIIIIII das erste Mal
delay( 1000);
// -------------------------- #01 Ende zu LED, LED IST an
// -------------------------- #02 Beginn zu LED, LED IST an
digitalWrite(LED, LOW ); // LED aus LED (0) LED A U S 00000000 das erste Mal
// -------------------------- #02 Ende zu LED, LED geht aus
// -------------------------------------------------------
delay( 2000); // Verzögerungszeit zur sicheren Ausgabe von seriell
//### Zusatz - für Debug-/Informations-/Orientierungszwecke
Serial.println("FLAG.xxx11, #03, NodeKTM, 1++8 .1.92, 0508 17h08,"); // Quelle Code und Board-Nr
// 11h17: Zeile ?79? : myservo.write(0); zugefügt
// Serial.println("\r\n") ;
// -------------------------- Beginn "alter" WiFi-Beginn aus "..Projektbuch.."
// WiFi.begin(ssid, password); // im Original(-buch) steht "pass" statt password
// WiFi.config(ip, gateway, subnet);
// -------------------------- Ende "alter" WiFi-Beginn
// -------------------------- Beginn "neuer" WiFi-Beginn aus "..Simpl..Srvr-01.."
WiFi.softAP(ssid, password);
WiFi.softAPConfig(local_ip, gateway, subnet);
// -------------------------- Ende "neuer" WiFi-Beginn aus "..Simpl..Srvr-01.."
// -------------------------- #03 Beginn zu LED, LED ist aus
digitalWrite(LED, HIGH ); // LED an LED (1) LED I EIN IIIIIII das zweite Mal
// -------------------------- #03 Ende zu LED, LED geht an
delay( 1000); // Verzögerungszeit zur sicheren Ausgabe
while (WiFi.status() != WL_CONNECTED) //#### "FLAG"=Anzeige
{
delay( 500);
Serial.print(".");
} //
// -------------------------- #04 Beginn zu LED, LED ist an
digitalWrite(LED, LOW ); // LED aus LED (0) LED A U S 00000000 das zweite Mal
// -------------------------- #04 Ende zu LED, LED geht aus
//### Serial.println("") ;
// >>>> Übernahme aus Simpl-..Srv.. ------------// first line of the code snippet below, for
// example, indicates that when a server receives an HTTP request on the root (/) path, it will
// call the handle_OnConnect() function. Important to note that the URL specified is a relative path.
// server.on("/", handle_OnConnect);
// Serial.println("") ;
// Serial.print("Datei xxxx1.ino für FLAG. ");
// --------------------------
Serial.print("Verbunden mit ");
Serial.println(ssid);
Serial.print("localIP address: ");
Serial.println(WiFi.localIP()) ;
myservo.attach(13); // Syntax servo.attach :
//- myservo.write(0); // servo.attach(pin); oder servo.attach(pin, min, max)
delay(1500); // servo.attach(pin, min, max) mindefault 544, max 2400
// myservo.write(0);
//- myservo.detach();
server.on("/",handleRoot) ;
server.on("/flag/", handleFlag);
// >>>> Übernahme aus Simpl-..Srv..
// ..if the client requests a URL that isn’t specified with
// server.on(). It should give a 404 error (Page Not Found)
// as a response
// server.onNotFound(handle_NotFound);
// -------------------------- #05 Beginn zu LED, LED ist aus
digitalWrite(LED, HIGH); // LED ein LED D4 (1) LED ein, das dritte Mal
// -------------------------- #05 Ende zu LED, LED ist an
delay(1500); // servo.attach(pin, min, max) mindefault 544, max 2400
// -------------------------- #06 Beginn zu LED
digitalWrite(LED, LOW ); // LED aus LED D4 (0) LED aus, das dritte Mal
delay(1500); // servo.attach(pin, min, max) mindefault 544, max 2400
// -------------------------- #06 Ende zu LED
server.begin();
Serial.println("HTTP server started");
} // Sequenz setup Ende
void loop(void)
{
server.handleClient();
/* -------------------------- #05 Beginn zu LED
digitalWrite(LED, HIGH); // LED ein LED D4 (1)
delay( 50); //
// -------------------------- #05 Ende zu LED
// -------------------------- #06 Beginn zu LED
digitalWrite(LED, LOW ); // LED aus LED D4 (0)
delay( 1000); //
// -------------------------- #06 Ende zu LED
*/
}
// E N D E des originalen Codes
// --------------------------
// --------------------------
// void handle_OnConnect()
// {
// Serial.println("handle OnConnect");
// }
// void handle_NotFound()
// {
// server.send(404, "text/plain", "Not found");
// }
// --------------------------
// --------------------------
Code:
// Programm Postbox-ESP aus "ESP8266 Das Projektbuch", Seiten 35ff ... korr 08072023
/* bearbeitet am 20.07.2023 23:46 => hh:mm setup mit delay(1500) vor+nach Serial.println
. . . . P B O X
aktuell bearbeitet 05 08 2023 17h43
/ / / / */
#include <ESP8266WiFi.h>
const char* ssid = "NodeKTM"; // Dies hier ist Postbox (Empfänger ist FLAG/2)
const char* pass = "12345678"; //
const char* serverIp = "192,168,1,92"; // Adresse aktuell 01 08 2023 17h54
// -------------------------- ------------------------
int serverPort = 80;
WiFiClient client;
// --------------------------
void setup()
{
Serial.begin(115200);
delay( 2000);
Serial.println(""); // Anmelde"text"; (Pbox #02,) nur Zeilenvorschub
Serial.println("Pbox-xxx12, #02, NodeKTM, 1++8, .1.92, 0508-17h42"); // Anmelde"text"; Pbox #02, Zeilenvorschub
WiFi.begin (ssid, pass); //
while (WiFi.status() != WL_CONNECTED)
{
delay( 500);
Serial.print(".");
}
delay( 1000);
Serial.println("");
Serial.println("Pbox-xxx12, #02, NodeKTM, 1++8, .1.92, 0508-17h42");
Serial.print("\r\nverbunden mit : ");
Serial.print(ssid);
Serial.print("\r\nIP address/WiFi.localIP() : ");
Serial.println(WiFi.localIP());
// >>>>>>>>< neu
Serial.print("serverIp ist :"); Serial.print(serverIp);Serial.println("");
if ( !client.connect(serverIp, serverPort) )
{
Serial.println("connect fail");
}
client.print("GET /flag/");
client.println(" HTTP/1.1");
client.print("Host: ");
client.println(serverIp);
client.println("Connection: close");
client.println();
client.stop();
delay(1500); //
ESP.deepSleep(0);
}
void loop() { }
Code:
// softIPtst.ino
#include <ESP8266WiFi.h>
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
void setup()
{
Serial.begin(115200);
delay( 1000);
Serial.println(""); Serial.println(""); Serial.println("- - - -");
delay( 1000);
Serial.println("setting up softAPtst; n01 05082023 16h40");
Serial.println("AP testen: NodeKTM, 12345678");
boolean result = WiFi.softAP("NodeKTM", "12345678");
delay( 2000);
if (result = true)
{
Serial.println("ready! Step: '1' ca 2sec");
}
else
{
Serial.println("failed!");
}
}
// - - - - - - - - - - - - - - - - - -
void loop()
{
Serial.printf("station connected = %d\n", WiFi.softAPgetStationNum());
/* if ( !WiFi.softAPgetStationNum() )
digitalWrite(LED, LOW); // LED ein
if ( WiFi.softAPgetStationNum() )
{
digitalWrite(LED, HIGH ); // LED aus
delay( 200);
}
else { delay( 200); }
delay( 800);
digitalWrite(LED, HIGH ); // LED aus */
delay( 1000);
// Serial.println();
}
Platine/Programm Flag startet einen WLAN-AP, "NodeKTM", "ip(192,168,1,92)" - und horcht auf ein Signa (alternativ mal testweise vor allem anderen die softAP - erfolglos)l. Nach dem Start geht er in eine while-Schleife
........while (WiFi.status() != WL_CONNECTED)
und sendet ohne "CONNECTED" dauernd einen Punkt auf die serielle Schnittstelle. Mit dem Zeitpunkt "CONNECTED" soll die Schleife verlassen werden in die eigentliche "loop"-Routine mit
........server.handleClient();
Aktuell (ohne softAPtst) gibts nur eine endlose Ausgabe (USB-seriell) von Punkten. Die WLAN-Liste am Win10-PC zeigt die SSID (NodeKTM) mit - zum Zeitpunkt dieses Berichtes - IPv4 192.168.1.93 und IPv4-DNS-Server 192.168.1.92 (gelegentlich auch 192.168.4.2/192.168.4.1 oder siehe Bild unten auch mal ne 169.254.134.222 !!!).
Pbox startet (jetzt) ebenfalls einen WLAN-AP mit gleichen Parametern: SSID, ip, Passwort etc., fragt wie oben:
........while (WiFi.status() != WL_CONNECTED)
und sendet ohne "CONNECTED" dauernd einen Punkt auf die serielle Schnittstelle. Mit dem Zeitpunkt "CONNECTED" soll Verbindung genannt werden und der Controller in Tiefschlaf gehen. Die loop-Schleife bleibt leer.
Bei einem Power-on/off bzw. dem funktionsbedingten Pinnsignal erfolgt der RESET.
Die letzten Experimente brachten keine Verbindung nach der eben beschriebenen Vorgehensweise. Es sei denn . . . .
Die Platine NodeMCU-ESP8266MOD 12-F enthält das Programm "softPStst". Sie fragt
........boolean result = WiFi.softAP("NodeKTM", "12345678");
auf dem WLAN "NoteKTM" ab und meldet die Anzahl der erkannten aktiven Stationen.
Beim aktuellen Testbetrieb - eben, noch OHNE die beiden Platinen/Programme "FLAG" und "Pbox" wurde WLAN erstellt mit IPv4 192.168.4.2 und IPv4-DNS-Server 192.168.4.1.
Werden die beiden Platinen/Programme "FLAG" und "Pbox" zuerst eingeschaltet werden andere oder gleiche IPs erstellt; fast durchwegs andere. Werden "FLAG" und "Pbox" vor der "softPStst" bestromt (dabei zeigen sie die "."Punktfolge im Dauerstrom) schaltet nach rund fünf bis sechs Sekunden nach Bestromen der "softPStst" die "Pbox" aus der Punktesenderei weiter.
........Bild Text Pbox
Dabei trifft Pbox diese falschen IPs nicht, soweit ich die zufälligerweise gleichen IPs feststellte, war die Pbox aber auch bei gemeinsamer IP nicht über "Connection: close" bis zum "deepSleep" durchgekommen.
Ich finde keine weitere Möglichkeit das Ganze zu richten. Die Version über Mail oder Messenger (hatte Andree-HB ja Ende 20222 beschrieben) wollte ich eigentlich nicht nehmen - niemand in der Familie hat nen Messenger laufen ...
PS: Bilder aus diesem Thread vor diesem Posting werden demnächst gelöscht.
Lesezeichen