echtzeit LAN, etwas wie socket.io auf dem arduino

hi,

ich werde für das dimmen meiner beleuchtung schieberegler (slider) auf der webseite verwenden. das funktioniert auch soweit, wenn man den slider an der stelle antippt, wo er "hinfahren" soll. die webseite schickt ja dann nur einen wert (den, den der slider dann hat), an den arduino.

anders sieht es aus, wenn man den slider mit dem finger "schiebt". die webseite schickt dann sehr schnell jeden zwischenwert an den arduino, und der reagiert dann natürlich sehr verzögert und braucht für jede helligkeitsänderung fast eine halbe sekunde. ist natürlich unschön. außerdem verschluckt sich der arduino auch schon mal und schaltet das licht auf falsche werte.

als erstes dachte ich an ein timeout im browser, so daß er den wert nur abschickt, wenn er sich in 200ms nicht geändert hat. ok, würde gehen, aber:

es wäre schon schön, wenn es eine möglichkeit gäbe, die werte praktisch in echtzeit zu senden und zu empfangen. da bin ich dann auf socket.io gestoßen, in videos sieht man, wie der arduino wirklich die werte in realtime empfängt und zb. eine RGB-led extrem zeitnah durch das rumschieben eines fingers auf einem farbkreis auf dem handy schaltet.

große freude.

bis ich draufgekommen bin, daß auf diesen videos der arduino über USB an einem PC hängt oder über seriell an einem raspberry. das handy kommuniziert also über websocket extrem schnell mit dem PC und der schaltet den arduino.

eigentlich wollte ich aber keinen raspberry verwenden.

also ist die frage klar: kann man eine solch schnelle verbindung auch direkt vom handy zum arduino herstellen?
so, daß nicht für jeden datentransfer die verbindung neu aufgebaut wird, sondern daß die verbindung (optimal in beide richtungen) offen bleibt.

danke für tips und gruß, stefan

Eisebaer:
als erstes dachte ich an ein timeout im browser, so daß er den wert nur abschickt, wenn er sich in 200ms nicht geändert hat.

Das gleiche Problem hatte ich mit einem GUI. Ich habe es dann so gemacht dass ich immer alle 300ms den Zustand der Slider abfrage und nur wenn sich was ändert schicke ich den neuen Wert. Geht super.

so, daß nicht für jeden datentransfer die verbindung neu aufgebaut wird, sondern daß die verbindung (optimal in beide richtungen) offen bleibt.

Das ist eine der wesentlichen Eigenschaften des TCP in TCP/IP.

Nur die Browser (und die Webserver) tun sich da schwer, die agieren in Request/Response Zyklen.
Ist halt HTTP typisch.
JavaScript kann das mittlerweile auch anders(glaube ich).
Websockets, o.ä. heißt das dann.

hi,

genau, heißt websocket (hab' ich oben auch schon geschrieben). und funktioniert, aber ich hätte das gerne auf dem arduino. und da hab' ich noch nichts gefunden.

wenn Du bei google nach arduino socket.io suchst, und dann auf videos klickst, siehst Du gute beispiele, wie flott das funktioniert, aber eben nicht mit dem arduino als webserver, sondern mit einem PC oder raspberry und dann über seriell an den arduino.

gruß stefan

EDIT: websocket läuft auch mit TCP, siehe Wikipedia

JS ist nicht mein Reich!

Der Trick dürfte sein:

  1. Verzichte auf HTTP !!!! (ok um HTML und Bilder auszuliefern notwendig)
  2. Kein Close auf die TCP Verbindung
    Ja, das ist der Trick, kein close.