Forum: Mikrocontroller und Digitale Elektronik ESP32 als WLAN-Client und HTTP-Server? (ArduinoIDE)


von Zonk (Gast)


Lesenswert?

Hi,

Beispielsketches, die demonstrieren, wie sich ein ESP32 mit einem 
WLAN-Netzwerk verbindet und dann als HTTP-Client auf irgend eine Seite 
im Internet zugreift, gibt es ja zuhauf. Allerdings würde ich gerne was 
anderes erreichen:

- mein ESP32 verbindet sich als WLAN-Client mit meinem Handy, welches im 
Tethering-Modus selber als WLAN-AP läuft

- der ESP32 teilt dem Handy seine statische IP mit (z.B. 192.168.1.1)

- wenn ich jetzt von dem Handy per Webbrowser auf diese IP zugreife, 
bekomme ich eine Seite angezeigt, die vom ESP32 ausgeliefert wird

Meine Fragen:

- ginge das so überhaupt?

- wenn ja - wie? Kennt jemand ein passenden Beispielsketch?

Danke!

von Jens M. (schuchkleisser)


Lesenswert?

Natürlich kann ein WLAN-Client einen http-Server haben, aber der Client 
bekommt höchstens eine IP vom Server/AP, nicht "er teilt sie mit", das 
gibt's nur bei den captures am AP, z.B. für den Gastzugang, ESPs nutzen 
das auch für den Webmanager.
Ob dein Handy als AP dem dort laufenden Browser erlaubt, auf die Clients 
zuzugreifen, weiß ich nicht. Könnte mir vorstellen von nicht, aber 
möglich wärs, damit man verbundene Geräte ohne UI konfigurieren kann. 
Versuch macht kluch.

Aber mal im Ernst: wozu diese "andersrumme" Konfiguration?
Normal ist der ESP ein AP und liefert eine Seite aus.
Warum das Handy als AP und dann doch auf den den Client zugreifen?

von Zonk (Gast)


Lesenswert?

Jens M. schrieb:
> Aber mal im Ernst: wozu diese "andersrumme" Konfiguration?
> Normal ist der ESP ein AP und liefert eine Seite aus.
> Warum das Handy als AP und dann doch auf den den Client zugreifen

Als Feature: in der gewünschten Umgebung läuft dieses eine Handy als AP 
und stellt allen anderen Handys Internet zur Verfügung.

Würde der ESP32 auch als AP laufen, hätte man nur Zugriff auf den ESP32, 
aber kein Internet mehr. Also würde dieses eine Handy in dem Moment 
allen anderen das Internet wegnehmen bzw. der Nutzer eines anderen 
Handys müsste immer zwischen den beiden AP's hin und her schalten.

Klinkt der ESP32 sich hingegen als Client ein, hätte zumindest dieses 
eine Handy bequem Zugriff auf Internet und ESP32 - ohne ständig das 
WLAN-Netz wechseln zu müssen

von Jens M. (schuchkleisser)


Lesenswert?

Der ESP ist ein Client wie jeder andere auch, also kann jeder auch drauf 
zugreifen, nicht nur das eine Gerät mit dem AP.
Alles nur eine Frage der richtigen IP-Adresse...
Wie man die rausbekommt, ist dann auch eher dem AP-Handy zuzuschreiben. 
Kann man da sehen, welcher Client welche via DHCP bekommen hat?

Aber sonst macht das natürlich Sinn.

von Andre (Gast)


Lesenswert?

Zonk schrieb:
> der ESP32 teilt dem Handy seine statische IP mit (z.B. 192.168.1.1)

Das geht so nicht. Wenn das Handy einen AP startet, verteilt es die IP 
Adressen per DHCP. Danach muss sich der ESP richten ansonsten gibt es 
keine Verbindung.
Ob man da eine etwas komfortablere Namensauflösung mit DNS basteln kann 
weiß ich nicht, wäre einen Versuch wert.

von Marc V. (Firma: Vescomp) (logarithmus)


Lesenswert?

Zonk schrieb:
> - ginge das so überhaupt?

Es geht.
1
 // *********   TENDA ROUTER    ************
2
 const char* ssid = "*******";                // Router WI-FI name
3
 const char* password = "********";           // Router password
4
 IPAddress gateway(192,168,0,1);              // Router IP adress (TENDA)
5
6
// ****** Gewünschte IP-adresse für ESP32  ***********
7
 IPAddress ip(192,168,1,6);                   // Falls man diese IP adresse für ESP festlegen möchte...
8
 int ServerPort = 787;                        // Dann geht dieser Port mit der Adresse (Forwarding)
9
 IPAddress subnet(255,255,255,0);
10
11
 ESP8266WebServer server(ServerPort);
12
 WiFiClient client;

 Vorher muss man sich natürlich bei Router als admin einloggen und Port
 forwarding machen.

 Später im Programm:
1
  WiFi.begin(ssid, password);
2
  WiFi.config(ip, gateway, subnet);

von Zonk (Gast)


Lesenswert?

Marc V. schrieb:
> Vorher muss man sich natürlich bei Router als admin einloggen und Port
>  forwarding machen.

Es ist eben kein Router im Spiel, sondern ein Smartphone, welches als 
WLAN-AP arbeitet (Tethering-Modus).

Die IDee ist eben, dass dich der ESP32 als WLAN-Client mit diesem 
Smarthpone verbindet. Wenn der Benutzer jetzt eine Internetadresse 
eingibt, erreicht er diese. Gibt er die 192.168.1.1 ein, erreicht er den 
Weserver auf dem ESP32 - ganz ohne zwischen verschiedenen WLAN-APs 
umschalten zu müssen.

Und ich wüsste jetzt nicht, dass man unter einem nicht-gerooteten 
Android irgendwo ein Portforwarding einstellen könnte...

von Jens M. (schuchkleisser)


Lesenswert?

Port Forwarding würde auch nur erreichen, das man den ESP von der 
Mobilfunkseite her erreichen kann, ich denke das ist unerwünscht.
Wird auch vermutlich nicht funktionieren, da die meisten MobFu-Anbieter 
den User hinter einen Router setzen, der NAT macht. Da kommt man von 
außen eh nicht rein...

Ob andere Clients im WLAN den ESP erreichen können, ist eher der "Client 
Isolation" geschuldet, aber zumindest das AP-Handy sollte draufkommen.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.