Forum: Mikrocontroller und Digitale Elektronik Mesh mit ESP8266 und Laptop


von Kurt (Gast)


Lesenswert?

Moin

Ein Meshnetzwerk mit den ESP's ist ja dank dem Beispiel "Hello Mesh" 
recht einfach.
Aber wie schaffe ich es einen Laptop (oder Handy) mit in diese 
Kommunikation einzubinden?

Es sind auch nicht viele Daten die ausgetauscht werden sollen:
Die ESP's senden alle x Minuten einen gemessenen Wert in das Mesh,
der Laptop liest diese aus (am liebsten mit PHP) und sendet einen Wert 
an den jeweiligen ESP zurück.

Hat damit jemand Erfahrung?

Gruß

von Stefan F. (Gast)


Lesenswert?

Schau Dir den Quelltext an und verstehe ihn.

Soweit ich das sehe, warten alle Nodes darauf, dass sich jemand mit 
ihnen verbindet. Dann senden sie die hardcodierte Hello-World Nachricht 
an alle erreichbaren anderen Nodes.

Die Nachricht erreicht aber nur diese Nodes. Nodes die weiter weg sind 
und indirekt mit verbunden sind, empfangen die Nachricht nicht. Aber 
alle Nodes, die irgend etwas empfangen haben, senden wiederum die in 
ihnen hardcodierte Nachricht an alle anderen erreichbaren Nodes.

Danach blockiert der Node für eine Sekunde und ignoriert alles, was um 
ihn herum passiert.

Eine Node ist ein Access Point mit beliebiger SSID und ein TCP Listener 
auf IP Adresse 192.168.4.1 Port 4011.

Ich denke, das geht am Sinn des vermaschten Netzes vorbei.

Zum Einen kannst du damit nicht frei bestimmbare Nachrichten durch das 
ganze Netz schicken und zum Anderen sehe ich dort keinen sinnvoll 
funktionierenden Mechanismus, der endlose Wiederholungen verhindert. Bei 
größen Netzen wird das auffallen, oder auch bei kleinen Netzen wenn du 
die Blockierzeit verringerst.

Auffallen wird der Konzeptfehler, wenn du mal einen anderen Text in das 
Netz sendest, der NICHT im Quelltext hardcodiert drin steht. Und mach 
mal das Netz so groß, dass sich nicht alle Nodes direkt erreichen, 
sondern ein oder zwei Ringe entstehen:
1
  +------------------------<-----------------------+
2
  |                                                |
3
  A----->B----->C------>D----->E----->F----->G-----+
4
  |                     ^
5
  |                     |
6
  +----->H--------------+

Dann bricht das totale Chaos aus, darauf wette ich.

Damit dein PC Teil dieses Netzes wird, muss er ebenfalls selbst ein 
Access Point sein oder mit einem Access Point verbunden sein und die IP 
Adresse 192.168.4.1 haben. Und er muss einen TCP Listener auf Port 4011 
laufen haben - im einfachsten Fall das Programm Netcat (nc).

Dieses Beispielprogramm ist typischer Arduino Murks.

von Kurt (Gast)


Lesenswert?

Hallo Stefan

Danke für die ausführliche Antwort,
auch wenn es nicht das ist was ich erwartet hatte.

Zur Zeit ist das Mesh nur drei nides groß, später sollen es aber bis zu 
50 sein.

Kennst du eine andere Methode um mit Laptop und 50 ESPs zu 
kommunizieren?

Gruß

von Werner P. (Gast)


Lesenswert?

MQTT

von Stefan F. (Gast)


Lesenswert?

> Kennst du eine andere Methode um mit Laptop und 50 ESPs
> zu kommunizieren?

Zum Beispiel ein ganz normales WLAN mit einem AP.

Aber das wolltest du wohl nicht hören. Mal ein anderer Ansatz, der 
vielleicht besser zu deiner unbekannten Anwendung passt:

Schließe ein ESP Modul an den seriellen Port des PC an, dann kannst du 
von dort aus steuern, was das Ding auf der Funkschnittstelle machen 
soll. Eine entsprechende selbst geschriebene µC Software natürlich 
vorausgesetzt.

Was soll denn die Anwendung tun, welche Anforderung kannst du nennen?

von Kurt (Gast)


Lesenswert?

Werner P. schrieb:
> MQTT

Schaue ich mir mal an, kannte ich noch gar nicht.
Gibt es damit nicht die Probleme, die Stefan oben dem  Mesh 
zugeschrieben hat?

Stefan U. schrieb:
> Zum Beispiel ein ganz normales WLAN mit einem AP.

Dafür sind die Entfernungen zu groß. ;-)


Stefan U. schrieb:
> Schließe ein ESP Modul an den seriellen Port des PC an


Laptop -> USB -> Seriell -> ESP ist mir eigentlich etwas zu aufwändig,
dafür das der Laptop schon eine W-Lan Karte integriert hat.

Stefan U. schrieb:
> Was soll denn die Anwendung tun, welche Anforderung kannst du nennen?

Naja, wie oben schon beschrieben:
Es sollen 3 Nodes (NodeMCU), später bis zu 50 Stück,
alle 3 Minuten einen Temperaturwert senden
und daraufhin einen Stellgröße (int) empfangen.

Im "Mittelpunkt" steht ein Laptop, welcher die Temperaturen der 
einzelnen Nodes speichert, auswertet und daraufhin jedem Node seinen 
neuen Stellwert zuordnet.

Eigentlich ganz einfach.

von Stefan F. (Gast)


Lesenswert?

> und daraufhin einen Stellgröße (int) empfangen.

Also willst du nicht eine eine Hallo Nachricht durch das ganze Netz 
schicken, sondern gezielt von jeder Node zu PC senden und vom PC aus 
jeder Node einzeln eine gezielte Antwort senden.

Da kannst du diese HelloMesh Klasse völlig in die Tonne kloppen. Solange 
du mit TCP/IP arbeiten möchtest, solltest du auch dessen Routing 
Methoden einsetzen. Zum Beispiel durch Aufstellen von WLAN Repeatern, 
man muss das Rad ja nicht neu erfinden.

Jede Fritz Box (auch die billige für 50 Euro) kann das.

von Kurt (Gast)


Lesenswert?

Ja, das ist richtig.
Es muss nicht jede Node jede Information haben.
Die eigentliche Kommunikation soll nur zwischen dem Laptop und jeder 
einzelnen Node stattfinden.

Aber ne Fritzbox als Repeater ist doch genauso "von hinten durchs Knie 
ins Auge" wie der serielle Anschluss eines ESPs an den Laptop.

Es ist doch die gesamte Fläche mit WLAN abgedeckt, da brauch es doch 
nicht noch mehr Hardware...

Eins noch, die Aufstellung der ESPs wird des öfteren verändert,
sodass ich keine festen Routen hinterlegen kann.
Sorry, das hatte ich vergessen zu Beginn zu erwähnen.

von Stefan F. (Gast)


Lesenswert?

> Aber ne Fritzbox als Repeater ist doch genauso "von hinten durchs
> Knie ins Auge"

Nein, denn die Fritzbox nutzt die Mittel, die für WLAN vorgesehen sind. 
Und damit brauchst du auch nicht so üble Tricks anwenden, wie

- Laptop scannt periodisch nach allen AP und versucht, sich mit allen zu 
verbinden.
- Alle Nodes haben die selbe hardcodierte IP Adresse.
- Alle Nodes senden dumm an alle anderen, was Endlos-Schleifen 
provoziert.

Und denke an das Timing. Rate mal, wie lange wohl eine Kette von 50 
Nodes mit maximalem Abstand bräuchte, um die Nachricht von einem Ende 
bis zum anderen durch zu reichen, wenn damit jedesmal ein AP Scan und 
Verbindungsaufbau verbunden ist.

Kann gut sein, dass es sogar länger als eine Minte dauert.

Das Konzept ist so mies, dass du damit keine gute Bewertung bekommen 
wirst.

von Michael U. (amiga)


Lesenswert?

Hallo,

je nach Datenmenge und geforderten Antwortzeiten kann durchaus auch ein 
ESP den Repeater spielen, ist kleiner als eine Fritzbox. Problem ist die 
Anzahl Clientverbindungen, der ESP kann nur eine "zeitgleich" handeln.

Ein MQTT-Broker auf einem RasPi o.ä. als Verwaltung.
MQTT bietet eigentlich alles, was hier nötig wäre: Quittungsmöglichkeit, 
Keep-Alive und Handlingsmöglichkeit, wenn ein Client abhanden kommt 
("letzter Wille"), die Möglichkeit, nur aktuelle gesendete Daten zu 
bekommen oder beim Neu-/Wiederanmelden die letzte Meldung zu bekommen 
usw.

Wäre sicher ein interessantes Projekt und mit einigen NodeMCUs auch 
preiswert zu testen.

Sensor sendet Wert, notfalls mehrmals, bis er vom Broker die Quittung 
hat usw.
Die Frage ist jetzt, wie die Daten verarbeitet werden sollen.
Könnte der RasPi vermutlich übernehmen, Anbindungen für MQTT gibt es 
alle Möglichen.

Prinzipiell ist es ja nur ein MQTT-Client, der alle Nachrichten 
abboniert auswertet und den Stellwert verendet.
Kann man zum Test z.B. mit MQTTfx auf dem Notebook testen, beim Broker 
anmelden und schauen, was alles draußen passiert bzw. erstmal die Werte 
von Hand senden.

Man kann auch Mosquitto als Broker erstmal auf dem Notebook 
installieren, dann braucht man zum Test außer ein paar NodeMCU 
garnichts.

PS: es sollten sich nie 2 MQTT-Clients mit dem gleichen Namen beim 
Broker anmelden, es passieren dann durchaus seltsame Dinge...

Gruß aus Berlin
Michael

: Bearbeitet durch User
von Kurt (Gast)


Lesenswert?

Stefan U. schrieb:
> Kann gut sein, dass es sogar länger als eine Minte dauert.

Und wenn es drei Minuten Dauert, das ist OK.

Michael U. schrieb:
> Wäre sicher ein interessantes Projekt und mit einigen NodeMCUs auch
> preiswert zu testen.

Wenn ich MQTT richtig verstehe, muss dort (wie bei Router-Client) jeder 
ESP einen direkten Kontakt zum Laptop haben.

Um das zu umgehen, war die erste Idee ja das Mesh-Netzwerk

von Stefan F. (Gast)


Lesenswert?

Ganz ehrlich, ich halte nicht viel von dem Ansatz, alle AP's in der 
Umgebung zu suchen und dann zu kontaktieren. Nichts desto trotz kann es 
funktionieren.

Aber nicht mit diesem HelloMesh Projekt, schreibe Dir da besser eine 
eigene Logik die deine Anforderungen erfüllt:

- Messwerte (nicht hardcodierte Texte) zum PC hin senden
- Steuerwert vom PC empfangen
- Keine Endlosschleifen

von Michael U. (amiga)


Lesenswert?

Hallo,

Kurt schrieb:
> Wenn ich MQTT richtig verstehe, muss dort (wie bei Router-Client) jeder
> ESP einen direkten Kontakt zum Laptop haben.

das ist richtig. Deshalb ja meine (ungetestete) Idee, strategisch 
günstig ein paar NoceMCU als reine Repeater in der Gegend zu verteilen.

Bei Deinem zu erwartenden Datenaufkommen sollte das eigentlich gehen.

Gruß aus Berlin
Michael

von Hans M. (Gast)


Lesenswert?

Vergiss den Stromverbrauch nicht!
WLAN ist gut hunrig und dauert auch immer ne Weile, wenn die nachm 
schlafen
sich mit wem auch immer wieder verbinden sollen.
Sollen die alle auf Batterie laufen oder Akku oder Netzteil?
Um welche Entfernungen handelt es sich später?
Vllt ginge was mit BLE?

Hans

von Stefan F. (Gast)


Lesenswert?

Schlafen können die nodes bei diesem HelloMesh gar nicht. Sie müssen 
permanent empfangsbereit sein.

von Kurt (Gast)


Lesenswert?

Ja, sie werden über Akkus am Leben gehalten.
Eine Laufzeit von ein paar Tagen sollte reichen.
Aber es gibt ja noch einen Motor, der mit am Strom hängt.
Wie viel Strom der zieht, kann ich leider noch gar nicht sagen.

Aber schlafen können die Nodes doch in der Zeit wo nix passiert.

Möglicher Ablaufplan:

1.) Alle Nodes senden ihre beiden Messwerte zu dem Laptop
2.) Der Laptop sendet an jede Node einen passenden Stellwert
3.) Jeder Node bestätigt den neu erhaltenen Wert
4.) Der Laptop legt alle für 5 Minuten Schlafen.
6.) Die Nodes wachen auf, siehe 1.)

Wie die Nodes ihr Informationen an den Laptop senden
und wie die Antwort zurück kommt,ist hier natürlich nicht 
berücksichtigt!

von Michael U. (amiga)


Lesenswert?

Hallo,

Node wacht auf
Meldet sich beim nächstgelegenen AP an
*Meldet sich beim MQTT-Broker an.
Node schickt den Messwert
Node wartet auf den Stellwert
Node geht schlafen.

*Wenn während des Schalfens ein Stellwert geschickt wurde, bekommt die 
Node diesen sofort, wenn man das dem MQTT sagt.
Man kann sie also auch nach dem Schicken des Messwertes wieder schlafen 
legen und and z.b. 1min später wieder wecken.
Das hängt dann einfach von den nötigen Gegebenheiten ab.
Man kann auch alle 3min aufwachen, den "letzten" Stellwert abholen und 
den neuen Sensorwert schicken.
Kommt darauf an, ob man "sofort" reagieren muß oder ob das Spiel:
ich schicke einen Meßwert
ich bekommen 3min später den Stellwert (für den Messwert von vor 3min) 
und schicke parallel den aktullen Messwert.

Wenn man z.B. Keep-Alive beim Broker dann auf 4 Minuten und einen 
"letzten Willen" setzt, bekommt man diese Meldung nach 4 Minuten, wenn 
sich ein Node nicht pünklich gemeldet hat.

Gruß aus Berlin
Mcihael

von Kurt (Gast)


Lesenswert?

Für deinen Plan müssen aber wieder Repeater eingesetzt werden.
Und können die nicht auch noch zusätzlich Messwerte aufnehmen und 
Stellwerte umsetzten?

von Michael U. (amiga)


Lesenswert?

Hallo,

der ESP kann AP und Station gleichzeitig sein, damit für diesen Zweck 
praktisch Repaeter spielen, da auch noch ein MQTT-Client darauf laufen 
zu lassen wäre kein Problem.

Vielleicht präpariere ich mir hier mal einen ESP als "AP" genau für 
diesen Zweck und schaue mal. Ich kann den ja erstmal einfach 
"transparent" zwischen einen meiner MQTT-Clients hängen und über die 
Entscheidungslogik nachdenken, ob und wann der sich mit meinem AP oder 
dem ESP-"AP" verbindet. Sind dann ja erstmal hier beide in Reichweits.

Noch sagt mir mein Gefühl, daß es gehen könnte, das kann sich nach 
wenigen Stunden auch ins Gegenteil verkehren.
Sowas probiere ich mit der Anfangsidee meist erstmal aus...

Mein Testwebserver macht im Moment erstmal alles, was er soll: fallback 
in eine 2. WLAN, wenn das erste nicht ereichbar ist (theoretisch auch 
mehrere, ist eine Zeitfrage, da ich im Momet für jeden 
Verbindungsversuch 10s timeout habe, dann fallback in den AP-Mode.
File-Upload/Download geht, editieren der config-Datei geht.
Muß noch ein Neustart-Button in die config-Seite und im AP-Mode noch 
eine Zeitsteuerung, die alle xx Minuten versucht, ob eins der WLANs 
wieder ereichbar ist und wenn ja, dann wieder AP aus.

Das amcht aber jetzt keine Mühe mehr, da kann ich auch mal mit seinem 
Problem rumspielen.

Gruß aus Berlin
Michael

von Kurt (Gast)


Lesenswert?

Michael U. schrieb:
> der ESP kann AP und Station gleichzeitig sein, damit für diesen Zweck
> praktisch Repaeter spielen, da auch noch ein MQTT-Client darauf laufen
> zu lassen wäre kein Problem.

Dann kann der ESP doch auch noch alle 5 Minuten zwei Temperaturen 
auslesen und kurz darauf einen Motor laufen lassen :-)

Michael U. schrieb:
> Noch sagt mir mein Gefühl, daß es gehen könnte,

Vertraue deinem Gefühl!
Ich habe leider erst drei ESPs hier rumliegen.
Eigentlich dachte ich, dass ich damit eine Netzwerk aufbaue,
welches auch mit mehr Teilnehmern funktioniert.
Jetzt bin ich da etwas unsicher geworden.

Gruß nach Berlin & Danke für die Unterstützung!

von Kurt (Gast)


Lesenswert?

Nochmal ein paar Gedanken zum Datenaustausch:

Alle Daten werden über Laufzettel aka Arrays übertragen.
Das Array hat für jede Node eine Zeile und eine Kopfzeile für die 
Konfiguration (Nummer des Arrays).

Wenn der erste Node aufwacht misst er die Temperaturen
und speichert seine ID und die Messwerte auf dem Laufzettel
und schickt diesen in Netzwerk.

Empfängt ein Node den Laufzettel, fügt er seine Daten hinzu.

Auch der Server empfängt, je nach Position, mehr oder weniger unfertige 
Laufzettel,
aber irgendwann den Kompletten.

Jetzt kann er aus den Temperaturen neue Stellwerte berechnen und schickt 
diese, auf einem Laufzettel, in das Netzwerk.
Wenn ein Node den Laufzettel empfängt und seinen Stellwert ändert, 
schreibt er dies auf den Laufzettel.
Wenn ein Node einen vollständig unterschriebenen Laufzettel bekommt,
legt er sich für 5 Minuten schlafen.

Gruß und gut nacht

von Kurt (Gast)


Lesenswert?

Moin

Gibt es hier jemand der zufällig eine zweistellige Anzahl von ESp 
Modulen rumliegen hat?
Selbst wenn ich heute bestelle, dauert es bin Mitte Juni, bis ich welche 
habe...

von Michael U. (amiga)


Lesenswert?

Hallo,

kannst ja mal schauen, ob im EU-Warehouse von BangGood was rumliegt:
http://eu.banggood.com/

Preise muß Du selber vergleichen, ist etwas teuerer. Versand knapp 1 
Euro, Lieferzeit bisher bei mir bisher immer 1 Woche.

Die komplette Seite findest Du unter http://www.banggood.com/

PS: Preise werden mehr nach Lust und Laune in Euro, Dollar, Kronen, 
Lire, Pfund angezeigt, muß man dann jedesmal wieder umstellen...

Gruß aus Berlin
Micjaeö

von Kurt (Gast)


Lesenswert?

Michael U. schrieb:
> kannst ja mal schauen, ob im EU-Warehouse von BangGood was rumliegt:

 This warehouse can not ship to your location.

von Michael U. (amiga)


Lesenswert?

Hallo,

das ist eines der Geheimnisse von BangGood, vermutlich nicht genug 
NodeMCU am Lager.
ESp8266-12E kann man kaufen.
Hatte ich mit Lochrasterplatinen schonmal, ich konnte nur eine Sorte 
bestellen, warum auch immer...

Aus US kann man NodeMCU offenbar bestellen, 7-10 Tage Lieferzeit, keine 
eigene Erfahrung. Ich nutze da nur das EU-Warehouse, keine Lust, über 
Zollfreigrenzen nachzudenken.

Gruß aus Berlin
Michael

von J. W. (skorpi08)


Lesenswert?

Und hier irgendwelche Neuigkeiten?
Ich versuche ähnliches aufzubauen.

von besucher47 (Gast)


Lesenswert?

bei echtem mesh netzwerk müssten alle ESP gleichzeitig AP und Station 
sein
also 50 AP
batteriebetrieben müssten die dann auch noch zur gleichen zeit ON sein..

kann mir nicht vorsteleln dass das mit "normalem Wlan" sinnvoll 
funktioniert..

eher wird man zwischendurch ein paar repeater hinstellen..

von Kurt (Gast)


Lesenswert?

Man könnte ja auch tatsächlich zwei ESP pro Schaltung verbauen und diese 
per UART kommunizieren lassen.

Zieht dann aber schnell die Akkus leer.

von J. W. (skorpi08)


Lesenswert?

Wofür willst du es denn verwenden, wenns kein Geheimniss ist?

von Kolja L. (kolja82)


Lesenswert?

Es gibt Neuigkeiten von der Front:


https://github.com/sfranzyshen/easyMesh
http://www.esp8266.com/viewtopic.php?f=6&t=11849&start=32

Hat damit schon jemand Erfahrungen gesammelt?

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.