Go Down

Topic: [help] Soulager Arduino Page Web (Read 5043 times) previous topic - next topic

trigger

Salut salut :-)

Je fais tourner un petit projet de domotique basé sur un Arduino Meag + Ethernet Shield et tout se passe plutôt bien sauf que souhaiterais alléger un peu la somme de travail que je demande a l'arduino ...

Sans trop entrer dans les détails qui vont barber la majorité d'entre vous xD
Je piloter des relays, ma télé ^^, envoie message twitter, capter la température ... via une page web

En effet l'arduino fait absolument tout : acquisition, hébergement des pages web, traitement des données ...

Je souhaiterais donc savoir si il est possible de soulager ?

Il y a beaucoup d'idée sur internet mais pas vraiment de tuto :S
Quelqu'un aurait une petite idée, VB, HTML/PHP ?

Je suis un petit nooby dans le domaine du dev web :(

Amicalement,
trigger

churchill

Hello,
Cela ne va pas être facile avec peu de détails.
Mais sinon, le principe est de faire faire le maximum de traitement au client (javascript) et d'alléger tes pages au maximum (html "light" + css).
churchill

trigger

Merci pour ta réponse :)

Mon code fait 1572 lignes alors je ne vais pas tout poster ^^

Voici les grandes lignes :

J'accède à une page web via mon navigateur ( l'arduino gère très bien le html par conte ^^).
Suivant les click sur les différents boutons des pages il y a telle ou telle réactions de l'arduino :)


Je sais les explications c'est pas mon fort :S

Une piste pour le Java/HTML/CSS

J'ai bien trouvé http://blog.weeboo.net/tutoriel-arduino-ethernet-shield-controler-led-depuis-une-page-web/ mais impossible depuis deux jours de le mettre en place :(

Amicalement,
Trigger

Michel_B

Quote
J'ai bien trouvé http://blog.weeboo.net/tutoriel-arduino-ethernet-shield-controler-led-depuis-une-page-web/ mais impossible depuis deux jours de le mettre en place


Interessant tout ça, j'essayerais demain pour voir ce que cela donne de mon côté.

++

Michel_B

Je viens de terminer, pour le moment ce n'est pas très concluant.
Du coté PHP tout fonctionne par contre rien au niveau de la sortie de l'arduino.

Je continuerais ce soir

++

osaka

Yop,
L'erreur ou le problème le plus souvent rencontré (constaté) sont souvent du au routage et non au code, donc je sais pas si ça peut venir de là mais bien faire attention à la redirection des ports, etc, ...

trigger

Bonsoir à tous :)

Je me suis donc mis a potasser le site du zéro niveau PHP et je sens que cela va etre un peu coton ^^

Merci à tous de tester les codes a droites a gauche parce que je perdais un peu espoir ^^


Amicalement,
trigger

Michel_B

Quelqu'un a avancé sur le sujet ?

ArtBotHack

#8
Feb 12, 2012, 09:28 am Last Edit: Feb 12, 2012, 10:17 am by ArtBotHack Reason: 1
j'aie utilisé un serveur pour héberger une simple  page html  qui regroupe  les boutons

Code: [Select]
<a href="off.php"><img src="image/off.gif" alt="off" width="32" height="32" border="0" align="middle" /></a> //bouton off
<a href="on.php"><img src="image/on.gif" alt="on" width="32" height="32" border="0" align="middle" /></a>//bouton on


elle appele une page en php (ici  soit on.php soit off.php )   qui ouvre des pages sur arduino 
code page on.php
Code: [Select]
<?php 
$homepage 
fopen("http://xx.xxx.xxx.xxx/on/","r");// ouvre la page on sur arduino    xx.xxx.xxx.xxx= ip arduino
header("Location: http://www.url.com"); // retourne  sur la première page des boutons 
?>


bien sur on fait une autre page pour off
pas coton   :D

le simple fait d'ouvrir une page entraine une une action d' arduino   "on"  et "off"


Code: [Select]

#include <Ethernet.h>
#include <TextFinder.h>
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };// connexion mac
byte ip[] =  { xxx,xxx,x,xx };//  connexion ip
byte gateway[] = { xxx,xxx,x,xxx };//connexion gateway
byte subnet[] = {xxx,xxx,xxx,x  };  // connexion subnet
char buffer[8];// pour le nom de la page
Server server(xx);//port
int pinled =5;
void setup()
{ Serial.begin(9600);
  Ethernet.begin(mac, ip , gateway, subnet);
  server.begin();
  Serial.println("ok-pret");
}
void loop()
{
pinMode(pinled,OUTPUT);
  Client client = server.available();
  if (client) {
    TextFinder  finder(client );
    while (client.connected()) {
      if (client.available()) {
        if( finder.find("GET ") ) {
          // look for the page name
          if(finder.getString( "/", "/", buffer, sizeof(buffer) ))
          {
            if(strcmp(buffer, "on") == 0)
              showOn(client);
            else if(strcmp(buffer, "off") == 0)
              showOff(client);
else
              unknownPage(client, buffer);
          }
        }
        Serial.println();
        break;
      }
    }
   
    delay(1);
    client.stop();
  }
}

void showOn(Client client)
{
  Serial.println("on");
  sendHeader(client);
  client.println("on");
digitalWrite(pinled, HIGH);
}

void showOff(Client client)
{
  Serial.println("off");
  sendHeader(client);
  client.println("off");
digitalWrite(pinled, LOW);
}

void unknownPage(Client client, char *page)
{
  Serial.print("Unknown : ");
  Serial.println("page");

  sendHeader(client);
  client.println("<h1>Unknown Page</h1>");
  client.println(page);
  client.println("</body></html>");
}

void sendHeader(Client client)
{
 
  client.println("HTTP/1.1 200 OK");
  client.println("Content-Type: text/html");
  client.println();
  client.println("<html><head><title>Web server on off</title>");
  client.println("<body>");
}




arduino processing http://www.ebooki.fr

Michel_B

Merci ArtBotHack de ton aide.

Ton exemple fonctionne, je vais pouvoir m'en inspirer.

il a juste fallu que je rajoute à ton code
Code: [Select]
#include <SPI.h>

Je reviens un plus tard avec d'autres questions, dans un nouveau post je pense  :)

A+ et bon dimanche

trigger

Bonjour à tous,
merci beaucoup pour le code qui, je pense, va inspirer pas mal de monde :)

Je bricole ça et reviendrais surement avec des questions :p

Encore merci
Amicalement,
Trigger

Michel_B

Bonjour,

Tu peux me détailler ces lignes de ton code, j'ai du mal à comprendre.
Je vois bien que l'on recherche les caractères "on" ou "off" mais si tu pouvais détailler chaque ligne ce serait bien  :)

Quote
if (client) {
    TextFinder  finder(client );
    while (client.connected()) {
      if (client.available()) {
        if( finder.find("GET ") ) {
          // look for the page name
          if(finder.getString( "/", "/", buffer, sizeof(buffer) ))
          {
            if(strcmp(buffer, "on") == 0)
              showOn(client);


et dans le php pourquoi le "r" à la fin :

Quote
fopen("http://192.168.0.20/on/","r")


Merci d'avance ;)

ArtBotHack

bonjour,

TextFinder  sa aide à parser  les résultats :
http://www.arduino.cc/playground/Code/TextFinder

pour la fonction : php fopen accède à une ressource (un fichier... une page web ici)
r  indique l'accès en  lecture seule...
http://php.net/manual/fr/function.fopen.php
arduino processing http://www.ebooki.fr

trigger

Bonjour tout le monde :=)

Je reviens vers vous car je tourne en rond depuis un moment et cela me tracasse quelque peu ...
Suite à la lecture de ce super tuto je ne suis toujours pas en mesure de faire communiquer l'Arduino avec ma page web :(

pourtant :
- installation de wamp Ok
- Copie des fichiers avec modification des ports et ip Ok
- Affichage du slider Ok en passant par http://localhost/test/index.php

mai il n'y a aucune communication et le Serial ne bouge pas

Une idée ?

Amicalement,
Trigger

ArtBotHack

bonjour,
dans mon exemple c'est la page web qui communique avec ardunio et non le contraire !
client(navigateur) <=>serveur web(page php)=>serveur(arduino)
rien ne "remonte"  d'arduino
si la  communication bug le fopen du php donne une erreur (la page php n'ouvre pas  la page arduino )

envoie ton code

A++
arduino processing http://www.ebooki.fr

Go Up