GET da WebServer arduino

Ciao a tutti ho un problema con il mio webserver arduino.

La mia intenzione è di far accendere un led con una pagina web. In particolare sull’sd è caricata una pagina web con un form. Il form richiama la stessa pagina ma allegando al link il risultato del form tramite la GET. Il mio problema è di salvare in una variabile il risultato ma non so come fare. Ecco il codice.

#include <SPI.h>
#include <WiFi.h>
#include <SD.h>

File htmlFile;

char ssid[] = "**********";      //  your network SSID (name) 
char pass[] = "***************";       // your network key
int status = WL_IDLE_STATUS;  


WiFiServer server(80);
String query;

void setup() {
  query = String("");
  pinMode(8,OUTPUT);

    
  // Iniziallizzazione porta seriale:
  Serial.begin(9600); 
  while (!Serial) {
    ; // Attesa connessione per la porta seriale
  }
  
  // Inizializzazione SD
  Serial.println("Inizializzazione SD Card...");
  if (!SD.begin(4)) {
    Serial.println("Inizializzazione SD Fallita!");
    return;
  }
  Serial.println("Inizializzazione SD riuscita.");

  
  // Tentativo di connessione...
  while ( status != WL_CONNECTED) { 
    Serial.print("Tentativo di connessione all'SSID: ");
    Serial.println(ssid);
    status = WiFi.begin(ssid,pass);

    // Attesa di 10sec per la connessione
    delay(10000);
  } 
  server.begin();
  // Connessione effettuata stampa dello status
  printWifiStatus();
}


void loop() {
  // Ascolto per Client in arrivo
  WiFiClient client = server.available();
  if (client) {
    Serial.println("Nuovo client");
    // Riechiesta HTTP con un  linea bianca
    boolean currentLineIsBlank = true;
    while (client.connected()) {
      if (client.available()) {
        char c = client.read();
        Serial.write(c);
        
        
       
        if (c == '\n' && currentLineIsBlank) {
          // Invio header standard di risposta
          client.println("HTTP/1.1 200 OK");
          client.println("Content-Type: text/html");
          client.println("Connnessione: close");
          client.println();
          Serial.println("Caricamento pagina sul server...");
          htmlFile = SD.open("index.htm");
          if (htmlFile) {
            while (htmlFile.available()) {
                server.write(htmlFile.read());
            }
            // Chiusura file
            htmlFile.close();
          }
           Serial.print(query.concat(c));
        
          break;
        }
        if (c == '\n') {
          // Inizio nuova linea
          currentLineIsBlank = true;
        } 
        else if (c != '\r') {
          // Ricevuto un carattere sulla linea
          currentLineIsBlank = false;
        }
      }
    }
    // give the web browser time to receive the data
    delay(1000);
      // Chiusura connessione
      client.stop();
      Serial.println("Client Disconnesso");
  }
}


void printWifiStatus() {
  // Stampa SSID alla quale sono connesso
  Serial.print("SSID: ");
  Serial.println(WiFi.SSID());

  // Stampa status Wifi
  IPAddress ip = WiFi.localIP();
  Serial.print("IP Address: ");
  Serial.println(ip);

  // Stampa potenza segnale ricevuto
  long rssi = WiFi.RSSI();
  Serial.print("Potenza Segnale (RSSI):");
  Serial.print(rssi);
  Serial.println(" dBm");
}
char c = client.read();
        Serial.write(c);

Il pezzetto di codice che cerchi, quel "char c" è una lettura sequenziale del carattere per carattere

ti basta caricarli in una stringa con ad esempio

readString += (char)c;

devi dichiarare readString all'inizio dello sketch o comunque fuori dalla funzione di lettura String readString;

finita la lettura devi svuotarla readString = ""; pronta per un nuovo caricamento

Fatto ciò fai il parse della stringa (readString ) che risulterà avere un insieme di caratteri, all'interno ci sarà l'informazione che cerchi, la puoi estrapolare con un indexof ad esempio.

se cerchi invece un solo carattere (o byte) puoi usare semplicemente

if ( c == 'x') { //dove 'x' è il carattere o byte che ti interessa
      scrivi qui quello che deve fare;
    }

ciao

pablos: char c = client.read();        Serial.write(c);

Il pezzetto di codice che cerchi, quel "char c" è una lettura sequenziale del carattere per carattere

ti basta caricarli in una stringa con ad esempio

readString += (char)c;

devi dichiarare readString all'inizio dello sketch o comunque fuori dalla funzione di lettura String readString;

finita la lettura devi svuotarla readString = ""; pronta per un nuovo caricamento

Fatto ciò fai il parse della stringa (readString ) che risulterà avere un insieme di caratteri, all'interno ci sarà l'informazione che cerchi, la puoi estrapolare con un indexof ad esempio.

se cerchi invece un solo carattere (o byte) puoi usare semplicemente

if ( c == 'x') { //dove 'x' è il carattere o byte che ti interessa
      scrivi qui quello che deve fare;
    }

ciao

Grazie mille per la risposta. Potresti consigliarmi in quale punto del programma inserire queste istruzioni dato che sto avendo qualche problema.

Inoltre potresti dirmi come scrivere correttamente l'if utilizzando l'indexOf?

ThinkAxelRock: Ciao a tutti ho un problema con il mio webserver arduino.

La mia intenzione è di far accendere un led con una pagina web. In particolare sull'sd è caricata una pagina web con un form. Il form richiama la stessa pagina ma allegando al link il risultato del form tramite la GET. Il mio problema è di salvare in una variabile il risultato ma non so come fare.

Ciao! Scusate se riesumo questo post ma mi sono reso conto che ho circa lo stesso problema... Per fare chiarezza posso chiederti se puoi postare il codice html della pagina? Grazie mille!

Per fare chiarezza posso chiederti se puoi postare il codice html della pagina?

A chi lo stai chiedendo? io non possiedo codice simile, dovrei scriverlo ....

come puoi vedere ThinkAxelRock ha 4 post, si è iscritto solo per fare questa domanda e non si logga dal Last Active: February 13, 2013, 01:10:32 pm

pablos:

Per fare chiarezza posso chiederti se puoi postare il codice html della pagina?

A chi lo stai chiedendo? io non possiedo codice simile, dovrei scriverlo …

come puoi vedere ThinkAxelRock ha 4 post, si è iscritto solo per fare questa domanda e non si logga dal
Last Active: February 13, 2013, 01:10:32 pm

Lo chiedevo a ThinkAxelRock e non avevo visto il “Last Active” :confused:
Grassssie pablos!

questo potrebbe fare al caso tuo http://startingelectronics.com/tutorials/arduino/ethernet-shield-web-server-tutorial/SD-card-web-server-links/

la parte di sketch che legge HTTP request GET

char StrContains(char *str, char *sfind)

pablos:
questo potrebbe fare al caso tuo http://startingelectronics.com/tutorials/arduino/ethernet-shield-web-server-tutorial/SD-card-web-server-links/

la parte di sketch che legge HTTP request GET

char StrContains(char *str, char *sfind)

Grazie mille! :slight_smile: :slight_smile: :slight_smile: