leggere file di testo tramite http

Ciao a tutti!
Siete a conoscenza se esiste la possibilità di leggere un file di testo (txt o csv) tramite protocollo http?
In pratica il dubbio è se arduino riesca a legge un file che è salvato su un server web esterno, per eseguire successivamente un parsing dei dati letti.
Sapete se c’è qualche libreria o magari una funzione di processing che mi sfugge?
Grazie e ciao,
Gianni

Il protocollo non si chiama FTP e non HTTP?
Ciao Uwe

uwefed:
Il protocollo non si chiama FTP e non HTTP?

No, intendo proprio HTTP. FTP implica un accesso autenticato per non creare problemi di sicurezza sul server web. Sono aperto ad ogni tipo di consiglio l'uniche cose: il file è remoto (su un hosting) e la maniera di accesso ai dati scritti sul file deve avvenire senza alcuna autenticazione.
Ciao

Ciao,
se Arduino è dotato di ethernet/wifi shield, ti basta utilizzarlo in modalità client, e puntare all'indirizzo in cui c'è il tuo file.
Se il file è accessibile a te via web browser, allora lo sarà anche per Arduino.

pitusso:
Ciao,
se Arduino è dotato di ethernet/wifi shield, ti basta utilizzarlo in modalità client, e puntare all'indirizzo in cui c'è il tuo file.
Se il file è accessibile a te via web browser, allora lo sarà anche per Arduino.

Pensi che possa usare client.read ()?

Pensi che possa usare client.read ()?

guarda l'esempio WebClient sia su Ethernet che Wifi (li trovi presenti tra gli esempi dell'IDE), vedi che fanno esattamente quel che dici tu: caricano una pagina HTML, la "leggono" carattere per carattere con la read(), e poi la visualizzano sul monitor seriale.
Tu, invece di visualizzarlo su monitor seriale, lo processerai secondo le tue esigenze.

pitusso:
guarda l’esempio WebClient sia su Ethernet che Wifi (li trovi presenti tra gli esempi dell’IDE), vedi che fanno esattamente quel che dici tu: caricano una pagina HTML, la “leggono” carattere per carattere con la read(), e poi la visualizzano sul monitor seriale.
Tu, invece di visualizzarlo su monitor seriale, lo processerai secondo le tue esigenze.

Grazie :roll_eyes:
Ma come faccio ad eliminare il DOM e a prelevare solo i valori?
Ho un file csv su cui devo fare un parsing di valori di questo tipo: 0;1;2;3;4;5;6;7;8;9;
E sto utilizzando questo sketch modificando l’ esempio WebClientRepeating

 void httpRequest() {
  if (client.connect(server, 80)) {
    client.println("GET /valoridigitali.csv HTTP/1.1");
    client.println("Host: www.host.my");
    client.println("Connection: close");
    client.println();
    lastConnectionTime = millis();
  } 
  else {
    Serial.println("connection failed");
    client.stop();
  }
}
  if (client.available()) {
    char c = client.read();
    Serial.print(c);
  if(!client.connected() && (millis() - lastConnectionTime > postingInterval)) {
    httpRequest();
  }

Arduino giustamente mi stampa tutto il DOM seguito dai valori

HTTP/1.1 200 OK
Date: Tue, 03 Dec 2013 18:37:27 GMT
Server: Apache
Last-Modified: Tue, 03 Dec 2013 18:11:42 GMT
ETag: "4a179601-15-4eca53a864f04"
Accept-Ranges: bytes
Content-Length: 21
Connection: close
Content-Type: text/csv

0;1;2;3;4;5;6;7;8;9

Il problema è che non riesco a pensare ad un “trick” per elimiare il DOM e salvarmi solo i valori
0 1 2 3 4 5 6 7 8 9 che successivamente andrò a lavorare con uno switch / case
Da tenere presente che questi valori sul file csv li posso scrivere come voglio e in qualunque formato, in txt, in xml, in html ecc. Li genero da una funzione in php sul mio host. Per intenderci li posso scrivere anche
|0|1|2|3|…ecc
<val>0</val><val>1</val><val>2</val>…ecc
<dig0>valore0</dig0><dig1>valore1</dig1><dig2>valore2</dig2>…ecc
Avete una dritta?
Grazie.

Ok ho risolto in questa maniera:
il codice è da ottimizzare, ci sono troppi if …

 if (client.available()) {
      char c = client.read();
      currentLine += c;
      if (c == '\n') {
        currentLine = "";
      } 
      if (currentLine.endsWith("<d0=")) {
        readD0 = true; 
        valD0 = "";
      }
      if (currentLine.endsWith("<d1=")) {
        readD1 = true; 
        valD1 = "";
      }
/* *** ecc *** */
      if (readD0) {
        if (c != '>') {
          valD0 += c;
        } 
        else {
          readD0 = false;
          Serial.println(valD0); 
          if (valD0 == "=1") {
            Serial.println("ACCESO");
          }
          if (valD0 == "=0") {
            Serial.println("SPENTO");
          }    
        }
      }
      if (readD1) {
        if (c != '>') {
          valD1 += c;
        } 
        else {
          readD1 = false;
          Serial.println(valD1); 
          if (valD1 == "=1") {
            Serial.println("ACCESO");
          }
          if (valD1 == "=0") {
            Serial.println("SPENTO");
          }    
        }
      }
/* *** ecc *** */
    }
  if (client.connect(server, 80)) {
    Serial.println("connecting...");
    client.println("GET /valoridigitali.xml HTTP/1.1");
    client.println("Host: www.host.my");
    client.println("Connection: close");
    client.println();

Il file che viene che viene letto da arduino è generato ogni tot tempo secondo la seguente logica:

<d0=0><d1=1><d2=1><d3=0>...ecc...

Qualcuno di voi ha un idea su come ottimizzare il codice per levare quella serie di if?
Attendo prima di mettere il tag RISOLTO sul topic.