Forum: Mikrocontroller und Digitale Elektronik Protokoll für kleine Fernsteuerung mit zwei esp32


von Phillip H. (philharmony)


Lesenswert?

Ich möchte eine kleine Fernsteuerung bauen: Sender hat zwei 2-Achsen 
Sticks mit Push und zwei Drehencoder, Empfänger kann entsprechend 4 
Modellbau-Servos / Motorregler ansteuern. Ich habe ein paar esp32-wroom 
Boards hier und möchte das gerne damit realisieren. Meine Kids sollen 
dann mit ein paar China-Servos im Lego-Gahäuse ihre Spielecke rocken. 
Achsen auslesen und Servos ansteuern ist alles kein Problem.
Nun hängt es am passenden Protokoll. Ich habe es via modBus tcp 
realisiert. Fernbedienung läuft als wifi-Ap und schreibt die Achsen als 
Multi hreg, und die Buttons als Multi coil. Der Empfänger ist wifi 
Client und setzt die hreg/Buttons auf die servos um.
Funktioniert soweit auch alles gut, wäre da nicht die riesen Latenz von 
bis zu einer Sekunde vom abschicken der Werte an der Fernbedienung bis 
sie am Empfänger ankommen.
Daher erstmal generell die Frage: ist das für modBus auf den esp-Dingern 
normal oder müsste das schneller gehen?
Oder welche/s Protokoll/e wären vielleicht besser geeignet?
Das ist mein erstes Projekt, wo zwei nC mit einander sprechen sollen und 
ich hatte mir einfach erstmal das erst-beste Protokoll rausgesucht was 
ich finden konnte und wofür ich eine lib gefunden habe.

von 🕵︎ Joachim L. (Gast)


Lesenswert?

Für sowas eignen sich Websockets besser. Schau mal auf Github nach. Mach 
erstmal einen Chat zwischen den ESPs, damit du verstehst wie es geht. 
Wenn du dann weisst worauf es ankommt, kannst du dein spezielles Problem 
leichter umsetzen.

von Phillip H. (philharmony)


Lesenswert?

Vielen Dank, schaue ich mir an. Ich bin auch noch auf espnow gestoßen, 
gibt es dazu Erfahrungen?

von Georg G. (df2au)


Lesenswert?

Phillip H. schrieb:
> espnow

geht prima. Wenig Programmieraufwand.

von Stefan F. (Gast)


Lesenswert?

Joachim L. schrieb:
> Für sowas eignen sich Websockets besser

Websockets ist doch ein Aufsatz auf HTTP, oder nicht?

Mir scheint die Nutzung von UDP in solchen Fällen viel einfacher. Da 
kann man sich zwar nicht darauf verlassen, eine Antwort zu bekommen, 
aber

a) Es wird auch keine Hänger im Programm geben weil die Kommunikation 
auf TCP Ebene gerade stockt.
b) Man kann sich darauf verlassen, dass Pakete am Stück übertragen 
werden, was die Verarbeitung beim Empfängers relativ einfach macht.

Blöd ist nur, dass Javascripte im Web Browser kein UDP können. Ich mache 
drei Kreuze, wenn sich das endlich ändert.

von Phillip H. (philharmony)


Lesenswert?

Es soll eine reine Kommunikation zwischen zwei esp32 sein, kein 
Webinterface, einfach ein Paket aus 13 bytes vom Handteil zum 
Empfängers, ca 10mal pro Sekunde(?) Möglichst ohne wahrnehmbare 
Verzögerung.

von Stefan F. (Gast)


Lesenswert?

Phillip H. schrieb:
> Es soll eine reine Kommunikation zwischen zwei esp32 sein, kein
> Webinterface, einfach ein Paket aus 13 bytes vom Handteil zum
> Empfängers, ca 10mal pro Sekunde(?) Möglichst ohne wahrnehmbare
> Verzögerung.

Dann versuche es mal mit UDP. Das ist wirklich einfach zu benutzen.

Zum manuellen Testen empfehle ich das Programm netcat.
1
nc -u 192.168.0.111 3002

Deine Eingaben werden Zeilenweise als Paket gesendet. Empfangene Pakete 
werden auf dem Bildschirm angezeigt.

von 🕵︎ Joachim L. (Gast)


Lesenswert?

Stefan F. schrieb:

> Websockets ist doch ein Aufsatz auf HTTP, oder nicht?

Die nennen das "Upgrade". Es wird eine Standleitung aufgebaut. Also eine 
Art Software-Kabel. Wäre schön, wenn der Fredstarter ESPnow, UDP und WS, 
testen könnte und uns dann einen Praxisbericht liefert wattenu wirklich 
besser und schneller ist ;-)

Für WS gibt es halt sehr viele Tools z.B.

https://github.com/joewalnes/websocketd

Turn any program that uses STDIN/STDOUT into a WebSocket server. Like 
inetd, but for WebSockets.

Also das mit dem ESPnow scheint ja wie für dich gemacht zu sein. Das 
muss ich auch mal testen.

von Phillip H. (philharmony)


Lesenswert?

Ok, also "ich hatte vorhin mal zehn Minuten Zeit und habe mein Projekt 
auf esp-now umgebaut". Es ist wirklich so einfach, habe mich hieran 
orientiert:
https://randomnerdtutorials.com/esp-now-esp32-arduino-ide/
Vielen Dank für Eure Inputs. UDP und websockets habe ich auch mal grob 
angeschaut, espnow war am einfachsten zu implementieren. Das nächste 
Projekt kommt sicher :)

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.