Web server arduino

a marqué ce sujet comme résolu.

Salut,

Tu n'as pas trop le choix, soit tu diminues la taille de ton programme (notamment les chaînes de caractères qui prennent beaucoup de place), soit tu stockes des variables dans l'EEPROM pour libérer la RAM (regarde ce tuto), soit tu utilises un autre modèle d'Arduino avec plus de RAM.

+0 -0

en faite de le but est de controller un drone sans application et avec n'importe quel appareil a condition qu'il est google chrome :

void PageWeb() { // La fonction prend un client en argument

Serial.println("Repondre…"); // debug // On fait notre en-tête // Tout d'abord le code de réponse 200 = réussite client.println("HTTP/1.1 200 OK"); // Puis le type mime du contenu renvoyé, du json //client.println("Content-Type: application/json"); client.println("Content-Type: text/html");

// Autorise le cross origine client.println("Access-Control-Allow-Origin: *"); // Et c'est tout ! // On envoi une ligne vide pour signaler la fin du header client.println();

// Puis on commence notre page web
client.println("<html><head><title>Projet Drone 2016</title></head>");
client.println("<body><p><CENTER> ############################################################</CENTER>");
client.println("</p><p><CENTER> Theme : Conception,modélisation et realisation d'un quadrirotor</CENTER>");
client.println("</p><p><CENTER> ############################################################</CENTER>");
client.println("</p><form method="get"><center><p>");
client.println("<button STYLE="COLOR:#FFF;background-color:#0F0;" name="ORDRE" value="111"><H1>ON</H1></button>");
client.println("<button STYLE="COLOR:#FFF;background-color:#F00;" name="ORDRE" value="000"><H1>OFF</H1></button>");
client.println("<button name="ORDRE" value="222"><H1>DEC</H1></button>");
client.println("<button name="ORDRE" value="333"><H1>ATT</H1></button>");
client.println("</p><p>");
client.println("<button name="ORDRE" value="888"><H2>HAUT</H2></button>");
client.println("<button name="ORDRE" value="999"><H2>BAS</H2></button>");
client.println("</p><p><button name="ORDRE" value="444"><H2>AVA</H2></button>");
client.println("<button name="ORDRE" value="666"><H2>GCH</H2></button>");
client.println("<button name="ORDRE" value="777"><H2>DRT</H2></button>");
client.println("<button name="ORDRE" value="555"><H2>ARR</H2></button>");
client.println("</p></center></form>");
client.println("</body></html>");
}

est-it possible de téléverser ce code dans la mémoire flash au lieu de ram et si c'est le cas comment ??

+0 -0

Pour rendre ton code plus lisible, utilise le bouton de mise en forme <>.

Je n'ai pas regardé le code dans le détail, mais outre les éventuelles erreurs de programmation, le problème de mémoire vient comme je le pensais des chaînes de caractères qui prennent chacune beaucoup de place.

est-it possible de téléverser ce code dans la mémoire flash au lieu de ram et si c'est le cas comment ??

En fait tout est déjà dans la flash, c'est ça le problème. La totalité de ton code y est stocké, notamment les chaînes de caractères puisque tu les as écrites "en dur" dans le code.

Tu peux les faire passer dans la RAM si tu crées des variables auxquelles tu affectes les chaînes de caractères, mais le problème de place sera le même à mon avis.

J'ai déjà été dans le même cas que toi avec du HTML à envoyer. Le plus simple est d'utiliser un shield avec carte SD : ton code HTML est déjà écrit dans un fichier (donc ne consomme pas de mémoire) et quand tu as besoin de l'envoyer tu ne fais que lire son contenu.

+0 -0

Alors oui, en suivant le tutoriel que j'indique plus haut pour stocker les chaînes dans la flash ça va peut-être régler le problème.

+0 -0

Si je peux me permettre, je ne pense que tu as un gros problème de conception, parce que servir une page Web depuis un Arduino l'est pas vraiment l'idée du siècle.

Chose plus intelligente à faire, c'est d'utiliser des sockets entre le navigateur et l'Arduino. Deux possibilités à partir de là:

  • Utiliser des sockets TCP: c'est faisable nativement sur Chrome, des gens ont l'air d'avoir réussi à implémenter (je n'ai aucune idée de comment) ça de façon généralisée, voir tcp for browsers. Il te suffirait d'écouter pour une communication TCP sur ton Arduino, c'est facile et léger à implémenter des deux côtés, il te faudra juste héberger ton code à quelque part.
  • Utiliser des WebSocket:: universel en JavaScript maintenant, il faudra utiliser une implémentation des WebSockets sur Arduino, mais ça reste largement plus intelligent que de servir une page Web. C'est la solution que j'utiliserais si je devais faire quelque chose de stable.

Maintenant, si tu veux faire quelque chose de vraiment intelligent, il faut te servir d'un ordinateur (par exemple Raspberry Pi, ODROID, etc.) pour te interfacer l'accès à l'Arduino. Tu peux ensuite servir la page Web depuis celui-ci, et le laisser s'occuper de communiquer avec ton Arduino (par des appels systèmes). Deux moyens à partir de là:

  • Si tu n'as qu'un seul Arduino et qu'il est à proximité du RPi/…, alors tu peux te connecter via un port série, c'est probablement la façon la plus efficace de faire ce que tu veux.
  • Si tu as plusieurs Arduino, ou qu'il n'est pas à proximité du RPi/…, tu peux utiliser un socket TCP, avec la même idée que précédemment, sauf que tu n'as pas le problème de l'implémentation en JavaScript.

Si je peux me permettre, je ne pense que tu as un gros problème de conception, parce que servir une page Web depuis un Arduino l'est pas vraiment l'idée du siècle.

+1, pour un tas de raisons, en particulier :

  • je ne sais pas comment est fait le serveur, mais la lib est probablement d'une taille non négligeable ;
  • vu la lourdeur de HTTP, ce n'est pas du tout le truc rêvé pour piloter un drone (et d'ailleurs, comment fonctionne la connexion?).
Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte