Hi zusammen,
ich versuch mir grad einen Sketch zusammenzubauen, bei dem sich der ESP nach Verbindung mit dem AP automatisch mit der Server-Startseite verbindet (so dass man sich spart, den Browser öffnen zu müssen, um die IP-Adresse einzugeben).
Dieses Beispiel hier habe ich als "Kopiervorlage" genommenm wobei ich in meinem Fall WIFI_AP_STA also Modus will.
Das oben genannte Beispiel funktioniert prima (wobei die Frage ist, ob ein iPhone oder ein PC auch auf die Startseite weitergeleitet wird, da in dem Beispiel von einer "default android DNS" die Rede ist.
Aber mein Versuch, die Inhalte des Beispiels in mein bestehendes Sketch-Konstrukt einzubauen klappt leider nicht:
const char indexPage[] PROGMEM = R"=====(
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta http-equiv="Cache-Control" content="no-cache, no-store, must-revalidate">
<meta http-equiv="Pragma" content="no-cache">
<meta http-equiv="Expires" content="0">
</head>
<body>
<h1>Startseite</h1>
</body>
</html>
)=====";
const char anderePage[] PROGMEM = R"=====(
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta http-equiv="Cache-Control" content="no-cache, no-store, must-revalidate">
<meta http-equiv="Pragma" content="no-cache">
<meta http-equiv="Expires" content="0">
</head>
<body>
<h1>Andere Seite</h1>
</body>
</html>
)=====";
#include <WiFi.h>
#include <WiFiClient.h>
#include <WiFiAP.h>
#include <WebServer.h>
WebServer server(80);
#include <DNSServer.h>
const byte DNS_PORT = 53;
IPAddress apIP(8,8,4,4); // The default android DNS
DNSServer dnsServer;
char APssid[25] = "MyAccesspoint";
char APpassword[20] = "123456789";
char ssid[14] = "MySSID-123456";
char password[10] = "MyPW12345";
void setup() {
// put your setup code here, to run once:
Serial.begin(115200);
server.on("/", display_root);
server.on("/test", display_andereseite);
WiFi.mode(WIFI_AP_STA);
WiFi.begin(ssid, password);
unsigned long pause=10000;
unsigned long connTimer = millis();
while (WiFi.status() != WL_CONNECTED && (millis()-connTimer < pause)) {
Serial.print(".");
delay(500);
}
if (WiFi.status() == WL_CONNECTED) {
// Juhu, verbunden!
}
WiFi.softAP("ESP32-DNSServer", "123456789");
WiFi.softAPConfig(apIP, apIP, IPAddress(255, 255, 255, 0));
dnsServer.start(DNS_PORT, "*", apIP);
server.begin(); // Server starten
}
void loop() {
dnsServer.processNextRequest();
server.handleClient();
}
void display_root() {
const char * httpType PROGMEM = "text/html";
server.send_P(200, httpType, indexPage);
}
void display_andereseite() {
const char * httpType PROGMEM = "text/html";
server.send_P(200, httpType, anderePage);
}
ich vermute mal, es liegt daran, dass diese Passage hier bei mir fehlt:
WiFiClient client = server.available(); // listen for incoming clients
if (client) {
String currentLine = "";
while (client.connected()) {
if (client.available()) {
char c = client.read();
if (c == '\n') {
if (currentLine.length() == 0) {
client.println("HTTP/1.1 200 OK");
client.println("Content-type:text/html");
client.println();
client.print(responseHTML);
break;
} else {
currentLine = "";
}
} else if (c != '\r') {
currentLine += c;
}
}
}
client.stop();
}
Aber ich regle das ja über die server.on() Passagen, oder?
Denn wenn ich die Passage einbaue, bekomm ich eine Fehlermeldung.
Habt ihr wieder einen guten Tipp für mich? Der Wille ist da, der Geist ist müde ;-(
LG