Problem invio dati su server da Arduino/ESP32 (server virtuali)

Salve,
sono alcuni giorni che cerco di risolvere un problema senza esito. Voglio inviare i dati di alcune misure su un database che si trova su un server nel web per poter poi mostrare i dati sotto forma di grafico. Ho trovato un servizio di Hosting gratuito che si chiama BYET internet service.
Creata pagina e database script PHP per prendere i dati da una richiesta POST o GET ma non riesco a farla funzionare.
Dopo alcuni giorni di tentativi ho replicato tutto sulla mia rete locale installando Apache/MySQL/PHP su un pc e qui funziona tutto. Il problema non è lo sketch, per questo no lo posto per non creare confusione, ma a quanto pare il fatto che i servizi di hosting creino dei server virtuali. In questo caso arduino non riesce a inviare correttamente la richiesta. Sto utilizzando la libreria HTTPClient.
La mia domanda è: qualcuno di voi ha già avuto lo stesso problema? Come lo avete risolto? Esiste qualche libreria che permette di gestire meglio questi casi? Conoscete un servizio di hosting che funziona bene con arduino (meglio se gratuito)?
Come HW sto utilizzando un ESP32.
Per creare lo sketch ho seguito questo esempio: Visualize ESP32/ESP8266 Sensor Readings from Anywhere in the World | Random Nerd Tutorials
Grazie in anticipo

Buongiorno,

prima di tutto ti segnalo che, nella sezione in lingua Inglese, si può scrivere SOLO in Inglese ... quindi, per favore, la prossima volta presta più attenzione in quale sezione metti i tuoi post; questa volta esso è stato spostato, da un moderatore della sezione di lingua Inglese, nella sezione di lingua Italiana ... la prossima volta potrebbe venire direttamente eliminato, dopo di che ...

... essendo il tuo primo post, nel rispetto del regolamento della sezione Italiana del forum (… punto 13, primo capoverso), ti chiedo cortesemente di presentarti IN QUESTO THREAD (spiegando bene quali conoscenze hai di elettronica e di programmazione ... possibilmente evitando di scrivere solo una riga di saluto) e di leggere con molta attenzione tutto il succitato REGOLAMENTO ... Grazie.

Guglielmo

P.S.: Ti ricordo che, purtroppo, fino a quando non sarà fatta la presentazione nell’apposito thread, nel rispetto del suddetto regolamento nessuno ti risponderà (eventuali risposte verrebbero cancellate), quindi ti consiglio di farla al più presto. :wink:

Mi dispiace, per la lingua è stata una disattenzione. Non sono un nuovo iscritto, ho anche il badge editor, onestamente pensavo di aver già fatto la presentazione. Comunque ho provveduto a presentarmi nuovamente. Grazie e buona giornata

Guarda, basta che vai nel tuo profilo e scegl il TAB "Activity" ... ti appariranno tutti i tuoi post ... ne risultano in tutto TRE, i due di questo thread più la presentazione ... di più non so dirti ... :roll_eyes:

Non è che magari avevi un'altro account ? ? ?

Guglielmo

Io mando regolarmente dati su MySQL di Aruba e dopo li leggo con dei programmi PHP sempre su Aruba.

Mi sono accorto, però, che se hai un database su Aruba e il sito che li va a leggere su un altro provider, non c'è modo di leggerli o scriverli.
E questo pare sia una cosa normale per chi usa SQL....

Probabilmente il webserver va configurato per accettare le Cross-origin resource sharing (CORS ) ammesso che sia concesso dal provider.

Bisognerebbe andare a vedere i log per capire cosa succede ed intervenire di conseguenza.

P.S.
Comunque se hai solo esigenze di salvare dati su un database, prova a valutare l'ottimo Firebase di Google.
Non è necessario alcun hosting e c'è una libreria molto completa per Arduino.

Purtroppo non ho accesso ai log del server e praticamente non c'è assistenza tecnica. Non ho mai usato Firebase proverò a dargli uno sguardo. Hai un suggerimento per una libreria valida da usare?
Grazie per l'aiuto

Grazie, a me basterebbe inviare i dati ad un solo host. Se non riesco a risolvere proverò con Aruba. Purtroppo non mi sembra abbiano hosting gratuiti.

La libreria a cui mi riferivo è questa che ovviamente funziona solo con mcu ESP.

Tieni conto che Firebase concettualmente è molto diverso dal classico transazionale/relazionale come mySQL quindi devi rivedere un po' l'approccio ai dati.
Ci sono ottimi video proprio nell'help online di Firebase.

Prova a googolare mysql vs firebase per valutare le differenze e capire se fa al caso tuo.

Da quello che dici io direi di sì a grandi linee.
Se vuoi domani ti giro un paio di sketch che avevo fatto tempo fa per provare il servizio.

Grazie!
Proverò sicuramente ad utilizzarla. Intanto volevo dirvi che sono riuscito a postare i dati su server. Ho replicato un headet HTTP identico a quello creato dalla pagina web per l'inserimento manuale ed adesso il server remoto accetta i dati. La differenza sostanziale rispetto a prima è la presenza della stringa cookie. Evidentemente se non si accettano i cookies il server rifiuta la chiamata. Spero possa essere utile anche per altri. Di seguito il codice che funziona:

    if (client.connect("xxxx.byethost31.com", 80)) {
        Serial.println("connected");
        // Make a HTTP request:
        client.println("GET /getdata.php?api_key=xxxxx&value1=5&value2=8&value3=7&submit_b= HTTP/1.1\r\n" +
                        String("Host: xxx.byethost31.com\r\n") +
                        "Connection: keep-alive\r\n" +
                        "Upgrade-Insecure-Requests: 1\r\n" +
                        "User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.159 Safari/537.36 Edg/92.0.902.84\r\n"+
                        "Accept-Encoding: gzip, deflate\r\n"+
                        "Accept-Language: it,it-IT;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6\r\n"+
                        "Cookie: __test=6da6bc972c111037e5a4e2ad0a51ceb5\r\n"+
                        "\r\n");

        while (client.available()) {

          char c = client.read();

          Serial.write(c);
        }
        client.println("Connection: close");
      }

This topic was automatically closed 120 days after the last reply. New replies are no longer allowed.