Esp8266 d1 wifi

Hallo,
leider bekomme ich keine Verbindung über WLan zum D1.
Ich suche seit ein paar Tagen nach einer Lösung.

#include <ESP8266WiFi.h>
#include <ESP8266WebServer.h>
 
String html1 = "<!DOCTYPE html>\r\n<html>\r\n\
<head>\r\n<meta content=\"text/html; charset=ISO-8859-1\" http-equiv=\"content-type\">\r\n\
<title>WebSchalter</title>\r\n\
<form action=\"";
// String((val)?"/1.html":"/0.html")
String html2 = "\">\r\n<input value=\"ON/OFF\" style=\"";
String html3 = " width:5em;height:3em; font-size: 16px;\" type=\"submit\">\
</form>\r\n</head>\r\n<body>\r\n</body>\r\n</html>";
 
ESP8266WebServer server(80);    // Server Port  hier einstellen
int val = 1;                    //Startzustand ausgeschaltet
String Temp = "";
 
void Ereignis_SchalteON()       // Wird ausgefuehrt wenn "http://<ip address>/1.html" aufgerufen wurde
{
  val = 0;                      // Relais Aus
  digitalWrite(3, val);         // GPIO1
  Temp = html1 + String((val) ? "/1.html" : "/0.html");
  Temp += html2 + String((val) ? "BACKGROUND-COLOR: DarkGray;" : "BACKGROUND-COLOR: Chartreuse;") + html3;
  server.send(200, "text/html", Temp);
}
 
void Ereignis_SchalteOFF()  // Wird ausgefuehrt wenn "http://<ip address>//0.html" aufgerufen wurde
{
  val = 1;                      // Relais Ein
  digitalWrite(3, val);         // GPIO1
  Temp = html1 + String((val) ? "/1.html" : "/0.html");
  Temp += html2 + String((val) ? "BACKGROUND-COLOR: DarkGray;" : "BACKGROUND-COLOR: Chartreuse;") + html3;
  server.send(200, "text/html", Temp);
}
 
void Ereignis_Index()           // Wird ausgeuehrt wenn "http://<ip address>/" aufgerufen wurde
{
  Temp = html1 + String((val) ? "/1.html" : "/0.html");
  Temp += html2 + String((val) ? "BACKGROUND-COLOR: DarkGray;" : "BACKGROUND-COLOR: Chartreuse;") + html3;
  server.send(200, "text/html", Temp);
}
 
void setup()
{
  digitalWrite(3, 1);           // Anfangszustand 1 (Relais ausgeschaltet)
  pinMode(3, OUTPUT);           // GPIO0 als Ausgang konfigurieren
  pinMode(2, INPUT_PULLUP);     // GPIO2 als Eingang mit Pullup konfigurieren
  digitalWrite(3, 1);           // Anfangszustand 1 (Relais ausgeschaltet)
 
  Serial.begin(115200);         // Serielle schnittstelle initialisieren
  Serial.println("");           // Lehere Zeile ausgeben
  Serial.println("Starte WLAN-Hotspot \"astral\"");
  WiFi.mode(WIFI_AP);           // access point modus
  WiFi.softAP("astral", "12345678");    // Name des Wi-Fi netzes
  delay(500);                   //Abwarten 0,5s
  Serial.print("IP Adresse ");  //Ausgabe aktueller IP des Servers
  Serial.println(WiFi.softAPIP());
 
  //  Bechandlung der Ereignissen anschlissen
  server.on("/", Ereignis_Index);
  server.on("/1.html", Ereignis_SchalteON);
  server.on("/0.html", Ereignis_SchalteOFF);
 
  server.begin();               // Starte den Server
  Serial.println("HTTP Server gestartet");
}
 
void loop()
{
  server.handleClient();
  if (!digitalRead(2))          //Wenn Taster an GPIO2 betetigt wurde
  {
    val = !val;                 // Schaltzuschtand andern
    digitalWrite(3, val);
    while (!digitalRead(2))server.handleClient(); // Warten bis der Taster losgelassen wird.
  }
}

Der Code wird ohne Fehler compiliert und übertragen.
Gruss

Wenn Du ihn als AP (AccessPoint) konfigurierst, baut er ein eigenes WLAN auf und verbindet sich nicht mit Deinem bestehenden WLAN.
Wenn Du das willst, musst Du STA (Station) nehmen. Auf die kombinierte Variante APSTA gehe ich mal nicht ein, da die hier wohl nicht gebraucht wird.

Gruß Tommy

ich würde mit einem originalen Sketch beginnen.

Wenn du einen AP machen willst, teste zunächst mit dem Beispiel "WiFiAccessPoint". Das schaut in Teilen anders aus.

Wo bitte finde ich den originalen Sketch?

in der IDE,
Beispiele / ESP8266Wifi / WiFiAccessPoint

Habe ein Programm gefunden:

#include <ESP8266WiFi.h>

const char *ssid = "AC-ESP8266";
const char *password = "987654321";

IPAddress local_IP(192,168,0,71);
IPAddress gateway(192,168,0,99);
IPAddress subnet(255,255,255,0);

void setup()
{
  Serial.begin(115200);
  Serial.println();

  Serial.print("Setting soft-AP configuration ... ");
  Serial.println(WiFi.softAPConfig(local_IP, gateway, subnet) ? "Ready" : "Failed!");

  Serial.print("Setting soft-AP ... ");
  Serial.println(WiFi.softAP(ssid,password) ? "Ready" : "Failed!");
  //WiFi.softAP(ssid);
  //WiFi.softAP(ssid, password, channel, hidden, max_connection)
  
  Serial.print("Soft-AP IP address = ");
  Serial.println(WiFi.softAPIP());
}

void loop() {
  Serial.print("[Server Connected] ");
  Serial.println(WiFi.softAPIP());

  delay(500);
}

Mein Echo sagt: Verbunden, aber mein Handy sagt "Verbindung fehlgeschlagen, aber es findet zumindestens den AP.

Auch im genannten Beispiel kann ich keine Verbindung herstellen. Liegt es am D1?

Nö. Nimm das delay raus und nutze mal
softAPgetStationNum();
um zu sehen, ob sich einer connected hat.
Ich gehe davon aus, dass die Ausgaben im Setup Erfolg angezeigt haben.

Gruß Tommy

Nimm doch mal das Beispiel aus der Core das findest Du unter

Heinz

1 Like

Genau das habe ich genommen.
Ich habe noch ein zweites Gerät, aber der gleiche Fehler.

Das sieht aber anders aus, als dein Sketch in Post #6.
Somit hast du das falsche geladen.

Evtl. sollte er erst mal klar stellen, was er überhaupt will.
Da geistert immer noch der Satz mit der Verbindung zum WLAN rum und das macht der AP definitiv nicht. Also mal Butter bei die Fische: WAs soll es nun genau werden?

Gruß Tommy

Ich möchte eine Verbindung mit WLan und damit via Handy Ausgänge steuern.

Jetzt habe ich aber ein anderes Problem.
Ich habe ein Notebook mit Windows 11 und dabei wird mir keine Vertbindung zum D1 angezeigt und ich kann über Werkzeuge auch keinen Port anwählen.
Ich gehe wieder zu meinem Raspi!
Da habe ich wenigstens eine Verbindung zum D1.
Scheiss Windoofs

Dann solltest Du keinen AP betreiben, sondern den ESP im Stationmodus betreiben.
Beispiel oder hier. Erst mal nur den Teil, bis er sich ins WLAN eingewählt hat und eine IP bekommen hat.

Dann kommt es darauf an, was Du mit dem Handy machen willst. Da man Dir jedes Wort aus der Nase ziehen muss, höre ich hier erst mal auf.

Beschreibe mal ausführlich Dein Vorhaben.

Gruß Tommy

Nee, meist sitzt das Problem vor dem Bildschirm.
Wenn du ständig deine Anforderungen wechselst, bzw. diese nicht richtig erklärst und dann noch andere Aktionen startest, wie sollen wir das mitbekommen.
Wir können nicht auf deinen Arbeitsplatz schauen.

Ich habe jetzt ein Programm gefunden, das vor ein paar Jahren schon gelaufen ist.
Das funktioniert!
Ich muss nur noch herausfinden, warum die anderen Programme nicht laufen.
Hier das Programm welches funktioniert:

#include <ESP8266WebServer.h>  // <WebServer.h> for ESP32  
int port = 80;
int led[6] = {D0,D1,D2,D5,D6,D7};
bool led_status[6] = {false};
const char* ssid = "ESP32_Server";  // choose a name
const char* pass = "XXXXXXXXXXX"; // must be >= 8 characters (at least for the ESP32)!

IPAddress ip(192,168,0,70); // should be 192.168.4.x
IPAddress gateway(192,168,0,99);  // should be 192.168.4.x
IPAddress subnet(255,255,255,0);

ESP8266WebServer server(port);  // WebServer server(80); for ESP32
 
String headAndTitle = "<head><style>"
                        ".button {"
                          "border: none;"
                          "color: white;"
                          "width: 350px;"
                          "padding: 20px;"
                          "text-align: center;"
                          "margin: 20px 200px;"
                        "}"
                        ".greenButton {background-color: green; font-size: 64px;}"
                        ".redButton {background-color: red; font-size: 64px;}"
                        ".blueButton {background-color: blue; font-size: 50px;}"
                        ".blackButton {background-color: black; font-size: 64px;}"
                        ".magentaButton {background-color: magenta; font-size: 64px;}"
                        ".yellowButton {background-color: yellow; font-size: 50px;}"
                      "</style>"
                      "</head><meta http-equiv=\"refresh\" content=\"5\"></head>"
                      "</BR></BR><h1 align=\"center\">Control your ESP8266 by Browser</h1></div>"
                      "<div align=\"center\">Control six LEDs and get measured value, AP - ModeS</BR></BR></div>";

String led0_1= "<a href=\"/led0_on\"><button class=\"button greenButton\">LED0 On</button></a>";
String led0_0= "<a href=\"/led0_off\"><button class=\"button redButton\">LED0 Off</button></a>";
String led1_1= "</BR><a href=\"/led1_on\"><button class=\"button greenButton\">LED1 On</button></a>";
String led1_0= "</BR><a href=\"/led1_off\"><button class=\"button redButton\">LED1 Off</button></a>";
String led2_1= "</BR><a href=\"/led2_on\"><button class=\"button greenButton\">LED2 On</button></a>";
String led2_0= "</BR><a href=\"/led2_off\"><button class=\"button redButton\">LED2 Off</button></a>";
String led3_1= "</BR><a href=\"/led3_on\"><button class=\"button blackButton\">LED3 On</button></a>";
String led3_0= "</BR><a href=\"/led3_off\"><button class=\"button blackButton\">LED3 Off</button></a>";
String led4_1= "</BR><a href=\"/led4_on\"><button class=\"button magentaButton\">LED4 On</button></a>";
String led4_0= "</BR><a href=\"/led4_off\"><button class=\"button magentaButton\">LED4 Off</button></a>";
String led5_1= "</BR><a href=\"/led5_on\"><button class=\"button yellowButton\">LED5 On</button></a>";
String led5_0= "</BR><a href=\"/led5_off\"><button class=\"button yellowButton\">LED5 Off</button></a>";


void setup(){
  pinMode(led[0], OUTPUT);
  digitalWrite(led[0], LOW);

  pinMode(led[1], OUTPUT);
  digitalWrite(led[1], LOW);
  
  pinMode(led[2], OUTPUT);
  digitalWrite(led[2], LOW);
  
  pinMode(led[3], OUTPUT);
  digitalWrite(led[3], LOW);

  pinMode(led[4], OUTPUT);
  digitalWrite(led[4], LOW);

  pinMode(led[5], OUTPUT);
  digitalWrite(led[5], LOW);


  WiFi.softAPConfig(ip, gateway, subnet); 
  WiFi.softAP(ssid, pass);  
 
  delay(500); 

  server.on("/",handleRoot);
  server.on("/led0_on", led0on);
  server.on("/led0_off", led0off);

  server.on("/led1_on", led1on);
  server.on("/led1_off", led1off);

  server.on("/led2_on", led2on);
  server.on("/led2_off", led2off);
  
  server.on("/led3_on", led3on);
  server.on("/led3_off", led3off);
  
  server.on("/led4_on", led4on);
  server.on("/led4_off", led4off);
  
  server.on("/led5_on", led5on);
  server.on("/led5_off", led5off);
  server.begin();
}
  
void loop(){
  server.handleClient(); 
}

void handleRoot() {
  led0off();
}

void led0on(){
  led_status[0] = true;
  switchLEDAndSend(0,1);
}

void led0off(){
  led_status[0] = false;
  switchLEDAndSend(0,0);
}

void led1on(){
  led_status[1] = true;
  switchLEDAndSend(1,1);
}

void led1off(){
  led_status[1] = false;
  switchLEDAndSend(1,0);
}

void led2on(){
  led_status[2] = true;
  switchLEDAndSend(2,1);
}

void led2off(){
  led_status[2] = false;
  switchLEDAndSend(2,0);
}

void led3on(){
  led_status[3] = true;
  switchLEDAndSend(3,1);
}

void led3off(){
  led_status[3] = false;
  switchLEDAndSend(3,0);
}

void led4on(){
  led_status[4] = true;
  switchLEDAndSend(4,1);
}

void led4off(){
  led_status[4] = false;
  switchLEDAndSend(4,0);
}

void led5on(){
  led_status[5] = true;
  switchLEDAndSend(5,1);
}

void led5off(){
  led_status[5] = false;
  switchLEDAndSend(5,0);
}



void switchLEDAndSend(int num, bool state){
  String message = "";
  message += headAndTitle;
  message += "<div align=\"center\";>";
  
  digitalWrite(led[num], state);
  (led_status[0]==true)?(message += led0_0):(message += led0_1);
  (led_status[1]==true)?(message += led1_0):(message += led1_1);
  (led_status[2]==true)?(message += led2_0):(message += led2_1);

  (led_status[3]==true)?(message += led3_0):(message += led3_1);
  (led_status[4]==true)?(message += led4_0):(message += led4_1);
  (led_status[5]==true)?(message += led5_0):(message += led5_1);


  
  float measuredValue = analogRead(A0)/1024.0 * 3.3; // adjust for your board
  message += "</BR><button class=\"button blueButton\">";
  message += "Voltage [V]: </BR>";
  message += String(measuredValue, 2);
  message += "</button>";
  message += "</div>";
  server.send(200, "text/html", message); 
}

Danke für die Hilfe.
Das erklärt aber nicht, warum Windoofs 11 die Ports zwar erkennt aber Arduino nicht.

Das widerspricht aber Deiner Anforderung aus #13, denn da ist Dein WLAN nicht beteiligt.
Du weißt offenbar selbst nicht, was Du willst.

Gruß Tommy

Und weiter gehts mit der Irreführung.