[help] Soulager Arduino Page Web

Salut salut :slight_smile:

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 :frowning:

Amicalement,
trigger

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

Merci pour ta réponse :slight_smile:

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 :slight_smile:

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 :frowning:

Amicalement,
Trigger

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é.

++

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

++

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, ...

Bonsoir à tous :slight_smile:

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

Quelqu'un a avancé sur le sujet ?

j'aie utilisé un serveur pour héberger une simple page html qui regroupe les boutons

<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

<?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 :smiley:

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

#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>");
}

Merci ArtBotHack de ton aide.

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

il a juste fallu que je rajoute à ton code

#include <SPI.h>

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

A+ et bon dimanche

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

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

Encore merci
Amicalement,
Trigger

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 :slight_smile:

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 :

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

Merci d'avance :wink:

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

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 :frowning:

pourtant :

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

Une idée ?

Amicalement,
Trigger

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++

Merci à ArtBotHack pour sa super contribution.

J'ai testé => cela fonctionne très bien.

J'ai deux questions de néophyte :

  1. si l'on veut commander plusieurs sorties, les modifs sont-elles complexes ?
  2. pour lire les états d'entrées logiques, ou pour transmettre des valeurs dans le sens arduino => serveur web (par exemple affichage température), quelles fonctions utiliser ?

Bien à vous

ou pour transmettre des valeurs dans le sens arduino => serveur web (par exemple affichage température), quelles fonctions utiliser ?

Tu trouveras une base de code ici : http://www.jfkreuter.com/?p=9

++

Merci, je vais tester cela dès que j'ai un moment.

Bonjour je cherche aussi un communication bi directionelle avec un serveur php.

En gros Navigateur Utilisateur<=>serveur php <=> arduino.

Par exemple, une page sur laquelle je peux monitorer la température d'une pièce et sur laquelle je puisse lancer l’allumage de la lumière ou du chauffage...

Je n'arrive pas, pour le moment à utiliser une méthode pour transmettre des info (variables...) à mon serveur php afin qu'il les affichent et dans l'autre sens, suite à un retour de page du client, que mon serveur envoi des commandes de modification de valeurs (variables) pour des sortie.
J'arrive à faire afficher des entrées sur une page générée par mon arduino (accès à l'arduino par son ip)
J'arrive à envoyer des info à l' arduino par UDP (mais pas de retour...).
Mais impossible d'avoir du bi directionnel "réel"...

L'utilisation d'un socket d’échange me plait beaucoup, l'utilisation de page on off etc n'est pas viable à mon avis car si l'on a X capteurs et Y actionneur il faut autant de "pages" ce qui n'est pas propre et lisible...
Je tiens vraiment à utiliser mon serveur php pour échanger par ethernet avec l'arduino et éviter ainsi la génération des page à ce dernier car je voudrais gérer une partie graphique lourde avec les valeurs récupérée de l'arduino...

Si quelqu'un à une solution, je suis preneur!
@++

legeantvert:
Mais impossible d'avoir du bi directionnel "réel"...

J'avais un projet d'utilisation des websocket et arduino, mis en pause en raison de la non finalisation de la norme qui ne devrait tardé ... :cold_sweat:
http://arduino.cc/forum/index.php/topic,72035.0.html

Au final j'ai également donné un exemple de la solution de chesnel version tcp.