ESP8266 mit anderen ESP8266 synchronisieren

OP #5151269
Lesenswert?

Moin Leute,

ich möchte insgesamt vier ESP8266 miteinander verbinden. Ein ESP8266 
wird in eine Fernbedienung eingebaut. Dieser nimmt die Werte von zwei 
Joysticks an. Ein zweiter ESP befindet sich auf einer Plattform und 
übernimmt Rechenaufgaben auf der Plattform (Kamera, Laufbahnberechnung, 
Regler). Zwei weitere ESP befinden sich jeweils an einem Motor und 
sollen diese ansteuern. Ich möchte, dass alle vier ESP synchron 
miteinander über Wifi kommunizieren. Sprich ein Host und 3 Clients. 
Hierbei dachte ich an ein JSON Format. Habt ihr Ideen oder Einfälle? Wie 
kann ich es realisieren, dass alle ESP8266 synchronisiert sind?

Vielen Dank für eure Einfälle und Hilfe.
OP #5151282
Lesenswert?

Pete K. schrieb:
> Was willst Du genau? Wifi ist definiert durch die Protokolle, und
> synchron zwischen mehreren Partnern ist da sowieso nix.

Ich möchte, dass ich mittels Joystick die Geschwindigkeit und die 
Position der Motoren vorgebe. Diese soll der "Rechen-ESP" entgegennehmen 
und anschließend an die beiden "Motoren-ESP" weitergeben. Damit das 
Fahrzeug geradeaus fährt, müssen die Motoren aber gleichzeitig 
angesteuert werden. Eine Verbindung mittels Leitungen ist keine Option.
OP #5151295
Lesenswert?

Wenn die Latenzen in einem nicht nennenswerten Bereich liegen (ich weiß 
es leider nicht) stört es die Motoren sicher nicht.

Die Gesamtfunktion kann ich jedoch erstmal nicht testen. Aktuell habe 
ich nur die vier ESP und muss das alles miteinander quasseln lassen. Das 
ganze am besten nahezu synchron. Ist es nicht möglich, dass man eine 
gemeinsame Zeit hat? Irgendwie verifizieren kann, dass die ESP's zur 
selben Zeit das machen was sie sollen? Ich wollte mit einem ESP ein Wifi 
Netz aufbauen und die anderen drei sollen sich dort einloggen.

Wie soll ich da gegenregeln?
Persönliche Seite #5151320
Lesenswert?

Jan S. schrieb:
> Ist es nicht möglich, dass man eine gemeinsame Zeit hat?

Natürlich. Du könntest ntp verwenden. Einer Deiner esp8266 wird 
Zeitserver, die anderen holen sich via ntp die aktuelle Zeit.

Kann man so machen.

Für den Client gibt es für die Arduino-Variante hier ein Beispiel:

https://github.com/esp8266/Arduino/tree/master/libraries/ESP8266WiFi/examples/NTPClient
#5151323
Lesenswert?

Der ESP arbeitet Dein Program ab, soweit so schön. Ab und zu schaltet er 
aber auf einen Hintergrundtask wo er den ganzen WIFI Kram bedient. D.h. 
Du kannst Dich nicht darauf verlassen daß Dein Programm zu einem 
bestimmten Zeitpunkt abgearbeitet wird. Wenn Du jetzt 4 ESP hast und ein 
bestimmtes Programm auf allen ESP gleichzeitig startest, dann ist das 
Ende des Programms bei allen ESP zu unterschiedlichen Zeitpunkten 
erreicht. Das kann bis in den höheren ms Bereich reingehen, je nachdem 
wie gut die WIFI Verbindungen sind.
OP #5151327
Lesenswert?

Andreas B. schrieb:
> Der ESP arbeitet Dein Program ab, soweit so schön. Ab und zu
> schaltet er
> aber auf einen Hintergrundtask wo er den ganzen WIFI Kram bedient. D.h.
> Du kannst Dich nicht darauf verlassen daß Dein Programm zu einem
> bestimmten Zeitpunkt abgearbeitet wird. Wenn Du jetzt 4 ESP hast und ein
> bestimmtes Programm auf allen ESP gleichzeitig startest, dann ist das
> Ende des Programms bei allen ESP zu unterschiedlichen Zeitpunkten
> erreicht. Das kann bis in den höheren ms Bereich reingehen, je nachdem
> wie gut die WIFI Verbindungen sind.

Ah vielen Dank für deine Erklärung. Jetzt ist mir das schon einmal klar.

Was sagst du zu den 433Mhz Funkmodulen?
Gast #5151338
Lesenswert?

Im WLAN Netz hast du Latenzen im einstelligen Millisekunden Bereich - 
wenn du Glück hast.

Sporadisch (im schlechten Fall sogar häufig) kommen Pakete bis zu einige 
hundert Millisekunden verzögert beim Empfänger an.

Andreas B Hinweis bezüglich Multitasking macht das ganze noch 
schwieriger.

Damit die Motoren zwei separater synchron zu steuern, wird nicht 
zuverlässig funktionieren. Die Verbindung zwischen Steuerung und Motor 
würde ich generell ncht per Funkt machen. Die Verbindung zwischen 
Fernbedienung und Steuerung aber schon. Aber nicht per WLAN, es gibt 
andere Funkmodule mit garantiert kürzeren Latenzen.
OP #5151339
Lesenswert?

Stefan U. schrieb:
> Damit die Motoren zwei separater synchron zu steuern, wird nicht
> zuverlässig funktionieren. Die Verbindung zwischen Steuerung und Motor
> würde ich generell ncht per Funkt machen. Die Verbindung zwischen
> Fernbedienung und Steuerung aber schon. Aber nicht per WLAN, es gibt
> andere Funkmodule mit garantiert kürzeren Latenzen.

Danke für deine Hilfe.

Was würdest du für eine Verbindung zwischen Steuerung und Motor 
vorschlagen?
Gast #5151343
Lesenswert?

Nach schlechten Erfahrungen habe ich schon sehr lange nicht mehr mit 
Funk gearbeitet. Ich kann Dir kein konkretes Modul vorstellen. Soweit 
ich mich erinnere, gibt es hier irgendwo in der Artikelsammlung eine 
Liste mit empfehlungen.
Gast #5151346
Lesenswert?

Jan S. schrieb:

> Ich möchte, dass alle vier ESP synchron
> miteinander über Wifi kommunizieren.

Völlige Synchronität ist vollkommen unmöglich, da ist die Physik und die 
Struktur unseres Universums mit ganzen Macht dagegen.

Sprich: man muss IMMER definieren, was noch als "synchron" gelten 
darf, bevor man eine Frage wie deine stellt...

> Hierbei dachte ich an ein JSON Format.

So'ne Scheiße ist sehr, sehr viele Layer über den Überlegungen zu 
Synchronität.

Aber klar, man kann auch JSON samt sämtlichem sonstigen aufgedunsenen 
Geraffel der hippen "Web-Technologien" über Funk machen und trotzdem 
noch synchrone Abläufe realisieren.

Man darf dann halt bei den Anforderungen an die "Synchronität" nur noch 
sehr, sehr kleine Brötchen backen. So einfach ist das eigentlich...
Persönliche Seite #5151352
Lesenswert?

Jan S. schrieb:
> Das bedeutet aber weiterhin, dass die verschickten Befehle an die
> Motoren zu unterschiedlichen Zeiten ankommen können und somit Motor 1
> vor Motor 2 anspringt, oder?

Muss es nicht; der Befehl kann ja mit etwas Vorlauf versendet werden 
(Übung: nötige Zeit selbst bestimmen), und enthält einen Zeitstempel, 
wann der Motor einzuschalten ist.

Die empfangenden Controller warten dann halt, bis der Zeitpunkt 
eintritt, und schalten den Motor dann an.
Gast #5151371
Lesenswert?

Bei einer gewöhnlichen Steuerung mit PI oder PID Regler müssen die 
Motoren gar nicht unbedingt synchron gesteuert werden.

Allerdings braucht man kurze Latenzen. Es wäre schon blöd, wenn das 
Gefährt feste gegen die nächste Wand knallt, weil das WLAN mal gerade 
kurz ausgelastet war.

UDB Broadcast Nachrichten könnten dazu genutzt werden, mehrere Empfänger 
gleichzeitig anzusteuern. Aber wenn einer das Signal aufgrund einer 
Empfangsstörung verpasst, ist es mit der Synchronität auch wieder 
vorbei.
OP #5151380
Lesenswert?

c-hater schrieb:
> Sprich: man muss IMMER definieren, was noch als "synchron" gelten
> darf, bevor man eine Frage wie deine stellt...
>
>> Hierbei dachte ich an ein JSON Format.
>
> So'ne Scheiße ist sehr, sehr viele Layer über den Überlegungen zu
> Synchronität.

Nunja, so synchron, dass ich beide Motoren nahezu gleichzeitig 
einschalte. Ich möchte nur nicht, dass das Gefährt im Kreis fährt oder 
grundsätzlich mit einem Drall.

Also kein JSON. War auch nur eine Idee.
OP #5151381
Lesenswert?

Stefan U. schrieb:
> Bei einer gewöhnlichen Steuerung mit PI oder PID Regler müssen die
> Motoren gar nicht unbedingt synchron gesteuert werden.
>
> Allerdings braucht man kurze Latenzen. Es wäre schon blöd, wenn das
> Gefährt feste gegen die nächste Wand knallt, weil das WLAN mal gerade
> kurz ausgelastet war.

Ein PID-Regler wird eingesetzt. Allerdings spielen die Latenzen wohl 
eine Millisekundenrolle.
Gast #5151384
Lesenswert?

Stefan U. schrieb:

> Damit die Motoren zwei separater synchron zu steuern, wird nicht
> zuverlässig funktionieren. Die Verbindung zwischen Steuerung und Motor
> würde ich generell ncht per Funkt machen. Die Verbindung zwischen
> Fernbedienung und Steuerung aber schon. Aber nicht per WLAN, es gibt
> andere Funkmodule mit garantiert kürzeren Latenzen.

Es kann keine Funkmodule mit "garantierten" Latenzen geben. Jedem, der 
auch nur andeutungsweise denken kann, sollte das klar sein. Funkmodule 
können bestenfalls Latenzen für den Weg von der digitalen Einspeisung 
bis zur Sendeantenne oder von der Empfangsantenne bis zur digitalen 
Ausgabe garantieren, aber niemals die Latenz für einen turn-around 
zwischen Sender und Empfänger auf HF-Ebene.

Das geht bestenfalls, wenn man das Frequenzband exklusiv besitzt. Da 
sich aber die Natur leider rein garnicht um den Rechtscodex irgendeiner 
lächerlichen Eiweisspampe mit Gottabkömmlings-Komplex schert, ist auch 
auf Bändern, die man lt. Frequenzzuteilung exklusiv zu besitzen glaubt, 
immer noch mit Störungen durch das Universum und seine Prozesse zu 
rechnen. Ja, kaum zu fassen, das Universum hat echt absolut keine Angst 
vor den bösen Messbussen der zuständigen Bundesbehörde...

Genau dieser Turn-Around ist aber leider nunmal der Knackpunkt bezüglich 
der Synchronität...

Nunja, dazu kommt dann: in dem kleinen bissel Spektrum, was die Gierigen 
dieser Welt dem Privatmann zu freien Nutzung über gelassen haben (man 
fragt sich, mit welchem Recht eigentlich), sieht das nochmal sehr viel 
schlimmer aus. Da stört dann nämlich nicht nur das Universum, sondern 
auch noch jeder blöde Nachbar...
OP #5151388
Lesenswert?

c-hater schrieb:
> Es kann keine Funkmodule mit "garantierten" Latenzen geben. Jedem, der
> auch nur andeutungsweise denken kann, sollte das klar sein. Funkmodule
> können bestenfalls Latenzen für den Weg von der digitalen Einspeisung
> bis zur Sendeantenne oder von der Empfangsantenne bis zur digitalen
> Ausgabe garantieren, aber niemals die Latenz für einen turn-around
> zwischen Sender und Empfänger auf HF-Ebene.

Ich denke, dass es in meinem Fall tatsächlich genügt, diese ausreichend 
klein zu halten.

Was spricht dann gegen ein 433Mhz Funkmodul bzw. vier Stück davon?
Gast #5151444
Lesenswert?

Jan S. schrieb:
> Zwei weitere ESP befinden sich jeweils an einem Motor und
> sollen diese ansteuern. Ich möchte, dass alle vier ESP synchron
> miteinander über Wifi kommunizieren.

Was nützt dir die schönste Synchronisation der Motoren, wenn die Räder 
unterschiedlichen Umfang und unterschiedlichen Schlupf haben?
OP #5151666
Lesenswert?

Wolfgang schrieb:
> Jan S. schrieb:
>> Zwei weitere ESP befinden sich jeweils an einem Motor und
>> sollen diese ansteuern. Ich möchte, dass alle vier ESP synchron
>> miteinander über Wifi kommunizieren.
>
> Was nützt dir die schönste Synchronisation der Motoren, wenn die Räder
> unterschiedlichen Umfang und unterschiedlichen Schlupf haben?

Auch das brauchen wir nicht weiter diskutieren.

Bitte nochmals zu den Funkmodulen zurück. Gibt es da etwas besonderes zu 
beachten?
Gast #5151676
Lesenswert?

Jan S. schrieb:
> Bitte nochmals zu den Funkmodulen zurück.

Ne, nochmal zurück zum WLAN:

Vielleicht habe ich die Aufgabenstellung nicht ganz verstanden, aber 
wenn du von dem Sende ESP immer erst dann einen neuen Befehl an die 
Empfänger ESPs sendest, wenn von allen Signalquellen (Joysticks) ein 
Signal vorliegt (mus sich ja nicht von dem vorherigen unterscheiden), 
dann sollten deine Motoren doch synchron angesteuert werden.
Ob, so habe ich es beim querlesen verstanden, dein  Fahrzeug wirklich 
geradeaus läuft, hat mit der Übertragung der Signale erstmal nichst zu 
tun.
Gast #5151678
Lesenswert?

Dirk schrieb:
> Jan S. schrieb:
>> Bitte nochmals zu den Funkmodulen zurück.
>
> Ne, nochmal zurück zum WLAN:
>
> Vielleicht habe ich die Aufgabenstellung nicht ganz verstanden, aber
> wenn du von dem Sende ESP immer erst dann einen neuen Befehl an die
> Empfänger ESPs sendest, wenn von allen Signalquellen (Joysticks) ein
> Signal vorliegt (mus sich ja nicht von dem vorherigen unterscheiden),
> dann sollten deine Motoren doch synchron angesteuert werden.
> Ob, so habe ich es beim querlesen verstanden, dein  Fahrzeug wirklich
> geradeaus läuft, hat mit der Übertragung der Signale erstmal nichst zu
> tun.

edit:
Die o.g. beschriebene Vorgehensweise ist natürlich auch für Funkmodule 
einsetzbar (vielleicht sogar sinnvoll/nötig).
Gast #5152160
Lesenswert?

> Ob, so habe ich es beim querlesen verstanden, dein  Fahrzeug wirklich
> geradeaus läuft, hat mit der Übertragung der Signale erstmal nichst zu
> tun.

Gehe mal davon aus, daß das Fahrzeug gerade steht. Nun sendest du erst 
an den Linken Motor den Befehl "Bitte vorwärts drehen, 30% Leistung". 
Und dann sendest du den gleichen befehl an den rechten Motor, der kommt 
dort aber 100ms später an.

Dann startet das Fahrzeug mit einer scharfen Drehung nach rechts und 
fähr in die falsche Richtung los.

Das meint der TO.
#5152942
Lesenswert?

Eigentlich realisiert man solche Aufgaben durch synchrone Zeitfenster. 
Oft hat man bei der Echtzeitsteuerung mehrerer Geräte genau diese 
Synchronisationsproblem. Wenn man es schafft, die Geräte zumindest 
Zeitsynchron zu halten, werden die empfangenen Kommandos immer in einem 
bestimmten Zeitraster ausgeführt. Z.B. alle 50 ms. Für verloren 
gegangene Kommandos nimmt man dann vorher festgelegt Ersatzwerte.

Und Differnzwerte gehen gar nicht. Also nicht 30% schneller, sondern 
genaue Geschwindigkeitsangaben.

Ansonsten gilt natürliche: eine 100%ige Synchronität gibt es nicht.

PS: Zeitsynchronität wird z.B. durch einen Impuls, der von alle Geräten 
'gleichzeitig' empfangen werden kann, ermöglicht.
Gast #5153424
Lesenswert?

Stefan U. schrieb:
> Gehe mal davon aus, daß das Fahrzeug gerade steht. Nun sendest du erst
> an den Linken Motor den Befehl "Bitte vorwärts drehen, 30% Leistung".
> Und dann sendest du den gleichen befehl an den rechten Motor, der kommt
> dort aber 100ms später an.
>
> Dann startet das Fahrzeug mit einer scharfen Drehung nach rechts und
> fähr in die falsche Richtung los.

Wie willst du bei solch einer Vorgehensweise vernünftig synchronisieren?

Sinnvollerweise wird man wohl erst die Befehle zu den Steuereinheiten 
schicken und anschließen per Broadcast an alle ein "Befehl 
ausführen"-Kommando.
Allerdings ist damit auch nicht sicher gestellt, dass beide Motoren 
gleichzeitig loslaufen, weil es trotz eines gemeinsamen 
"Ausführen"-Kommandos, passieren kann, dass dieses nicht bei allen 
Empfängern ankommt.

Insgesamt ist es eine blöde Idee, solche synchronisationskritischen 
Sachen über unabhängige Funkwege zu steuern. Besser wäre eine gemeinsame 
Funkdatenstrecke, i.e. nicht jeder Motor wird über ein eigenes Funkmodul 
gesteuert, sondern es gibt eine gemeinsame Steuereinheit, die direkt per 
Hardwareverbindung die Motoren steuert.
#5153453
Lesenswert?

Wolfgang schrieb:
> Insgesamt ist es eine blöde Idee, solche synchronisationskritischen
> Sachen über unabhängige Funkwege zu steuern.

Es ist nicht unbedingt eine blöde Idee. Da wir die Voraussetzungen nicht 
kennen, können wir das eigentlich nicht bewerten.

Allerdings stimmt es schon, dass es sowohl theoretisch als auch 
praktisch einen große Herausforderung ist. Und es gibt tatächlich 
Anwendungen, in denen genau das gefordert wird.

Jan S. schrieb:
> Damit das
> Fahrzeug geradeaus fährt, müssen die Motoren aber gleichzeitig
> angesteuert werden.

Ich vermute aber mal, dass da sowas wie eine "Panzersteuerung", d.h. 
zwei Raupenketten-Motoren (wie auch bei Baufahrzeugen üblich) geplant 
ist. Daher würde ich für die Umsetzung des Projektes ebenfalls eine 
gemeinsame Steuerung der beiden Motoren auf dem Fahrzeug empfehlen. 
Warum dann aber 2 Joysticks notwendig sind, weiß ich auch nicht.
Gast #5153490
Lesenswert?

Rolf H. schrieb:
> Allerdings stimmt es schon, dass es sowohl theoretisch als auch
> praktisch einen große Herausforderung ist.

Wenn es dann unbedingt sein muss, ist es günstiger, nicht das 
"Ausführen"-Kommando über Funk zu schicken, sondern den Übertragungsweg 
lediglich zu nutzen, um Uhren in den Empfänger zu synchronisieren. Das 
funktioniert auch, wenn die Funkstrecke mal gestört ist, weil es dabei 
nicht auf Fehlversuche ankommt. Die eigentliche Aktion ("Motor start") 
wird dann über die interne Uhr gesteuert und ist unabhängig vom 
aktuellen Zustand der Funkstrecke.
#5153590
Lesenswert?

Wolfgang schrieb:
> Die eigentliche Aktion ("Motor start")
> wird dann über die interne Uhr gesteuert und ist unabhängig vom
> aktuellen Zustand der Funkstrecke.

Richtig, und die Kommandos auch mehrfach senden, am besten periodisch. 
Da weiß das lokal System auch, wann etwas ausgefallen ist. Gerne werden 
dann auch die letzten Kommandos mit wiederholt. Macht das ganze dann 
auch etwas robuster.

Das war das, was ich heute morgen schon versuchte zu erklären.

Rolf H. schrieb:
> Eigentlich realisiert man solche Aufgaben durch synchrone Zeitfenster.
> Oft hat man bei der Echtzeitsteuerung mehrerer Geräte genau diese
> Synchronisationsproblem. Wenn man es schafft, die Geräte zumindest
> Zeitsynchron zu halten, werden die empfangenen Kommandos immer in einem
> bestimmten Zeitraster ausgeführt. Z.B. alle 50 ms. Für verloren
> gegangene Kommandos nimmt man dann vorher festgelegt Ersatzwerte.

Ob das dann aber reicht für ein Fernsteuerung? Also kurze Reaktionzeiten 
(< 500 ms) sind da wohl eher nicht drin.
Gast #5153701
Lesenswert?

> Also kurze Reaktionzeiten sind da wohl eher nicht drin.

Eben, deswegen wird wohl ein zentraler Motor-Regler, der über Funk mit 
den Motoren und Sensoren kommuniziert, nicht realisierbar sein.

Soweit ich verstanden habe, geht es um eine art Fahrzeug mit zwei 
unabhängigen Antrieben links und rechts. Was ich dabei nicht verstehe 
ist:

Warum können die beiden Seiten nicht mit Kabel untereinander verbunden 
sein?

Ich rate mal: Das Ganze ist in Wirklichkeit eine Hausaufgabe. Es geht 
nicht um ein reales Gefährt, sondern um eine akademische 
Herausforderung. Der Prof will sehen, ob die Knackpunkte erkannt werden 
und er will sehen, ob seine Schüler imstande sind, die 
Zeitsynchtronisation trotz unbekannter Signal-Laufzeiten hinzubekommen.

Falls ich da richtig liege, einen Tip an den TO: Google findet Einträge 
in diesem Forum inzwischen sehr schnell. Dein Prof wird diese Seite 
schnell finden, wenn er gezielt danach suchst. Sieh zu daß deine Arbeit 
wesentlich mehr Substanz hat, als dieser Thread, sonst wird er sie 
entsprechend bewerten.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren