Pages: [1]   Go Down
Author Topic: GET da WebServer arduino  (Read 512 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Newbie
*
Karma: 0
Posts: 4
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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.

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

Genova
Offline Offline
Faraday Member
**
Karma: 17
Posts: 2746
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Code:
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
Code:
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
Code:
if ( c == 'x') { //dove 'x' è il carattere o byte che ti interessa
      scrivi qui quello che deve fare;
    }


ciao
« Last Edit: February 11, 2013, 05:55:43 pm by pablos » Logged

Meglio imparare dalle cose inutili piuttosto che non imparare niente.   [Arduino Mega R3 + Ethernet shield W5100 + SD card 8Gb FAT32]

Offline Offline
Newbie
*
Karma: 0
Posts: 4
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Code:
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
Code:
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
Code:
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?
Logged

Pages: [1]   Go Up
Jump to: