Show Posts
Pages: [1] 2 3
1  Using Arduino / Programming Questions / Re: output temperature with TinyWebServer on: May 26, 2013, 05:21:52 am
thank you for the answer,
 but that isn't using the sd and not even the tinywebserver lib. in that way it's simple.
2  Using Arduino / Programming Questions / Re: output temperature with TinyWebServer on: May 25, 2013, 09:50:04 am
up smiley-red
3  Using Arduino / Programming Questions / Re: output temperature with TinyWebServer on: May 24, 2013, 04:24:31 pm
i'm just missing this part, on how to output from Arduino to the browser. the i see the html , i cam read from the html to arduino but i need help on how to let the browser read the temperature. i said the interested part is the function "temp_handler"
then maybe even the html part is wrong.
4  Using Arduino / Programming Questions / output temperature with TinyWebServer on: May 24, 2013, 03:34:38 pm
hello,
I have my index on the sd (using the ethernet shield + atmega2560) i want to output the temperature to my browser
here is my arduino code ("temp_handler" is the function that I'm asking about, "20" is a value just to try it out )
Code:
#include <string.h>
#include <pins_arduino.h>
#include <SPI.h>
#include <Ethernet.h>
#include <Flash.h>
#include <SD.h>
#include <TinyWebServer.h>



//LEDS
const int ledPin =  3;
int ledState = LOW;

//****************VALUES YOU CHANGE*************/
//byte ip[] = { 192, 168, 0, 12 };// Don't forget to modify the IP to an available one on your home network
byte ip[] = { 192, 168, 0, 10 };// Don't forget to modify the IP to an available one on your home network
//*********************************************/

static uint8_t mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };

 TinyWebServer::PathHandler handlers[] = {
  {"/", TinyWebServer::GET, &index_handler},
  {"/upload/" "*", TinyWebServer::PUT, &TinyWebPutHandler::put_handler },
  {"/RICEVI", TinyWebServer::POST, &riceve_handler},
  {"/" "*", TinyWebServer::GET, &file_handler},
  {"/TEMP", TinyWebServer::GET, &temp_handler },
  {NULL},
};

const char* headers[] = {"Content-Length",NULL};
TinyWebServer web = TinyWebServer(handlers, headers);

boolean has_filesystem = true;
Sd2Card card;
SdVolume volume;
SdFile root;
SdFile file;

//_________________________________________________________________________________________________________________________________________________________________________
boolean riceve_handler(TinyWebServer& web_server)
{  
      web_server.send_error_code(200);
      web_server.send_content_type("text/plain");
      web_server.end_headers();
      Client& client = web_server.get_client();
                
    if (client.available())
    {
      String readString;
      int16_t c;  
      String led1_on="led1_ON#";
      String led1_off="led1_OFF#";
      
       while ((c = client.read())>0)
       {
         readString += (char)c;
         if(c=='#'){          
         Serial.println (readString);  //debug
         //------------------------------------
         //qui elabori la stringa in arrivo
         if(readString==led1_on){
             digitalWrite(ledPin, HIGH);
             Serial.println ("accendo");
           }
          if(readString==led1_off){
             digitalWrite(ledPin, LOW);
             Serial.println ("spengo");
           }
          
         //-----------------------------------
            
         //svuoto la stringa dopo aver incontrato # ... in questo modo la massima lunghezza di  readString
         //sara di 255.255.255.255# quindi 16 char, si evita di crashare arduino a causa di un eventuale
         //saturazione della ram
         readString="";
         }            
       }
      
        readString=""; //svuota la stringa del client.read  
    }
  
      client.stop();  
}

//_________________________________________________________________________________________________________________________________________________________________________
void send_file_name(TinyWebServer& web_server, const char* filename) {
//Serial.print ("1");
  if (!filename) {
    web_server.send_error_code(404);
    web_server << F("Could not parse URL");
  } else {
    TinyWebServer::MimeType mime_type
      = TinyWebServer::get_mime_type_from_filename(filename);
    web_server.send_error_code(200);
    web_server.send_content_type(mime_type);
    web_server.end_headers();
    if (file.open(&root, filename, O_READ)) {
      Serial << F("Read file ");
      Serial.println(filename);
      web_server.send_file(file);
      file.close();
    } else {
      web_server << F("Could not find file: ") << filename << "\n";
    }
  }
}

//__________________________________________________________________________________________________________________________________________________________________________
boolean file_handler(TinyWebServer& web_server) {
//Serial.print ("2");
  char* filename = TinyWebServer::get_file_from_path(web_server.get_path());
  send_file_name(web_server, filename);
  free(filename);
  return true;
}

//__________________________________________________________________________________________________________________________________________________________________________
boolean index_handler(TinyWebServer& web_server) {
//Serial.print ("3");
  send_file_name(web_server, "INDEX.HTM");
  return true;
}

//temp_________________________________________________________________________________________________
boolean temp_handler(TinyWebServer& web_server) {
  web_server.send_error_code(200);
  web_server.send_content_type("text/plain");
  web_server.end_headers();
  Client& client = web_server.get_client();
  client.println("20");
  return true;
}
//_________________________________________________________________________________________________________________________________________________________________________
/////////upload
void file_uploader_handler(TinyWebServer& web_server,
  TinyWebPutHandler::PutAction action,
  char* buffer, int size) {
  static uint32_t start_time;
  static uint32_t total_size;

  switch (action) {
  case TinyWebPutHandler::START:
    start_time = millis();
    total_size = 0;
    if (!file.isOpen()) {
      // File is not opened, create it. First obtain the desired name
      // from the request path.
      char* fname = web_server.get_file_from_path(web_server.get_path());
      if (fname) {
Serial << F("Creating ") << fname << "\n";
file.open(&root, fname, O_CREAT | O_WRITE | O_TRUNC);
free(fname);
      }
    }
    break;

  case TinyWebPutHandler::WRITE:
    if (file.isOpen()) {
      file.write(buffer, size);
      total_size += size;
    }
    break;

  case TinyWebPutHandler::END:
    file.sync();
    Serial << F("Wrote ") << file.fileSize() << F(" bytes in ")
  << millis() - start_time << F(" millis (received ")
           << total_size << F(" bytes)\n");
    file.close();
  }
}


void setup() {
  
  //LEDS///////
  pinMode(ledPin, OUTPUT);
  ////////////  
  Serial.begin(9600);
  //Serial << F("Free RAM: ") << FreeRam() << "\n";
 
  pinMode(SS_PIN, OUTPUT);   // set the SS pin as an output
  digitalWrite(SS_PIN, HIGH);   // and ensure SS is high
  pinMode(10, OUTPUT);   // Set the CS pin as an output
  digitalWrite(10, HIGH);   // Turn off the W5100 chip! (wait for configuration)
  pinMode(4, OUTPUT);   // Set the SDcard CS pin as an output
  digitalWrite(4, HIGH);   // Turn off the SD card! (wait for configuration)
  // initialize the SD card.
  Serial.println("Setting up SD card...");
  // pass over the speed and Chip select for the SD card
  if (!card.init(SPI_FULL_SPEED, 4)) {
    Serial.println("card failed");
    has_filesystem = false;
  }
  // initialize a FAT volume.
  if (!volume.init(&card)) {
    Serial.println("vol.init failed!");
    has_filesystem = false;
  }
  if (!root.openRoot(&volume)) {
    Serial.println("openRoot failed");
    has_filesystem = false;
  }
  
  if (has_filesystem) {
    // Assign our function to `upload_handler_fn'.
    TinyWebPutHandler::put_handler_fn = file_uploader_handler;
  }

  // Initialize the Ethernet.
  Serial.println("Setting up the Ethernet card...");
  Ethernet.begin(mac, ip);

  // Start the web server.
  Serial.println("Web server starting...");
  web.begin();

  Serial.println("Ready to accept HTTP requests.");
}
 
//_________________________________________________________________________________________________________________________________________________________________________
void loop() {
  if (has_filesystem) {
    web.process();
  }
}

and this is the html code:
Code:
<script type="text/javascript">

//temperatura
function temp() {
    $.ajax({type: "GET", cache: false, url: "/TEMP", success: status /*function(status)
{status = parseInt(status.trim());//<<<<<<<<<<<<<<<<<<<<la variabile status contiene il messaggio di risposta da arduino
}*/
});

document.write(status);
};
</script>

</head>

<body>

Temperatura :
<script type="text/javascript">
temp();
</script>
°C
</body>

</html>

can you help me to output the temperature (in this case "20") to my html code? where did I go wrong?

5  International / Software / Re: Funzione GET x prendere valori dall'url di una pagina HTML on: May 23, 2013, 04:48:39 pm
Up smiley-red
6  International / Software / Re: Funzione GET x prendere valori dall'url di una pagina HTML on: May 20, 2013, 03:13:18 pm
ok, a questo punto posto tutto il codice .ino: (per la cosa che ho problemi ora riguarda di mandare la temperatura sull'html, e interessa la funzione "temp_handler")
Code:
#include <string.h>
#include <pins_arduino.h>
#include <SPI.h>
#include <Ethernet.h>
#include <Flash.h>
#include <SD.h>
#include <TinyWebServer.h>



//LEDS
const int ledPin =  3;
int ledState = LOW;

//****************VALUES YOU CHANGE*************/
//byte ip[] = { 192, 168, 0, 12 };// Don't forget to modify the IP to an available one on your home network
byte ip[] = { 192, 168, 0, 10 };// Don't forget to modify the IP to an available one on your home network
//*********************************************/

static uint8_t mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };

 TinyWebServer::PathHandler handlers[] = {
  {"/", TinyWebServer::GET, &index_handler},
  {"/upload/" "*", TinyWebServer::PUT, &TinyWebPutHandler::put_handler },
  {"/RICEVI", TinyWebServer::POST, &riceve_handler},
  {"/" "*", TinyWebServer::GET, &file_handler},
  {"/TEMP", TinyWebServer::GET, &temp_handler },
  {NULL},
};

const char* headers[] = {"Content-Length",NULL};
TinyWebServer web = TinyWebServer(handlers, headers);

boolean has_filesystem = true;
Sd2Card card;
SdVolume volume;
SdFile root;
SdFile file;

//_________________________________________________________________________________________________________________________________________________________________________
boolean riceve_handler(TinyWebServer& web_server)

      web_server.send_error_code(200);
      web_server.send_content_type("text/plain");
      web_server.end_headers();
      Client& client = web_server.get_client();
                 
    if (client.available())
    {
      String readString;
      int16_t c; 
      String led1_on="led1_ON#";
      String led1_off="led1_OFF#";
     
       while ((c = client.read())>0)
       {
         readString += (char)c;
         if(c=='#'){           
         Serial.println (readString);  //debug
         //------------------------------------
         //qui elabori la stringa in arrivo
         if(readString==led1_on){
             digitalWrite(ledPin, HIGH);
             Serial.println ("accendo");
           }
          if(readString==led1_off){
             digitalWrite(ledPin, LOW);
             Serial.println ("spengo");
           }
         
         //-----------------------------------
           
         //svuoto la stringa dopo aver incontrato # ... in questo modo la massima lunghezza di  readString
         //sara di 255.255.255.255# quindi 16 char, si evita di crashare arduino a causa di un eventuale
         //saturazione della ram
         readString="";
         }             
       }
     
        readString=""; //svuota la stringa del client.read 
    }
   
      client.stop();   
}

//_________________________________________________________________________________________________________________________________________________________________________
void send_file_name(TinyWebServer& web_server, const char* filename) {
//Serial.print ("1");
  if (!filename) {
    web_server.send_error_code(404);
    web_server << F("Could not parse URL");
  } else {
    TinyWebServer::MimeType mime_type
      = TinyWebServer::get_mime_type_from_filename(filename);
    web_server.send_error_code(200);
    web_server.send_content_type(mime_type);
    web_server.end_headers();
    if (file.open(&root, filename, O_READ)) {
      Serial << F("Read file ");
      Serial.println(filename);
      web_server.send_file(file);
      file.close();
    } else {
      web_server << F("Could not find file: ") << filename << "\n";
    }
  }
}

//__________________________________________________________________________________________________________________________________________________________________________
boolean file_handler(TinyWebServer& web_server) {
//Serial.print ("2");
  char* filename = TinyWebServer::get_file_from_path(web_server.get_path());
  send_file_name(web_server, filename);
  free(filename);
  return true;
}

//__________________________________________________________________________________________________________________________________________________________________________
boolean index_handler(TinyWebServer& web_server) {
//Serial.print ("3");
  send_file_name(web_server, "INDEX.HTM");
  return true;
}

//temp_________________________________________________________________________________________________
boolean temp_handler(TinyWebServer& web_server) {
  web_server.send_error_code(200);
  web_server.send_content_type("text/plain");
  web_server.end_headers();
  Client& client = web_server.get_client();
  client.println("20");
  return true;
}
//_________________________________________________________________________________________________________________________________________________________________________
/////////upload
void file_uploader_handler(TinyWebServer& web_server,
   TinyWebPutHandler::PutAction action,
   char* buffer, int size) {
  static uint32_t start_time;
  static uint32_t total_size;

  switch (action) {
  case TinyWebPutHandler::START:
    start_time = millis();
    total_size = 0;
    if (!file.isOpen()) {
      // File is not opened, create it. First obtain the desired name
      // from the request path.
      char* fname = web_server.get_file_from_path(web_server.get_path());
      if (fname) {
Serial << F("Creating ") << fname << "\n";
file.open(&root, fname, O_CREAT | O_WRITE | O_TRUNC);
free(fname);
      }
    }
    break;

  case TinyWebPutHandler::WRITE:
    if (file.isOpen()) {
      file.write(buffer, size);
      total_size += size;
    }
    break;

  case TinyWebPutHandler::END:
    file.sync();
    Serial << F("Wrote ") << file.fileSize() << F(" bytes in ")
   << millis() - start_time << F(" millis (received ")
           << total_size << F(" bytes)\n");
    file.close();
  }
}


void setup() {
 
  //LEDS///////
  pinMode(ledPin, OUTPUT);
  //////////// 
  Serial.begin(9600);
  //Serial << F("Free RAM: ") << FreeRam() << "\n";
 
  pinMode(SS_PIN, OUTPUT);   // set the SS pin as an output
  digitalWrite(SS_PIN, HIGH);   // and ensure SS is high
  pinMode(10, OUTPUT);   // Set the CS pin as an output
  digitalWrite(10, HIGH);   // Turn off the W5100 chip! (wait for configuration)
  pinMode(4, OUTPUT);   // Set the SDcard CS pin as an output
  digitalWrite(4, HIGH);   // Turn off the SD card! (wait for configuration)
  // initialize the SD card.
  Serial.println("Setting up SD card...");
  // pass over the speed and Chip select for the SD card
  if (!card.init(SPI_FULL_SPEED, 4)) {
    Serial.println("card failed");
    has_filesystem = false;
  }
  // initialize a FAT volume.
  if (!volume.init(&card)) {
    Serial.println("vol.init failed!");
    has_filesystem = false;
  }
  if (!root.openRoot(&volume)) {
    Serial.println("openRoot failed");
    has_filesystem = false;
  }
 
  if (has_filesystem) {
    // Assign our function to `upload_handler_fn'.
    TinyWebPutHandler::put_handler_fn = file_uploader_handler;
  }

  // Initialize the Ethernet.
  Serial.println("Setting up the Ethernet card...");
  Ethernet.begin(mac, ip);

  // Start the web server.
  Serial.println("Web server starting...");
  web.begin();

  Serial.println("Ready to accept HTTP requests.");
}
 
//_________________________________________________________________________________________________________________________________________________________________________
void loop() {
  if (has_filesystem) {
    web.process();
  }
}

codice html interessato:
Code:
<script type="text/javascript">

//temperatura
function temp() {
    $.ajax({type: "GET", cache: false, url: "/TEMP", success: status /*function(status)
{status = parseInt(status.trim());//<<<<<<<<<<<<<<<<<<<<la variabile status contiene il messaggio di risposta da arduino
}*/
});

document.write(status);
};
</script>

</head>

<body>

Temperatura :
<script type="text/javascript">
temp();
</script>
°C
</body>

</html>
7  International / Software / Re: Funzione GET x prendere valori dall'url di una pagina HTML on: May 19, 2013, 06:14:50 am
e la domanda è?


 Che non mi visualizza niente, quindi è sbagliato qualcosa. Mi sai aiutare anche in questo caso?
8  International / Software / Re: Funzione GET x prendere valori dall'url di una pagina HTML on: May 18, 2013, 09:27:19 am
ho modificato un po' l'html
(nel .ino "20" è un valore messo a caso, per fare una prova ovviamente")

Code:
//temperatura
function temp() {
    $.ajax({type: "GET", cache: false, url: "/temp", success: function(status) {
    status = parseInt(status.trim());//<<<<<<<<<<<<<<<<<<<<la variabile status contiene il messaggio di risposta da arduino}
});
document.write(status);
};
</script>

</head>

<body>
Temperatura:
<script>
temp();
</script>
°C
</body>
9  International / Software / Re: Funzione GET x prendere valori dall'url di una pagina HTML on: May 17, 2013, 09:03:19 am
Dopo che arduino ha ricevuto la richiesta metti un clientprintln "xxxxxxxxxxxxx" prima di chiudere il client, il messaggio che arduino invia al client lo leggerai dentro ajax nella subfunzione success() del javascript

Ma non hai detto che lo facevi domani?

nell'esempio del blink trovi questo
Code:
function ledStatus(btn, url) {
    $.ajax({type: "GET",
cache: false,
url: url,
success: function(status) {
status = parseInt(status.trim());//<<<<<<<<<<<<<<<<<<<<la variabile status contiene il messaggio di risposta da arduino
btn.setEnabled(status);
window.setTimeout(function() {ledStatus(btn, url);}, 400);
},
error: function(s, xhr, status, e) {
console.log("Getting status failed: "
+ s.responseText);
}
});
};

in breve che sia GET o POST quando usi la funzione ajax con i vari parametri url, data ... etc spedisci il dato,  ma ajax si aspetta una risposta, se avviene correttamente interviene la funzione success con la stringa interessata, se non avviene interviene la funzione error con il suo err-code e li dentro puoi mettere cio' che ti interessa visualizzare o fare in caso di errore

ciao

sto guardando un po' ma non riesco a capire bene.
allora su arduino ho aggiunto questo:
Code:
boolean temp_handler(TinyWebServer& web_server) {
  web_server.send_error_code(200);
  web_server.send_content_type("text/plain");
  web_server.end_headers();
  Client& client = web_server.get_client();
  client.println("20");
  return true;
}

mentre nell'html:
Code:
<script type="text/javascript">

//temperatura
function temp(btn, url) {
    $.ajax({type: "GET", cache: false, url: url, success: function(status) {
status = parseInt(status.trim());//<<<<<<<<<<<<<<<<<<<<la variabile status contiene il messaggio di risposta da arduino
btn.setEnabled(status);
window.setTimeout(function() {temp(btn, url);}, 400);
},
error: function(s, xhr, status, e) {
console.log("Getting status failed: "+ s.responseText);
}
});
};
</script>

</head>

<body>

<script>
document.write(status);
</script>

</body>

so che è sbagliato.  smiley-fat
10  International / Software / Re: Funzione GET x prendere valori dall'url di una pagina HTML on: May 16, 2013, 02:14:55 pm
Dopo che arduino ha ricevuto la richiesta metti un clientprintln "xxxxxxxxxxxxx" prima di chiudere il client, il messaggio che arduino invia al client lo leggerai dentro ajax nella subfunzione success() del javascript

sto cercando di capire questo ma non capisco come funziona.
ho il mio dato nella variabile int dato quindi:
ARDUINO
dato=x;
client.println(dato);

HTML?
11  International / Software / Re: Funzione GET x prendere valori dall'url di una pagina HTML on: May 16, 2013, 02:00:49 pm
hai cambiato il post, dicevi che sul serial non c'era niente ... e ora? funziona?


si. domani ci lavoro un'altro po' sperando che vada tutto liscio. poi provo la cosa di mandare la temperatura da Arduino a html.
grazie ancora
12  International / Software / Re: Funzione GET x prendere valori dall'url di una pagina HTML on: May 16, 2013, 12:35:35 pm
se tu usi l'evento onclick non hai bisogno di premere un pulsante submit, appena premi il button col etichetta "D00"entra nella funzione "evento_click(this.id)" passandogli anche l'id che sarebbe "000" in questo esempio
Code:
<input id="000" type="button" value="D00" onclick="evento_click(this.id)">

nel js usi questa funz. che spedisce immediatamente il comando
Code:
function evento_click(puls_id)
 {    
     var dato= puls_id;
    $.ajax({
     data: dato,
     dataType: "text",
...
...
...
 });
};

Se vuoi fare una buona elaborazione dei dati provienti da arduino su pag web devi metterti a studiare un po' di javascript, che poi non è così difficile, in rete trovi tutto quello che ti serve.
Se mi mettessi a spiegarti qui certe funzione del js andrei OT, però quello che ti ho detto qui sopra fa quello che chiedi

ciao
grazie mille  smiley smiley
13  International / Software / Re: Funzione GET x prendere valori dall'url di una pagina HTML on: May 16, 2013, 11:20:23 am
anche per te vale la stessa cosa di questo 3D http://forum.arduino.cc/index.php?topic=166053.0

ho visto, ma non utilizza tinywebserver, ormai ho fatto con quello. quello del video in fondo non utilizza "document.getElementById" ma fa altre cose più complicate, e scusa ma di javascript non ci capisco tantissimo smiley-sad
esiste un modo veloce per far quello che voglio fare io? usando, o link immagini o checkebox senza submit?
14  International / Software / Re: Funzione GET x prendere valori dall'url di una pagina HTML on: May 16, 2013, 11:00:22 am
prima di fare quello, mi sono bloccato.
avevo bisogno non di una checkbox e il pulsante (submit) per accendere un led. ma sarebbe meglio o di un pulsante o di una checkbox che però faccia il cambiamento immediatamente e non con un submit.
Mi potresti aiutare?

in poche parole, voglio una cosa dove pigio (una volta) e mi accende subito il led.

grazie smiley
15  International / Software / Re: Funzione GET x prendere valori dall'url di una pagina HTML on: May 15, 2013, 01:18:05 pm
questo topic mi è stato utilissimo per fare quelle stesse cose.
ma se i dati li voglio passare da arduino al browser?
es. arduino mi legge la temperatura e lo devo vedere nel browser. come posso fare?
(utilizzo la stessa libreria che ha usato Sausim)
Pages: [1] 2 3