Go Down

Topic: WebSocket, est-ce qu'il y a des utilisateurs sur ce forum? (Read 1 time) previous topic - next topic

bilbo83

Bonjour à tous,

Pour la réalisation d'un projet qui est maintenant presque terminé (il ne reste plus que la mise en boîte et un problème de parasitage a régler), j'ai découvert par hasard, l'année dernière, les "WebSockets".
Malgré de nombreuses recherches, je n'ai trouvé qu'un seul post de 2012, qui en parle brièvement.

Novice en matière de serveur, client, requête etc.. j'ai été séduit par le concept des WebSockets.
Je suis étonné de voir que personne sur ce forum en parle et que tout tourne autour de serveurs de pages web lorsqu'il s'agit de transmettre des infos entre un Arduino et un PC.


Je me sens un peu seul et j'en viens à me demander si j'ai fais le meilleur choix en choisissant les WebSockets.

Qui connaît ?
Qui les utilises ?
Pour partager nos expériences.
Merci.

Roger.


tahitibob35

Salut
Tu n'as pas beaucoup cherché :
http://fr.lmgtfy.com/?q=arduino+websocket

Je ne pense pas que l'arduino soit très adapté à ce genre d'utilisation.

Perso, je les ai déjà utilisées, mais avec une pandaboard (=Raspberry Pi) qui hébergeait le serveur, et connectée à l'Arduino.
http://david.hautbois.free.fr/wordpress/index.php/287-control-arduino-from-a-web-page-and-websockets
http://david.hautbois.free.fr/wordpress/index.php/292-controler-une-voiture-depuis-une-page-web

David.

bilbo83

Si, si, j'ai bien cherché. Tous les sujets donnés par google, je les ai vus.
Comme je le disais, un seul post sur ce forum, pas de 2012 mais 2011 par osaka.

merci quand même.

Pourquoi pense-tu que les Websockets ne sont pas adaptés à l'arduino? Ca m'intéresse.

Roger.

tahitibob35

A ma connaissance (pas encore regardé HTLM5), c'est un script javascript qui exploite les websockets.
Il faut donc coder un script JS.
L'arduino devra donc servir une page HTML un peu lourde + un script JS.
Et si on veux des trucs un peu joli, des images.
L'arduino va être un peu lent et de toute façon, il n'est pas fait pour héberger un serveur Web.
Donc, il vaut mieux héberger tout ça sur un raspberry pi, par exemple, et laisser l'arduino faire ce pour quoi il est fait.

Après deux solutions :
- le raspberry pilote l'arduino via le port série
- le raspberry pilote l'arduino via le réseau ethernet ou wifi (via un shield) et échange avec lui des requêtes simples :
   http://arduino:80/?pin=5&statut=HIGH

Après, c'est mon avis perso....

bilbo83

@tahitibob35

Non, justement, l'Arduino n'as pas besoin de stocker un serveur Web, c'est le gros avantage.
Pour un échange bidirectionnel avec un PC, tout le code HTML + Javascript se trouve sur ce PC.
Donc rien de lourd sur l'Arduino, contrairement à un serveur Web.
Pour mon appli, j'ai plus de 2000 lignes de codes HTML et JS sur le PC Windows, sur mon Arduino DUE, ce qui concerne l'Ethernet se résume à quelques lignes et la librairie WebSocket que j'utilise n'est pas énorme.

Roger.


tahitibob35

Oui TU as bien géré le truc, mais d'autres auraient tout mis sur l'arduino....

B@tto

L'intérêt d'un websocket vs des requêtes HTTP est quand même assez limité en terme de scénario d'usage, c'est surtout pour ça qu'on trouve pas énormément d'exemple.
Blog électronique : battomicro.wordpress.com
Photographie : www.interactive-celebration.fr
Fablab de Montpellier : www.labsud.org

bilbo83

B@tto,

Je pense que tu as testé les deux approches avec des Arduino.
Je n'ai pratiqué que le WebSocket et je n'arrive pas à voir ce qui est limité par rapport aux requêtes HTTP, bien au contraire.
Je parle bien sur, d'une liaison bidirectionnelle entre un PC et un ou plusieurs Arduino.
Si tu as des exemples je suis preneur.

Roger.

B@tto

Dès que y'a du net en général je joue plutôt avec des NodeMCU (ESP8266). Y'a une lib websocket déjà intégrée, et je pense qu'elle n'est pas restreinte aux ESP puisque c'est du haut niveau qui utilise une classe Client (donc à priori compatible avec Ethernet ou wifi).

Le websocket c'est limité surtout par un souci de compatibilité : bon c'est vrai qu'aujourd'hui presque tous sont compatible, à condition d'avoir une version récente mais ça n'a pas toujours été le cas loin de la. Ensuite comme j'ai dit c'est surtout que le HTTP c'est connu, maitrisé, y'a plein de librairie, et ça suffit très bien dans une large majorité de cas, donc pourquoi vouloir réinventé la roue ? Surtout que la minorité qui reste, on passe plutôt par un socket TCP ou UDP directement pour remplir cette tâche. En fait le seul cas qui s'est présenté à moi est récent : il s'agit d'un robot basé sur un NodeMCU dont je voulais un moyen le plus simple possible pour le piloter. Là, clairement la requête HTTP est une technique lourde : toute les x millisecondes balancer une requête pour donner deux variables c'est lourd ... Et ouvrir un tcp ou un udp dans un navigateur j'ai pas trouvé autre chose que les websockets. L'idée c'est qu'on se connecte au robot sur le port 80, il stream une page avec le javascript pour initier la connexion en websocket sur un serveur websocket sur le port 81 et qui tourne sur le nodeMCU et qui permet de piloter les moteurs. Après en plus c'est assez facile de retransformer tout ça en une appli cross plateform (avec Intel XDK par exemple).
Blog électronique : battomicro.wordpress.com
Photographie : www.interactive-celebration.fr
Fablab de Montpellier : www.labsud.org

bilbo83

Alors, on est bien d'accord, la requête HTTP est une technique lourde lorsque l'on doit transmette quelques octets à une fréquence élevée. De plus, je dirais que vue de l'Arduino, envoyer des messages vers un client ou en recevoir est aussi simple que par l'interface série.


B@tto

On est bien d'accord, dans le cas d'une fréquence élevé l'HTTP c'est pas l'idéal, mais bien prendre en compte tous les aspects :

- le cas de figure est très rare, encore plus dans un navigateur
- ça peut poser des soucis de compatibilité
- chaque websocket mobilise un socket, donc d'une part plus y'a de client, plus l'arduino sera chargée, et il y aussi des limites en terme de quantité de socket TCP ouvrable simultanément.
- http, bien que lourd, au final ça marche pas mal, même sur un 16 MHz. Le websocket a des aspects lourds aussi : handshaking, encodage, traitement ...
Blog électronique : battomicro.wordpress.com
Photographie : www.interactive-celebration.fr
Fablab de Montpellier : www.labsud.org

Go Up