Web SD e funzioni INPUT-OUPUT

Ciao eccomi qui ad aprire un topic che sarà gia stato aperto da molti altri ma come buona norma del forum ho già setacciato l’intera rete web dai Blog, alle immagini,google si rifiuta di leggere le parole Web-server SD…etc…etc… e purtroppo non sono ancora riuscito a capire ( perchè le cose vanno capite) il metodo per interfacciare un file index.htm residente su SD scheda ethernet e lo sketch per eseguire un web-server semplice con funzioni di input-output e magari un valore di temperatura…

Vi metto a conoscenza del fatto che tra i mille esempi trovati e provati almeno l’80% fà uso di librerie esterne quali tinyWebserver,Webduino e ancora altre che non ricordo…io vorrei scrivere lo sketch usando l’Arduino1 con la shield Ethernet e scheda SD senza uso di librerie proprio per capire il modo per interpretare i dati su Scheda SD all’ arduino…

Allego codice sketch per il momento funzionante che mi fà vedere solamente la pagina WEB su PC con n.2 Button creati con l’utility webJquery e chiaramente l’intento sarebbe quello di far accendere un relè per ogni button con i comandi ON-OFF…

#include <SPI.h>
#include <Ethernet.h>
#include <SD.h>
 
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
byte ip[] = { 192,168,2, 130 };
File htmlFile;
Server server(80);
byte BYTE ;
 
void setup()
{
  Ethernet.begin(mac, ip);
  server.begin();
  if (!SD.begin(4)) { return; }
}
 
void loop()
{
  Client client = server.available();
  if (client) {
    boolean currentLineIsBlank = true;
    while (client.connected()) {
      if (client.available()) {
        char c = client.read();
        if (c == '\n' && currentLineIsBlank) {
          client.println("HTTP/1.1 200 OK");
          client.println("Content-Type: text/html");
          client.println();
 
          htmlFile = SD.open("index.htm");
          if (htmlFile) {
            while (htmlFile.available()) {
                client.print(htmlFile.read(), BYTE);
            }
            // close the file:
            htmlFile.close();
          }
          break;
        }
        if (c == '\n') {
          currentLineIsBlank = true;
        }
        else if (c != '\r') {
          currentLineIsBlank = false;
        }
      }
    }
    delay(1);
    client.stop();
  }
}

Insieme allego la pagina WEB “index.htm”

<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <meta name="viewport" content="initial-scale=1.0, user-scalable=no">
  <meta name="apple-mobile-web-app-capable" content="yes">
  <meta name="apple-mobile-web-app-status-bar-style" content="black">
  <title></title>
  <link rel="stylesheet" href="https://d10ajoocuyu32n.cloudfront.net/mobile/1.3.1/jquery.mobile-1.3.1.min.css">
  
  <!-- Extra Codiqa features -->
  <link rel="stylesheet" href="codiqa.ext.css">
  
  <!-- jQuery and jQuery Mobile -->
  <script src="https://d10ajoocuyu32n.cloudfront.net/jquery-1.9.1.min.js"></script>
  <script src="https://d10ajoocuyu32n.cloudfront.net/mobile/1.3.1/jquery.mobile-1.3.1.min.js"></script>

  <!-- Extra Codiqa features -->
  <script src="https://d10ajoocuyu32n.cloudfront.net/codiqa.ext.js"></script>
   
</head>
<body>
<!-- Home -->
<div data-role="page" id="page1">
    <div data-role="content">
        <div data-role="fieldcontain">
            <fieldset data-role="controlgroup" data-type="horizontal">
                <legend>
                    LUCI
                </legend>
                <input id="radio2" name="LUCI" value="radio1" type="radio">
                <label for="radio2">
                    ON
                </label>
                <input id="radio3" name="LUCI" value="radio2" type="radio">
                <label for="radio3">
                    OFF
                </label>
            </fieldset>
        </div>
        <div data-role="fieldcontain">
            <fieldset data-role="controlgroup" data-type="horizontal">
                <legend>
                    Caldaia
                </legend>
                <input id="radio5" name="Caldaia" value="radio3" type="radio">
                <label for="radio5">
                    ON
                </label>
                <input id="radio6" name="Caldaia" value="radio4" type="radio">
                <label for="radio6">
                    OFF
                </label>
            </fieldset>
        </div>
    </div>
</div>
</body>
</html>

Ora qual’è il modo più semplice per scrivere degli script per far interagire i due codici tra di loro ??
Ringrazio in anticipo per le risposte e magari per qualche esempio da studiare…grazie

Allora non ti è chiaro cosa sono le librerie e a cosa servono

Caro Pablos io ti stimo e ti apprezzo per quello che scrivi sul forum e speravo che mi rispondessi proprio tu che ne sai tanto sull'Arduino e il Web ma certe volte non capisco xchè sul forum se si effettua una richiesta precisa e dettagliata così come ho cercato di fare con tutte le premesse possibili poi l'unica risposta che ottengo è del tipo ...vabbè ma allora non hai capito niente....

Chiaramente non me la prendo per questo tipo di cose ma se ho effettuato una domanda ben specifica è xchè con la risposta ad essa io devo chiarire e imparare i concetti ancora non assimilati da me ed essendo su un forum di natura open source cercare di aiutare tante altre buone anime che vogliono fare la stessa cosa che voglio fare io ...ora le librerie io le conosco ma certamente non le ho scritto io e per tale motivo volevo "capire" e "imparare" i concetti per far interpretare i dati dalla scheda SD allo sketch Arduino...e poi una volta assimilate le basi con degli esempi e qualche informazione didattica continuare con l'ausilio delle librerie che certamente semplificano l'apprendimento ma non chiariscono i "concetti"...

Ora una cosa è certa che io mi ritrovo allo stesso punto di ieri e magari con qualche aiuto e esempio didattico avrei materiale su cui lavorare...nel frattempo googlo ancora un'altro pò ma invano...grazie Pablos...

pietro78: ...ora le librerie io le conosco ma certamente non le ho scritto io e per tale motivo volevo "capire" e "imparare" i concetti per far interpretare i dati dalla scheda SD allo sketch Arduino...e poi una volta assimilate le basi con degli esempi e qualche informazione didattica continuare con l'ausilio delle librerie che certamente semplificano l'apprendimento ma non chiariscono i "concetti"... ...

Pietro, ma ti rendi conto cosa vorrebbe dire NON usare le librerie del TCP/IP e scriverti tu a manina tutta le gestione partendo da zero ??? :astonished:

Ci sono cose per cui il tuo ragionamento è corretto, ma altre che invece inizialmente devi "prendere per buone" ed usare così come sono per portare a termine un progetto. Poi, se uno ha tempo, si può mettere anche a vedere come quelle librerie sono fatte e magari, anche migliorarle ... ma buttare tutto e partire da zero ... mi sembra follia :)

Guglielmo

Ciao Pablos grazie per la preziosa risposta e ti rispondo solo oggi perchè nel frattempo sono diventato Papà…( a proposito nel forum non c’è una sezione per le notizie interne ??? :grin: :grin: ) e volevo provare le due librerie…ho provato con la webduino e ho visto che c’è una variante WebduinoSD ma non è “ufficiale” …

E’ possibile riuscire a far girare la pagina html che ho postato attraverso uno sketch d’esempio con le librerie Webduino o tiny per far sì che io capisca come si ottenga che a pulsante premuto io accendo un led e poi lo spengo ??
Consigliatemi quale tra le due librerie è la migliore per gestire questo tipo di pagina html e come modificarla per far girare il tutto con lo sketch arduino…vi ringrazio in anticipo…