Arduino server e client php?

Buongiorno a tutti!!!!!

Avrei bisogno di un altro consiglio per quanto riguarda ciò che sto facendo :slight_smile:

Praticamente avrei la necessità di dover effettuare una comunicazione tra Arduino (che si comporta da Server) e un client;
Funziona cosi: Il client si connette all indirizzo ip di Arduino....Arduino risponde con una pagina web ( ho scritto del codice html che ho memorizzato su una micro sd e che faccio caricare ad Arduino ogni volta che cè il client che si collega).
La pagina web che ho creato non è nient altro che un menù che dovrà richiamare dei file di testo....Per cui sostanzialmente ho la necessità di dover effettuare una richiesta da parte del client in modo tale da far caricare successivamentre i file di testo di cui ho bisogno ad Arduino. Come posso implementare tutto ciò? un amico mi consigliava di utilizzare PHP perchè HTML non è il codice adatto per fare ciò di cui ho bisogno....Si accettano consigli :stuck_out_tongue:

Ciao,
innanzitutto su Arduino non puoi far girare una pagina PHP salvo che tu stia utilizzando Arduino Yun.

Se quello che ti serve è solamente una pagina "statica" (ovvero che si propone sempre gli stessi dati) contente un elenco di link a dei file di testo che verranno restituiti al browser del chiamante HTML è più che sufficiente.

Se invece la tua necessità è che chi si collega ad Arduino via browser possa caricare dei file di testo il discorso di complica, prova a guardare questo post dove ne hanno parlato e hanno postato anche un codice di esempio.

La comunicazione deve funzionare come segue:

  1. Il client si connette ad Arduino Uno

  2. Arduino risponde con una pagina html (memorizzata con del codice HTML su una micro SD con file di testo);
    La pagina contiene dei link: Ogni link contiene al suo interno un riferimento a dei file di testo
    (che vorrei far diventare HTML per questioni di estetica) che dovranno essere caricati sul browser quando verranno premuti i link

E' possibile fare tutta questa gestione in html? Considera che il codice html e tutti i file di testo sono completamente scritti su una microsd il cui contenuto viene caricato ogni volta che cè una connessione da parte del client

Giusto per chiarirti le cose ti faccio un esempio semplificativo di come funzionano le cose normalmente quando un client (il tuo browser) richiama una pagina presente su un server:

  • Dal tuo browser scrivi l'indirizzo di una pagina es. www.tuosito.ecc
  • Il server riceve la richiesta e inizia ad elaborarla
  • SE richiami una pagina PHP l'interprete presente sul server effettua delle operazioni come calcoli, query ecc. e produce un output generalmente HTML
  • SE richiami una pagina HTML non viene solitamente fatto nulla se non leggere il file e rigirarlo al browser che l'ha richiesto
  • Il tuo browser riceve l'HTML prodotto e te lo mostra

Detto questo siccome non devi fare nessuna elaborazione sul server prima di rispondere al browser, ma rigirare pari pari una pagina HTML, un interprete PHP non ti serve e quindi Arduino Uno può fare al caso tuo.

Ciao
La tua domanda senza rigiri può essere espressa in questo modo

"Vorrei visualizzare sulla pagina web l'elenco file della SD, tali file dovrebbero diventare dei link e che con un click si aprissero visualizzando il suo contenuto di testo"

Allora ti rispondo ... certo è fattibilissimo, l'ho fatto e quindi confermo che si può fare con successo

Prendi negli esempi lo sketch che visualizza l'elenco file della SD su seriale, ma invece di mandarli su seriale lo mandi su http con un accorgimento, queste linee le fai diventare dei link con:

dir_t p;
root.rewind();
while (root.readDir(p) > 0) {
  if (p.name[0] == DIR_NAME_FREE) break;
  if (p.name[0] == DIR_NAME_DELETED || p.name[0] == '.') continue;
  if (!DIR_IS_FILE_OR_SUBDIR(&p)) continue;

  client.write("<li><a href=\"");
  for (uint8_t i = 0; i < 11; i++) {
    if (p.name[i] == ' ') continue;
    if (i == 8) {
      client.write('.');
    }
    client.write(p.name[i]);
  }
  client.write("\">");

a questo punto la lista file viene visualizzata sul client e che è a tutti gli effetti una lista di link, cliccandoci sopra diventa una request GET inviata all' IP host, la vedrai anche scritta nel path http://x.x.x.x/nomefile.ext, da qui arduino dovrà fare uno split dell'header e ricavarne il nome file ed estensione, quindi cercarlo nella SD e spedirlo al client, non ti basta però .... perchè ti dico che anche l'estensione del file va riconosciuta?, perchè in base a quella va preparata la risposta che arduino dovrà dare al client con

Content-Type: text/html se invii un file di tipo htm
Content-Type: text/plain se invii un file di tipo txt
ecc
ecc

Altrimenti se il tuo file è sempre lo stesso fai una singola e diretta richiesta GET di quel file

Perfetto ragazzi....vi ringrazio infinitamente per i vostri preziosi consigli....appena avrò qualche notizia in merito vi farò sapere!

ciao anch'io ho da poco acquistato arduino ethernet shield e non riesco a far partire l'esempio del webserver e non riesco a capire il perchè, appena carico l'esempio apro il monitor seriale e si ferma a "server is at (e il mio indirizzo ip)". Perchè? Sono ancora alle prime armi quindi può essere anche qualche piccolo problema, devo inserire qualche nuova libreria in arduino, devo configurare lo shield? Grazie mille per eventuali risposte.

Hai provato a vedere se l'indirizzo ip e l inidirizzo mac (l'inidirizzo mac della Ethernet shield lo trovi dietro la scheda stessa ) sono quellli corretti=

Salve ragazzi,
io ho fatto niente piccolo sito html su sd e poi la controllato con arduino, passaggio variabili e controllo comandi da web tramite messaggi get.
ora però vorrei fare ampliare la pagina html con immagini, ho provato con la conversione a base 64, ma ci mette un secolo a caricare le pagine.
Mi chiedevo, visto che ho un nas nella stessa rete, perché non lasciare le immagini sul nas e passare solo il link?
Ho provato, ma non le carica.
Ora quindi chiedo a voi.....se facessi un server php su una cartella del Nas, e con Arduino passassi solo le variabili e ricevessi solo i comandi?...sì può fare una cosa del genere??
Ma come si fa a fare un server php?
come si passano o ricevono i dati ad arduino?
Grazie