Go Down

Topic: Transfert de fichier d'une carte S vers un PC par Websocket (Read 2 times) previous topic - next topic

barbudor

ok, Je ferais des essais quand je serais rentré lundi
Barbuduino: Arduino sur Breadboard & VinciDuino: Clone Leonardo // WR703: Mini-routeur hacké // LauchPad MSP430 et Stellaris // Panda II Arduino-like .NetMF sous VisualC#
RTFC: Read That F.....g Code / RTFD: Read That F.....g Doc / RTFDS: Read That F.....g DataSheet / RTFS: Read That F.....g Schematic / Wot da ya wanna D.I.Y. today ?

vlp_arduino

Suite à mes premiers tests, l'Arduino a du mal a gérer les websockets: la meilleures solutions (et il me semble qu'Osaka avait conclue à la même chose) c'est de faire un server mixte.

C'est à dire que côté clients web on fonctionne bien en websockets mais côté Arduino lors de l'authentification au server il faut que ce dernier saisisse qu'il discute à l'Arduino (via IP ou analyse de trame spécifique) puis courcicuite la phase de Handshake pour directement ajouter l'Arduino dans sa liste des users.

De cette facon, on arrive a un système completement fluide (aussi bien via Ethernet que via GPRS).

Au niveau navigateurs: ca fonctionne bien sous safari/safari mobile/chrome/chrome mobile/FF.

vlp

barbudor

Si je comprend bien tu fais intervenir un serveur entre les 2
Code: [Select]
Navigateur ---(websocket)---> Serveur Web / PHP ---(socket simple)---> Arduino

C'est ca ?

parce qu'il n'y a pas moyen que le navigateur court-circuite le handshake
Or moi je parle d'une solution directe
Code: [Select]
Navigateur ---(websocket)---> Arduino

Donc avec handshake géré par l'Arduino.

Le problème (que j'ai re-soulevé sur ton autre post ailleurs) c'est que les hébergeurs généralement désactivent les sockets PHP.

Barbuduino: Arduino sur Breadboard & VinciDuino: Clone Leonardo // WR703: Mini-routeur hacké // LauchPad MSP430 et Stellaris // Panda II Arduino-like .NetMF sous VisualC#
RTFC: Read That F.....g Code / RTFD: Read That F.....g Doc / RTFDS: Read That F.....g DataSheet / RTFS: Read That F.....g Schematic / Wot da ya wanna D.I.Y. today ?

cbrandt

Bonjour,

Pour faire marcher mes websocket directement entre le navigateur web et l'arduino, je procède comme suit:

côté navigateur, un peu de javascript pour initier la connexion:

Code: [Select]

var source;
var data;
var object;


if (typeof (EventSource) == undefined)
{
// websockets non supportés par le navigateur
}
else
{
souce = new EventSource ("mon_event_handler");
souce.onmessage = function (event)
{
// ici, eval.data contient les données renvoyées par l'arduino
// cette partie est appelée à chaque envoi de données de l'arduino
}
}


et côté arduino:

pour préparer la socket, StartEventHandler doit être appelé dans le code du serveur web de l'arduino lorsqu'on détecte la bonne requête:

Code: [Select]

// ligne contient la 1ère ligne de texte lue sur la socket obtenue avec client = server.available ()

if (strcmp (ligne, "GET /mon_event_handler HTTP/1.1") == 0)
{
// fermeture de l'ancienne (on en garde qu'une à la fois)
if (_socketEventHandler)
_socketEventHandler->stop ();

// renvoi de l'entête
_socketEventHandler = client;
_socketEventHandler->println ("HTTP/1.1 200 OK\n");
_socketEventHandler->println ("Connection: keep-alive");
_socketEventHandler->println ("Cache-control: no-cache");
_socketEventHandler->println ("Content-Type: text/event-stream");
_socketEventHandler->println ("");
}


ensuite chaque fois qu'on veut envoyer des données dynamiquement au navigateur web, on écrit sur la socket _socketEventHandler:

Code: [Select]

_socketEventHandler->println ("data: ");

// écrire ici les données avec println
_socketEventHandler->println ("coucou :)");

// signaler la fin des données
_socketEventHandler->println ();


y'a sûrement quelques fautes, car c'est tiré de mon projet et adapté, mais le principe est là.

si ça peut aider quelqu'un…

barbudor

Ok
mais si je comprend bien, ce n'est pas des WebSocket mais des Serveur-Sent Events

Je découvre mais çà ne semple pas être tout a fait la même chose:
- Mise en oeuvre apparemment plus simple puisqu'on se contente de garder la connexion HTTP en keep alive (pas de Upgrade handshake)
- Mais mono directionnel : serveur -> client uniquement
  Le navigateur ne peut rien demander tel que envoyer un message si l'utilisateur clique un bouton

Barbuduino: Arduino sur Breadboard & VinciDuino: Clone Leonardo // WR703: Mini-routeur hacké // LauchPad MSP430 et Stellaris // Panda II Arduino-like .NetMF sous VisualC#
RTFC: Read That F.....g Code / RTFD: Read That F.....g Doc / RTFDS: Read That F.....g DataSheet / RTFS: Read That F.....g Schematic / Wot da ya wanna D.I.Y. today ?

Go Up