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.
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.
Vielen Dank, schaue ich mir an. Ich bin auch noch auf espnow gestoßen, gibt es dazu Erfahrungen?
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.
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.
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.
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.