Kommunikation per WLAN zwischen 2x ESP32 oder 8266, Hilfe zu Konzept und Ansatz

Hallo zusammen, ein Bekannter fragte mich die Tage ob ich Ihm was helfen könnte.

Leider bin ich mit den Themen.... WEB, URL, GET,PUT, DHCP, Telnet etc. sehr schwach auf der Brust. Deswegen suche ich bischen Hilfestellung:

Also ,um was geht es.....: 2x ESP 32 oder ESP8266 sollen über WLAN mitteinander kommunizieren. Vorrangig einseitig vom Client zum Server.

Es soll so sein, dass 1) ein ESP als Accespoint , arbeitet und ein WLAN Netz erzeugt. 2) ein zweiter ESP sich beim "stromeinschalten" am ersten ESP als Client per SSID und PW anmeldet und eine IP zugewiesen bekommt.Dannach sol der 2) zweite ESP eine "Mitteilung" an den ersten ESP senden in Form einer einfachen Zahl "1". Der erste ESP ( Accespoint) soll dann einfach um den Wert 1 in einer Variablen hochzählen ..... ..... in einfachen Worten...... es läuft ein "wie auch immer" auszuführender Server der immer wenn ein Gerät ( in dem Fall der 2 te. ESP) eingeschaltet wird eine Zahl 1 gesendet bekommt und um eins hochzählt. Ein "Power On" Zähler oder Counter über WLAN von einem Client an einen Server. Der Accespoint braucht auch keine WEBseite erzeugen, da die Zahl auf einem Display angezeigt, wenn das na klar auch noch gehen würde wäre ideal. So und nun zu der Frage.... ich kenne mich mit den Themen WEB, URL, GET,PUT, DHCP, Telnet, http:// etc. so gut wie gar nicht aus. Ist ein Webserver oder DHCP Server als Accespoint der richtige Ansatz und wenn ja, wie "sende" ich vom Client den ich wie betreiben muss an der Server. Und wie bekomme ich die gesendete Zahl in eine Variable zum weiterbearbeiten auf dem Server ESP Die Hardware ist einfach, aber welche Art Server ich nehmen muss , dass weis ich nicht... WEBserver DHCP Server etc... ? Einen Web Server oder Client einrichten ist auch kein Problem, aber wie die Kommunikation machen. Und ist ein Webserver das richtige ? Ich würde mich freuen wenn Ihr mir euere Ideen und Ansätze schreiben würdet. Meistens braucht man nur die richtigen Stichworte und dann findet man sich zurecht, aber in dem Gebiet finde ich keinen richtigen Ansatz..... Viele Grüsse

rainerkol: Ich würde mich freuen wenn Ihr mir euere Ideen und Ansätze schreiben würdet.

Selbst probiert habe ich es nicht, aber für ein anderes Thema bin ich mal auf diese Seite gestoßen: ESP-NOW Two-Way Communication Between ESP32 Boards

Könnte das passen?

Das liest sich sehr gut.....! Danke ! Jetzt komt noch ein "Aber" , was ich nicht beschrieben habe, um es einfacher zu halten. Es gibt auch die Option dass der 2 ESP ausgetauscht werden kann durch einen PC auf dem ein Windows läuft und über den dann eine "Message" im Autostart die "1" absenden soll. So ähnlich wie es über Telnet , http oder diese Get und Put "Sachen" gemacht werden kann, glaube ich. Dein Link ist super , aber das bekomme ich dann , zumindest glaube ich, nicht auf die PC Variante portiert. Trotzdem, feine Sache mit den Infos zum Link, das werde ich in mein Sammelsurium aufnehmen!

TO: Ich will erst ein wenig Ordnung in deine Begriffe bringen.

Imho hättest du die Möglichkeit

UDP TCP HTTP ESP-NOW

Ich hab hier einen 7 teiligen "Kurs", da gehts um die HTTP-Übertragung von Daten von einem ESP zum anderen.

https://werner.rothschopf.net/201809_arduino_esp8266_server_client_0.htm

Einige werden sagen HTTP, ist nicht notwendig. Ich bin der Meinung, dass dir HTTP die Möglichkeit bietet erst jeden einzelnen Sketch in sich zu testen, und am Ende kannst du die zwei Stellen zusammenrufen lassen. Die HTTP Seite am Server ist dann nur das Goodie. Klar kannst du dann noch ein Display anschließen.

Die Erweiterung einen Server auf Access Point umzustellen ist nur eine kleine Änderung. Das würde ich erst dann machen, wenn alles funktioniert.

Anschauen würde ich mir das an deiner Stelle trotzdem mal - weil es ein funktionierendes Beispiel ist.

Hallo noiasca, ... das ist wirklich eine super Seite die du ge´linkt hast. .... das werde ich auf jeden Fall probieren und berichten.

Vielen lieben Dank !

Ps: was bedeutet "Imho"?

rainerkol: Ps: was bedeutet "Imho"?

in my humble opinion - meiner bescheidenen Meinung nach

Noch ein ungetesteter Fund: Accesspoint - Station Communication Between Two ESP8266 MCUs

Nicht so ganz zu Deiner Fragestellung passend sind die Seiten von Fips, mit meiner Anleitung: Einführung zu fipsok.de. Da gibt es auch einen Tab für den Access Point.

Hallo noiasca,

jetzt habe ich sehr viel gelesen und nachgegoogelt was in dem Link von dir zu
Werner Rothschopf´s Anleitung zu tun ist.

Der Herr Rothschopf hat sich sehr viel Mühe gemacht um alles zu beschreiben und sicher viel
Begeisterung und Zeit reingesteckt um alles bis ins Detail zu beschreiben.
Unbekannterweise sei ihm hier gedankt ! Solche Leute braucht das Netz!
Aber offen und ehrlich, noch habe ich einiges an Verständnissproblemen.
Es ist aber sehr viel Neuland für mich und vieles war ich jetzt am nachgoogeln.
Mir gefällt sein Konzept und ich möchte es gerne verstehen lernen.
Ich lese viel und google viel, versuche es nachzuvollziehen, aber meistens hilft dann ein praktisches Beispiel
um die Gedankenblokaden aufzulösen und Verständniss und Nachvollziehbarkeit aufzubauen.
Das war jetzt aber geschwollen ausgedrückt…
So , wo habe ich nun die Probleme.
Ich weis nicht wie ich sein praktisches Beispiel nutzen kann !!! :sob:
Es gibt im Link 3 Dowloads ???

  • client.ino
  • esp8266_server_client_ino
  • server,ino.
    Ich gehe davon aus das der “esp8266_server_client_ino” der genannte Sketch ist, welcher alles zusammenfasst.
    In diesem Sketch finde ich Inhalte die in den beiden anderen Inos enthalten sind.
    Der “esp8266_server_client_ino” macht es möglich über OTA die Inos zu übertragen, ok.
    Aber warum ist das im Dauerloop ?
    Alles was in der Anleitung beschreiben ist, ist irgendwie auf 3 Sketchtes verteilt.
    Ich hätte jetzt einen Sketch erwartet…
    Es steht so schön:
    “Es gibt EIN Programm man muss lediglich die zwei verschiedenen Boards konfigurieren sowie beim Upload aupassen welches Board gerade kompiliert werden soll”
    Ich verstehe die Zusammenhänge der 3 Sketches nicht…
    Im esp8266_server_client.ino wird auf die
    void sendPost() & void handleOtherPage() verwiesen, die sind aber in einem anderem Ino. und nicht im esp8266_server_client.ino…
    Das verwirrt mich…
    Ich kann doch nur ein ino. auf den ESP laden und muss dies auch sicherlich nur einmal machen.
    ???
    So viel Mühe in der Beschreibung und nun scheitert es am praktischen Beispiel.
    :slightly_frowning_face:

Warum sind so viele Leerzeilen in deinen Beiträgen ? Die machen das Lesen der Beiträge nicht gerade einfacher.

Lösche die unnötigen Lerzeilen bitte raus. Das kannst du auch noch nachräglich machen.

....ich dachte & finde es übersichtlicher, kann aber gerne künftig so machen ....so, zufrieden :) .... jetzt zurück zum Kernproblem.

eins voraus, noiasca = Werner. Ich bin der Schreiber dieser Seiten.

So nun zum Download.

Im Zip sind 3 Dateien und dennoch ist es EIN Sketch.

Du entpackst das Zip in ein Verzeichnis esp8266_server_client Du öffnest nun in der Arduino IDE die Datei esp8266_server_client.ino Die IDE wird diese INO sowie die anderen beiden Dateien in tabs darstellen. In der INO ist das setup() und die loop() im Tab Client sind die Teile die zum Versenden notwendig sind im Tab Server sind die Teile die zum Empfangen notwendig sind.

So wie es ist - drückst du mal kompilieren. Der runtergeladene Sketch (mit allen 3 Tabs) muss wie er ist fehlerfrei kompilieren

Nun setzt du in Zeile 59/60 deine SSID und Passwort

Du öffnest den Seriellen Monitor Nun kompilierst du noch mal (weil SSID und Passwort geändert wurde) Und das ladest du nun auf deinen ESP hoch.

Du achtest nun nach dem Starten des ESP ob sich der ESP mit deinem LAN verbinden kann und welche IP Adresse du am seriellen Monitor erhältst. Diese IP-Adresse gibst du nun im Browser ein. Im Browser musst du nun eine HTTP Seite sehen.

Wenn das geklappt hat, gibst du bescheid oder du beschreibst genau, in welchem Schritt du nicht vorankommst.

Nach deiner Bestätigung können wir uns die nächsten Schritte ansehen.

Hallo Werner, vielen lieben Dank für deine Informationen. Siehst du , das meinte ich mit Gedankenblockade. Ich war so mit dem Thema vertieft und am verstehen der Zusammenhänge, dass ich die Sketches nur geöffnet hatte und Schritt für Schritt nachgoggelte, mir Notizen machte......

Ich hatte ja alle 3 einzeln geöffnet, habe aber nicht gesehen, das im Hauptsketch oben 3 Tabs aufgehen. Ich hatte nicht mal probiert zum kompilieren, weil ich so vertieft in Dein Thema war und es ja verstehen wollte. Mann oh mann , so einfach, jetzt ist es Sonnenklar.Dass man in der IDE mit Tabs arbeiten kann , ist mir auch neu. So nun habe ich einiges dazugelernt und wieder zeigt sich, das man aus Unsicherheit in einem Thema leicht Dinge übersieht. Ich hätte einfach mal probieren sollen, wie sonst auch.

Kompilieren hat geklappt, morgen baue ich es auf und werde DIr berichten.

[u]Werner , dickes Lob für Deine Webseite und Hilfe ![/u]

...so nun noch eine Info für alle die es auch nicht kennen. TABS in der IDE... oben rechts der kleine Pfeil. Das ist eine feine Sache...

...um meinen weiteren Fehler zu dokumetieren: Ich hatte das Zip nichtmal entpackt und direkt aus dem ungepackten Zip die Sketches einzeln geöffnet und losgelegt. Wenn man das tut gehen nämlich gar keine Tabs auf. Auch nicht mit dem esp8266_server_client.ino Ich habe gesehen, wenn es entpackt ist, ist es egal welches .ino mann öffnet. bei allen 3 erscheinen die Tabs. Unzipped nicht. ...also echt....sagt einfach nichts dazu :confused:

Werner, da ich jetzt seit heute morgen an dem Thema bin, du dir so Mühe mit der Hompage und heute mit mir gemacht hast, hab ich es doch noch schnell probiert um Dir Feedback zu geben.

Es hat einwandfrei geklappt..Ich habe 2 Seiten auf, eine "grüne" und eine "blaue". Alles , wie auf der Homepage von dir beschreiben ist nun nachvollziehbar. einiges verstehe ich zwar noch nicht aus dem Thema selber, aber jetzt kann ich loslegen zum verstehen.

Du hast da echt viel Liebe ins Detail gesetzt, so Kleinigkeiten wie die Farben in den 2 Seiten wo dann stimming zur Beschreibung sind, die Descriptions auf den 2 Seiten, etc. Einfach Top.

So, nun ist gut für heute und morgen, werde ich ausgibig testen und wenn ich darf ggf. noch ein paar Fragen stellen.

ja ich wollte nachvollziehbar machen was ein Client ist und was ein Server, schön wenn man das nun erkennt.

Jetzt kannst dir ja mal Gedanken welche Daten dein Client an den Server senden soll. PowerCylces. Wenn ich dich richtig verstanden habe, dann wäre das ein Zähler den du z.B. in der EEPROM Emulation speicherst (z.B. uint32_t startupCounter)

Also im setup() mit EEPROM.get aus der EEPROM emulation auslesen, um 1 erhöhen und dann mit EEPROM.put zurückschreiben (für den nächsten Start).

dann würde sich im Tab Client eine neue Funktion "sendStartup()" anbieten und du überträgst diesen Wert.

am Ende vom setup(), kannst du dann deine Funktion sendStartup() aufrufen.

vice versa, brauchst du im Server natürlich auch etwas, dass diesen Wert "empfängt". Das geht aber relativ einfach, da würde ich nur im void handleData() eben die neue Variable empfangbar machen. Drann denken, dass du dafür auch eine Variable uint32_t remoteStartupCounter brauchen wirst.

vieleicht willst du dann in der Seite handlePageR() auch diese neue Variable anzeigen...

usw. Ok ich glaube du kommst dann schrittweise in das Verfahren rein.

Mit den Tabs hast du ja nun eine halbwegs saubere Trennung zwischen was macht der Client ... was macht der Server.

Und weil ich es gerade sehe, wenn du den client weiterhin auch regelmäßige Daten schicken lässt, dann kannst du am Server sogar darstellen, ob der Client immer noch aktiv ist. Wenn

(millis() / 1000) - remoteLastMessage

120 Sekunden wird, hat der Server 4 mal keine Daten erhalten, du könntest dann davon ausgehen, dass der Client abgeschaltet wurde (oder zumindest offline ist)

...es klappt doch noch nicht so ganz. :( ... die einzelene Kommunikation per Browser zu den jeweiligen 2 Webservern ist ok. ... ich kann per Broswer IP auf den jeweiligen Webservern IP für sich die blaue LED per Output 1schalten ... die Datenübertragung zwischen den 2 ESP klappt aber irgendwie noch nicht.

Also wieder einen Gang zurück, bevor wir an die Feinheiten meiner Anwendung gehen. Ich detailiere morgen, was nicht geht oder ich denke das nicht geht.

du musst für den Webclient die IP-Adresse des Servers eintragen...

hast du diese Zeilen auf deine IP Adressen angepasst (vice versa!)?

const char* sendHttpTo = "http://172.18.67.109/d.php";

diese IP Adressen geben an, wohin der Client sendet. Das muss natürlich für dein Netz passen. Viele Private nehmen da eher etwas mit 192.168....

Zuerst nicht, dann nachgelesen und auf meine IP Adressen geändert. Ja, das habe ich jetzt gemacht.

wenn die IP Adressen stimmen (was ich nicht sehe) dann müsste der Client beim Sendeversuch einen Fehler rausschreiben (zumindest kein HTTP = 200)

also zeig mal - deinen Sketch Zeile 39 - 53 - Serial Ausgabe vom Server Start (damit ich dessen IP sehe) - Serial Ausgabe vom Client Start inkl einer Sendung (damit ich dessen IP sehe und was der Funktion sendPost macht)

bitte in code tags und genau drüber schreiben, was was ist.

Hallo, also ich habe beide Fenster (Webserver) auf. in meinem WLN 192.168.2.1 einmal als 192.168.2.12(grün) einmal als 192.168.2.13 (blau)

Wenn ich im WEBbBrowesr beim 109er den Output 2 drücke geht die LED am 109er an/aus. Wenn ich im WEBbBrowesr beim 103er den Output 2 drücke geht die LED am 103er an/aus.

Der 109er soll alle 30 sec an den 103 senden..... Das kann ich nicht sehen, oder weis nicht wo.

In den Webbrowersn gibt es den Tab Remote MOdule. Hier stehet bei beiden der WERT (value) 0, müsste hier nicht in einem wenigsten die gesendeten variablen dastehen? Im blauen, wenn der alle 30 sekunden die Werte empfängt?

#define VERSION "8.3.1"                                    // the version of this sketch
                                                           
#define USE_BOARD 103                                      // the actual board to compile

/* *******************************************************************
         the board settings / die Einstellungen der verschiedenen Boards
 ********************************************************************/

#if USE_BOARD == 103                                       // example board
#define TXT_BOARDID "103"                                  // an ID for the board
#define TXT_BOARDNAME "ESP8266 Server Client"              // the name of the board
#define CSS_MAINCOLOR "blue"                               // don't get confused by the different webservers and use different colors
const uint16_t clientIntervall = 0;                        // intervall to send data to a server in seconds. Set to 0 if you don't want to send data
const char* sendHttpTo = "http://192.168.1.13/d.php";     // the module will send information to that server/resource. Use an URI or a IP Adress
#endif

#if USE_BOARD == 109                                       // example Board
#define TXT_BOARDID "109"                                  // an ID for the board
#define TXT_BOARDNAME "ESP8266 Server Client"              // the name of the board 
#define CSS_MAINCOLOR "green"                              // don't get confused by the different webservers and use different colors
const uint16_t clientIntervall = 30;                       // intervall to send data to a server in seconds. Set to 30 if you want to send data each 30 seconds
const char* sendHttpTo = "http://192.168.1.12/d.php";     // the module will send information to that server. Use an URI or a IP Adress
#endif