Aiuto...pagina html in 3G perdo dei pezzi

Ho finalmente creato un semplice sistema di controllo remoto di n.2 relè da pagina web con Arduino 1 e scheda ethernet…

Tutto ok…funziona con libreria webserver e se provo il collegamento in rete locale con wi-fi da pc o Smartphone i comandi rispondono benissimo e non perdo un colpo…

Il problema nasce quando aihmè provo un collegamento dallo smartphone con connessione 3G (“H”) …in pratica l’Arduino mi risponde ai comandi ma durante il ricaricamento della pagina html si perde dei pezzi ed è molto fastidioso…da cosa può dipendere ???
Per favore aiutatemi… Allego sketch e immagine della pagina HTML…
In più se potete farmi il favore di provare anche voi stessi da questo link http://arduinocasa.dyndns.org:81/ così da potermi dire se il problema lo fà anche da voi…

Sketch… lo allego nel prossimo post…per motivi di spazio…

Allego lo sketch…

//======================================= ARDUINO ETHERNET CONTROLLO N.2 USCITE da remoto======================================================
//=============================================================================================================================================
#include <Ethernet.h>
#include <SPI.h>
#include <WebServer.h> //libreria webduino


//variabili statiche per il mac address e ip address
static byte mac_Add[] = {0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };

//cambiare l'ip in funzione della propria rete
static byte ip_Add[] = { 192, 168, 0, 177 };

//creazione oggetto Webduino
WebServer webserver ("", 81);  //originale



//Variabili booleane che memorizzano lo stato delle uscite collegate ai relè
boolean Rele5 = false;
boolean Rele6 = false;
const float rinfinit = 93.79645; // Costante calcolata
const float voltage = 5.0; // il valore della tensione Vcc cui è collegato il termistore
const float B = 4120; // valore specificato nel data sheet del termistore 4100
const float unodivr = 93.79645; // equivalente a infinito
const float resistor = 10000; // il valore della resistenza fissa
int sensorValue = 0; // variabile per memorizzare il valore letto

//=============================================================================================================================================
//funzione pagina Start
void Start(WebServer &server, WebServer::ConnectionType type,
char *url_param, bool param_complete)
{
//===restituisce al browser l'intestazione http 200 OK=========================================================================================
  server.httpSuccess();

//=============================gestisco il tipo di richiesta HEAD==============================================================================
  if (type != WebServer::HEAD)
  {
    String s = "";

    if (param_complete == true)
    {
      s = url_param;

      if ( s == "R5=ON")
      {
        Rele5 = true;
        digitalWrite(7, HIGH); 
      }
      else if ( s == "R5=OFF")
      {
        Rele5 = false;
        digitalWrite(7, LOW); 
      }

      if ( s == "R6=ON")
      {
        Rele6 = true;
        digitalWrite(9, HIGH);
      }
      else if ( s == "R6=OFF")
      {
        Rele6 = false;
        digitalWrite(9, LOW);
      }
      
      

    }
   
//=================gestisco la pagina html in base allo stato delle uscite di Arduino==========================================================
    P(htmlHead) =
      "<html>"
      "<head>"
      "<title>Arduino Scheda 4.1 Rele</title>"
      "</head>"
      //"<div style=\"margin 0 auto; width=\100%;>"
      //"<div style=\"auto >"
      //"<body bgcolor=#666666>";
      "<body bgcolor=#000055>";
    
   

    server.printP(htmlHead);
    //server.print("<table border=\"30\"width=\"800\"  align=\"center\">");
    server.print("<table border=\"40\"bordercolor=\"#0000CC\"width=\"800\"  align=\"center\">");
    server.print(F("<tr><td style=\"color: blue;background: #ABCDEF;\"valign=\"middle\"><h1>STATO APPARATI</h1></td>"));
    server.print(F("<td style=\"color: blue;background: #ABCDEF;\"valign=\"middle\"><center><h1>COMANDI</h1></center></td></tr>"));
    //server.print("
<p align=\"center\"><img src=\"http://imageshack.us/a/img12/6410/home1fn.jpg\" width=\"800\"></p>

");
    server.print("
<p align=\"center\"><img src=\"http://imageshack.us/a/img12/6410/home1fn.jpg\" width=\"700\"></p>

");
    
    
    
    
//====================CREO PULSANTE PER LA CALDAIA=============================================================================================

    if(Rele5 == true)
     server.print(F("<tr><td style=\"color: red;background: #99CC33;\" valign=\"middle\" ><h1>Caldaia ACCESA </h1></td><td>"));
     
    else
     server.print(F("<tr><td style=\"color: black;background: #E4E4E4;\" valign=\"middle\" ><h1>Caldaia SPENTA</h1></td>"));
     

    if(Rele5 == false)
      
      server.print(F("<td style=\"color: black;\"background: #E4E4E4; valign=\"middle\" ><h1><center><input type=\"button\"style=\"width:320px; height:100px; background-color: #E4E4E4;\" value=\"CLICCA QUI\"onclick=\"location.href='index.htm?R5=ON'\"></center></h1>"));

     else
      
      server.print(F("<h1><center><input type=\"button\"style=\"width:320px; height:100px; background-color: #99CC33;\"  value=\"CLICCA QUI\"onclick=\"location.href='index.htm?R5=OFF'\"></center></h1>"));
      server.print("</td></tr>");

      
//======================CREO PULSANTE PER IL CLIMATIZZATORE=====================================================================================
    if(Rele6 == true)
     server.print(F("<tr><td style=\"color: red;background: #99CC33;\" valign=\"middle\" ><h1>Clima ACCESO</h1></td><td>"));
     
    else
     server.print(F("<tr><td style=\"color: black;background: #E4E4E4;\" valign=\"middle\" ><h1>Clima SPENTO</h1></td>"));

    if(Rele6 == false)
      server.print(F("<td style=\"color: black;\" valign=\"middle\" ><h1><center><input type=\"button\"style=\"width:320px; height:100px; background-color: #E4E4E4;\" value=\"CLICCA QUI\"onclick=\"location.href='index.htm?R6=ON'\"></center></h1>"));
      
    else
      server.print(F("<h1><center><input type=\"button\"style=\"width:320px; height:100px; background-color: #99CC33;\"  value=\"CLICCA QUI\"onclick=\"location.href='index.htm?R6=OFF'\"></center></h1>"));
      server.print(F("</td></tr>"));

//=========================CREO STRINGA PER TEMPERATURA + FUNZIONE LETTURA TEMPERATURA ANALOG-READ=================================================================================
    
    
    server.print(F("<tr><td style=\"color: black;background: #FF9933;\" valign=\"middle\" ><h1>Temp.Attuale</h1></td>"));
    server.print(F("<td style=\"color: black;background: #FF9933;\" valign=\"middle\" ><center><h1>"));
    //server.print(F("<font>La temperatura è di </font>"));
    int analogChannel = 1;
    sensorValue = analogRead(analogChannel); // Inizio Funzione di lettura tempeartura
    float v2 = (voltage*float(sensorValue))/1024; //Calcolo tensione sul termistore
    float r1a = (voltage*float(resistor))/v2;
    float r1 = r1a - resistor; //calcolo della reale resistenza del termistore, che varia con la temperatura
    float T = B/log(r1*unodivr); //log in arduino significa logaritmo naturale!
    T=T-273.15;
    server.print(T);
    server.print(F("<font> °C  </font>"));
    server.print(F("</h1></center></td></tr>"));
    
//=========================CREO PULSANTE PER AGGIORNARE=================================================================================
        
    
    server.print(F("<tr><td style=\"color: #007FFF;background: #E4E4E4;\"valign=\"middle\"><h1>AGGIORNA STATO</h1></td>"));
    //server.print(F("<td style=\"color: black;background: #E4E4E4;\" valign=\"middle\" ><h1><input type=\"button\" value=\"AGGIORNA\"onclick=\"location.href='index.htm?'\"></h1>"));
    server.print(F("<td style=\"color: black;\"background: #E4E4E4; valign=\"middle\" ><h1><center><input type=\"button\"style=\"width:320px; height:100px; background-color: #E4E4E4;\" value=\"CLICCA QUI\"onclick=\"location.href='index.htm?'\"></center></h1>"));
    
//==============================================================================================================================================

    server.print(F("</td></tr>")); 
    server.print(F("</table>")); // chiudo la tabella
    
    server.print(F("<font style=\"color: white;\"><center><h3> EASY TECH Via Ramiro Ortiz, 26 - 66100 Chieti srl v-1.4</h3></center>"));
    //server.print(F("<center><h3><a href=\"http://www.easytech-srl.com\" target=\"_blank\"><font style=\"color: white;\">Visita il sito WEB</a></h3></center>"));
    server.print(F("</body></html>")); // chiudo il file html web page
    
  }
  
  delay(50);
}
//=================================SETUP  E LOOP ==================================================================================================

void setup()
{
  
  
  //inizializzo l'ethernet shield con il mac e il address
  Ethernet.begin(mac_Add, ip_Add);
  Serial.begin(9600); 

  //definisci l'azione di default che verrà eseguita quando l'utente
  //naviga nella root del sito
  webserver.setDefaultCommand(&Start);
  webserver.addCommand("index.htm", &Start);

  //avvia il web server
  webserver.begin();

  delay(100);

  //definisci i pin 3 5 7 9  in uscita
  pinMode(4, OUTPUT);
  pinMode(10, OUTPUT);
  pinMode(3, OUTPUT);
  pinMode(5, OUTPUT);
  pinMode(7, OUTPUT);
  pinMode(9, OUTPUT);

  //inizializza i le uscite
  digitalWrite(3, LOW);
  digitalWrite(5, LOW);
  digitalWrite(7, LOW);
  digitalWrite(9, LOW);
  digitalWrite(4, HIGH);
  digitalWrite(10, HIGH);
  

}

void loop()
{
  webserver.processConnection();
}

pietro78:
...
In più se potete farmi il favore di provare anche voi stessi da questo link http://arduinocasa.dyndns.org:81/ così da potermi dire se il problema lo fà anche da voi...
...

Ho provato varie volte il link e ... non riscontro alcun problema, la pagina viene caricata sempre correttamente ... :roll_eyes:

Guglielmo

Ho provato varie volte il link e ... non riscontro alcun problema, la pagina viene caricata sempre correttamente ...

Guglielmo

Ciao Guglielmo...grazie ma hai provato con uno smartphone o tablet in 3G ??

Scusa se te lo chiedo ma con connessioni adsl funge...siccome da casa mia posso provare solo con il mio smarphone 3G almeno con quello fà le bizze...ovvero al primo caricamento la pagina appare intera ma poi se si danno dei comandi tipo "accendi clima" la pagina quando si ricarica si perde il tag che mostra la temperatura oppure la scritta in fondo in bianco...ho provato anche con diversi browser sullo smartphone (Android) tipo firefox ma ho lo stesso identico problema...aspetto lumi...grazie intanto...

Usa la macro F() per tenere i testi fissi nella flash e non nella RAM
per essempio scivi al posto di:
server.print("<table border=“40"bordercolor=”#0000CC"width=“800” align=“center”>");
questo
server.print(F("<table border=“40"bordercolor=”#0000CC"width=“800” align=“center”>"));

vedo che in parte l’ hai fatto e in parte no.

Ciao Uwe

pietro78:
...
Ciao Guglielmo...grazie ma hai provato con uno smartphone o tablet in 3G ??
...

Stranissimo ... con il WiFi va che è una bellezza, con il 3G ... neanche mi carica la pagina ... molto strano ... :astonished:

Guglielmo

P.S. : Qui da me non ho un segnale fortissimo sul 3G .. domani esco e faccio qualche altra prova dove ho segnale pieno ...

Ho provato anch'io con lo smartphone android.... cosa intendi per perdere i pezzi ?
visualizzo 2 tasti verdi "clicca qui" in alto fuori dalla schermata blu.

gpb01:
P.S. : Qui da me non ho un segnale fortissimo sul 3G .. domani esco e faccio qualche altra prova dove ho segnale pieno ...

Guglielmo ... se domani esci cerca e ricerca, però ricorda ... è già difficile trovare un solo punto G, figurati 3G :smiley: :smiley: :smiley:

ciao

Ciao Pablos…se ci sei riprova adesso perchè ti ho sentito mentre smanettavi sui due relè…
Comunque vedevi i due tasti verdi fuori dalla schermata blu perchè avevo provato a cambiare lo sketch…nada…

Il problema Pablos è che da remoto con pc smartphone in wi-fi o cablata funge…è invece con lo smartphone con rete 3G che se fai due o tre manovre sui pulsanti s’impappina l’impaginazione html (spero di aver detto una cosa esatta)…puoi riprovare quando vuoi…cosa può essere ??? =( =( =(

adesso pare vada bene .... i quadratini sono al loro posto, diventano verdi quando sono ON e bianchi quando sono OFF

adesso pare vada bene … i quadratini sono al loro posto, diventano verdi quando sono ON e bianchi quando sono OFF

Caro Pablos …sono curioso e se mi puoi far sapere…hai provato da un telefono smartphone con connessione da rete mobile ??

I quadratini funzionano sempre e si colorano ma sul mio Galaxy S Advance (android) quando mi collego in 3G se faccio delle manovre sui pulsanti loro si colorano e OK …ma ad esempio se clicco sul pulsante Caldaia esso diventa verde ma all’aggiornamento della pagina mi scompare la riga in fondo “aggiorna Stato” e anche la riga sottostante in minuscolo bianca…poi magari dopo qualche on-OFF successivo mi riappaiono come per incanto…
Magari potrebbe essere il mio smartphone che ha dei problemi…perciò volevo capire se qualcuno di voi abbia provato con apparati mobili quali tablet,telefoni 3G…grazie per le risposte…oppure come potrei risolvere il fastidioso aggiornamento della pagina ad ogni manovra di ON-OFF ??
Pietro

si ho provato da uno smartphone in 3G, cosa può essere non saprei, la webduino la conosco solo per metà essendo una derivata della tinyweb e non l’ho mai usata, il vantaggio del fastidioso refresh con la tinyweb non ce l’hai, non aggiorna la schermata intera ma solo gli oggetti interessati anche se si opera da più client, lo svantaggio è che impegna molto il server come detto in altri post, ora sto lavorando su aggiornamenti tramite socket tcp/ip e porte dedicate vediamo cosa ne esce fuori

ciao

Ulteriore tentativo...ho provato lo stesso codice Sketch su un Arduino Mega...stesso problema...

Ma mi chiedo è possibile che non si riesce a trovare una guida o un tutorial che funzioni al 100 % su un WEB-SERVER con Arduino e scheda wiz-net e un minimo di grafica carina da poter implementare e una libreria decente che non abbia bug...anche perchè se così fosse come faccio a capire dove intervenire sulla libreria Webduino ???

Accidenti ci ero quasi riuscito...e mi ha fermato il 3G...queste cose mi fanno incacchiare molto... ]:slight_smile: ]:smiley: :stuck_out_tongue_closed_eyes:
Aspettiamo i luminari del web...

Non ben capito quale sia il problema che riscontri, se sono errori di visualizzazione o cosa, ma non credo sia un problema di libreria

La tua pagina html inizia con

<html>
<head>
<title>Arduino Scheda 4.1 Rele</title>
</head>
<body bgcolor=#000055><table border="40"bordercolor="#0000CC"width="800"  align="center"><tr>
ecc
ecc

Tutti gli editor inizializzano in automatico il testo quando vai a creare un nuovo doc, se noti tutte le pagine html iniziano con la formattazione tipo

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"><head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<meta name="description" content="Italiano" />
ecc
ecc

tra l’altro se copio la tua html page su un editor si evidenziano diverse parti in rosso che sono errori

Ha ragione Pablos.
Ho dato un’occhiata all’HTML e mi sono saltati all’occhio 3 errori.

  • 1 ) Apri un TD senza prima aprire il TR
  • 2 ) Non chiudi i tag H TD e il TR ne la TABLE
  • 3 ) non chiudi con il tag ne

Allego in allegato i problemi.

edit
Però ho visto che a volte lo fa a volte no :astonished:

riedit
Ci sono parecchi errori di sintassi. Per esempio:

<body style="bgcolor="#000055"width="80%" height="70%">

va corretto con:

<body style=bgcolor="#000055" width="80%" height="70%">

Ok, testa la pagina con questo http://validator.w3.org/

Ti dice gli errori dell pagina…

I diversi browser reagiscono diversamente a dei errori di sintassi delle tabelle. Forse per questo hai diversi sintomi con diversi dispositivi perché hai diversi browser.

Metti a posto il codice HTML

e seguenti

Ciao Uwe

puoi fare una foto di quello che vedi sul display, per fare lo screen del samsung devi premere contemporaneamente il tasto dello spegnimento e quello del menù centrale, la procedura non dovrebbe richiedere i diritti di ROOT.