ESP8266 (Wifi_ap_sta) mode wie richtig benutzen?

Hallo zusammen!

Ich bin neu dabei und bastel gerade mit meinem ESP8266 ein bisschen rum.
Hab schon vieles erreicht was ich haben wollte, auch sehr komplexe Sachen da ich mit einem LED Strip und FastLED arbeite.

Nun würde ich gerne etwas umsetzen. Ich habe schon viel im Internet nachgesehen aber nichts gefunden was funktioniert. Es geht darum das ich von meinem ESP8266 einen Hotspot also einen Soft-Access-Point aussende. Das funktioniert auch super und ich kann prima mit der Website verbinden.

Nun würde ich gerne zudem den ESP8266 mit dem Internet verbinden also mit einem Router so das mein Hotspot auch eine Internet verbindung hat. Problem ist dabei das wenn ich mich mit dem Router verbinde (was auch super funktioniert) sich der Soft-Access-Point sofort schließt. Selbst wenn ich Ihn danach wieder öffne bringt das nichts. Ich habe auch schon versucht erst alles zu disconnecten oder den Soft-Access-Point auf den selben Channel wie den mit dem der ESP8266 mit dem Router verbunden ist zu bringen aber leider ohne Erfolg. Hier in etwa mein code:

Soft-Access-Point registrieren:

  WiFi.mode(WIFI_AP_STA);
  wifi_station_set_reconnect_policy(false);
  wifi_station_set_auto_connect(false);

  WiFi.softAP(function_string2char(WIFI_TAG), function_string2char(WIFI_PW));
  delay(100);
  WiFi.softAPConfig(host_IP, host_IP, host_subnet);

  server.on("/", handleRoot);
  server.begin();

  MDNS.begin(host);
  MDNS.addService("http", "tcp", port);

Verbindung zum router registrieren:

  WiFi.softAPdisconnect(true);
  WiFi.disconnect();
  delay(1000);

  WiFi.config(wifi_IP, wifi_IP, host_subnet);
  WiFi.scanNetworksAsync(scanNetworksNow);
  WiFi.begin(ssid, password, networkChannelID);
  delay(1000);

  setupSoftAP();

ACHTUNG: auch ohne disconnect von AP und Wifi und dem neu registieren des Soft-Access-Points keinen Erfolg!!!

Ich hoffe Ihr könnt mir Rat geben :)!

Hallo,

leider kann ich aus Deinen Schnipseln nichts erkennen. Aber bei mir klappt das . Es muss natürlich der selbe Kanal sein, hab ich auf standard 1 ist aber der von meinem Hausnetzt

ich hänge mal meinen code mit dran , da steht jetzt eventuell noch Zeug mit drin was Du nicht benötigst . Deklaration teil meiner globalen Variablen ,usw

ich benutze ein Sensor Netz für mehrere Sensoren IP 192.168.4.xx die sind mittels UDP mit dem ESP AP IP192.168.4.1 verbunden. Der hat einen Webserver zur Anzeige von Messwerten der Sensoren und für Schaltfunktionen und ist über das normales Hausnetzt über die Fritzbox unter IP 192.168.178.43 erreichbr.

#include "FS.h"
#include <ESP8266WiFi.h>
#include <WiFiClient.h>
#include <ESP8266WebServer.h>
#include <WiFiUdp.h>

// STA Hausnetzt
const char* ssid = "yyyyy";
const char* password = "xxxx";

// AP Wlan Netz Sensor
const char *localssid = "ESP-Sensor";

ESP8266WebServer server(80);  // Server Instanz


unsigned int localPort = 4211;  // local port to listen on
unsigned int slavePort = 4210;


WiFiUDP Udp;                  // UDP Instanz

void setup() {
  // put your setup code here, to run once:


  Serial.begin(115200);
  SPIFFS.begin();
  FSopen();

  WiFi.mode(WIFI_AP_STA);
  WiFi.printDiag(Serial);
  WiFi.begin(ssid, password);
  Serial.println("");

  // Soft API setzen für Sensonetz
  Serial.print(WiFi.softAP(localssid, password, 1 , 0 , 8) ? "AP Ready" : "AP Failed");
 
  Serial.print("\nSensonetz Access Point IP Adresse ");
  Serial.println(WiFi.softAPIP());


  // Wait for connection
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
  Serial.println("");
  Serial.print("Connected to ");
  Serial.println(ssid);
  Serial.print("IP address: ");
  Serial.println(WiFi.localIP());


  server.on("/", handleMenue);         // Webseite bearbeiten

Ich denke mal das liegt daran das du erst zum Router verbindest und dort keinen Channel angibst. Wenn ich zu meiner Unitymedia Horizon Box verbinde muss ich ein Channel angeben. Zuerst erstelle ich einen SoftAP ohne channel zuweisung und danach connecte ich mit channel zum. Dadurch geht der SoftAP wahrscheinlich kaputt. Aber selbst das wiedereröffnen bringt nichts. Ich steuer das ganze nämlich über ne Website vom SoftAP wo man dann die Einstellung für das verbinden vom Router machen kann. Jemand da ne Idee wie man das machen kann?

Wenn Du keinen Channel angibst, wird der Defaultwert 0 benutzt. Es gibt also den Zustand "kein Channel" überhaupt nicht.

Gruß Tommy

Ja das weiß ich. Aber ich meine ohne einen anzugeben. Hat da niemand ne Lösung wie ich das machen kann das beides läuft?

Hast Du es mal mit der Reihenfolge von Rentner probiert?
Mit der Forderung "ohne Channel" verrennst Du Dich wohl in die falsche Richtung.

Gruß Tommy

Das war keine Forderung. Ich meinte nur das ich es so meine. Ja habe ich probiert leider kein erfolg der SoftAP öffnet sich nicht. Mit der Reihenfolge kann ich aber leider nichts anfangen es muss erst der SoftAP offen sein.

Hallo
Wenn du zu deinem Router verbindest kannst du doch keinen Kanal angeben , den gibt der Router doch vor. DHC
Beim AP gebe ich dann einen Kanal an muss aber nicht Standard Voreinstellung ist 1

Wenn mein Router nicht auf 1 steht müsste ich dann bei AP den gleichen Kanal eingeben .

Ich mache auch erst den AP auf und verbinde anschließend mit dem Heimnetz

Heinz

Dass Problem ist das ich ja erst den AP aufmache. Nur dort kann ich ja den Kanal für den AP eingeben. Und wenn ich erst danach mit dem Routerverbinde kann ich vorher ja noch garnicht wissen welchen Kanal der Router hat.

EDIT:

Habe es nun hinbekommen. Alles funktioniert mit dem Befehl wifi_set_channel(channelID);

Hier eine kurze Reihenfolge die für mich funktioniert:

  1. Wifi Modus auf wifi_ap_sta einstellen.
  2. SoftAP eröffnen (ohne Channel angabe, also Standart Channel wird genutzt!)
  3. Nun WiFi.disconnect(); ausführen.
  4. WiFi Netwerke nun nach gewünschten Router durchsuchen mit WiFi.scanNetworksAsync
  5. Beim finden des Routers wifi_set_channel benutzen um den Channel des Routers auf den SoftAP zu übernehmen.
  6. WiFi.begin(ssid, password); benutzen um zum Router zu connecten nach gefundenem Router Channel.
  7. Bingo es geht!