Collegare Arduino a MySql con GSM Shield

Ciao a tutti. Apro questo topic per chiedervi un aiuto.

Il mio obiettivo è quello di collegare il mio Arduino Uno ad un DataBase Mysql che si trova online, in modo da trasferire in automatico le letture sul database.

La scheda che voglio utilizzare è una GSM shield in quanto le letture saranno fatte all'aperto.

Per la connessione ad internet non ho problemi ma non riesco a inserire le letture nel DataBase; infatti mi scrive "Errore nell'inserimento dei dati.Non c'è connessione con il server!!!" così come ho impostato nel listato. Posto di seguito il listato che ho scritto:

// INCLUDO LA LIBRERIA GSM

#include <GSM.h>

// DEFINISCO IL "PIN" DELLA SCHEDA "TIM"

#define PINNUMBER ""

// DEFINISCO I PARAMETRI APN DELLA SCHEDA "TIM"

#define GPRS_APN       "WAP.TIM.IT"
#define GPRS_LOGIN     "WAPTIM"
#define GPRS_PASSWORD  "WAPTIM"

// INIZIALIZZO LE ISTANZE DELLA LIBRERIA

GSMClient client;
GPRS gprs;
GSM gsmAccess;

// IMPOSTO I PARAMETRI DEL SERVER, PORTA, SENSORE E DEL FILE DOVE SALVARE I DATI

char server[] = "**************"; 
int port = 21;
int valore = 0;

// IMPORTO IL FILE .PHP PER INSERIRE I DATI IN MYSQL IN RETE

char path[] = "datatransfer/pass.php"; 
char key[] = "";

void setup()
{
// APRO LA PORTA SERIALE
  
Serial.begin(9600);
Serial.println("Avvio di Arduino...");
  
// STATO DELLA CONNESSIONE
  
boolean notConnected = true;

// AVVIO GSMACCESS E VERIFICO CHE "PIN" E "APN" SIANO RICONOSCIUTI

while(notConnected)
{
  if((gsmAccess.begin(PINNUMBER)==GSM_READY) &
  (gprs.attachGPRS(GPRS_APN, GPRS_LOGIN, GPRS_PASSWORD)==GPRS_READY))
  notConnected = false;
  else
{
  Serial.println("Non connesso a internet !!!");
  delay(1000);
}
}

Serial.println("In fase di connessione a internet...");

// SE LA SCHEDA SI CONNETTE A INTERNET RIPORTA IL SERIALE AL FILE .PHP
  
if (client.connect(server, port))
{
  Serial.println("Sono sonnesso a internet!!!");
    
  client.print("GET ");
  client.print(path);
  client.println(" HTTP/1.0");
  client.println();
} 
else
{
  Serial.println("Connessione a internet fallita!!!");
}
}

void loop() {
  
// LETTURA TEMPERATURA

Serial.println ("Lettura temperatura");
Leggi_sensore();
Invio_dati();
delay(3000);
}

void Leggi_sensore() {
  
valore = analogRead(A0);
Serial.println(valore);

}

void Invio_dati() {

Serial.println("Invio dati a Mysql in corso...");

// SE HO UN COLLEGAMENTO I DATI VIA SERIALE

if (client.connect(server, port)) {

  // FACCIO UNA RICHIESTA HTTP:
  client.print("GET /server/pass.php?name=primoInserimentoSerio HTTP/1.1");
  client.print(path);
  client.print("?data=");
  client.print("&check=");
  client.print(key);
  client.print("Host: ***************** ");
  client.println(server);
  client.println();
  Serial.println("Dati inseriti correttamente nel database!!!");
}
else {
  Serial.println("Errore nell'inserimento dei dati.Non c'è connessione con il server!!!"); 
}
}

Mi rendo conto che il listato è un pochino lungo ma spero che qualcuno mi possa aiutare.
Grazie a tutti, ciao.

if (client.connect(server, port))

Ritorna False!
Non è connesso al server!
Ricordati di alimentare sempre arduino con un'alimentatore esterno quando usi il gsm!
In realtà vedendo il codice, la prima volta si connette giusto?
Non chiudi però il socket, cosa che potrebbe dare problemi....
Una connessione va aperta e chiusa.
Prova a mettere un close prima dell'istruzione di sopra, o meglio (da provare però) non rifare l'istruzione client.connect() ma inviare direttamente i dati.

Ciao ardurico, grazie mille per la risposta.

Premetto che non sono un grande programmatore (devo ancora imparare tanto!!!) e credo che tu lo abbia già capito dal codice che ho scritto in precedenza.
Comunque ho provato a modificare il codice nella maniera che segue e questa volta mi scrive "Dati inseriti correttamente nel database!!!" ma continua a non inserirmi le letture.

Riporto di seguito il codice che ho scritto

// INCLUDO LA LIBRERIA GSM

#include <GSM.h>

// DEFINISCO IL "PIN" DELLA SCHEDA "TIM"

#define PINNUMBER ""

// DEFINISCO I PARAMETRI APN DELLA SCHEDA "TIM"

#define GPRS_APN       "WAP.TIM.IT"
#define GPRS_LOGIN     "WAPTIM"
#define GPRS_PASSWORD  "WAPTIM"

// INIZIALIZZO LE ISTANZE DELLA LIBRERIA

GSMClient client;
GPRS gprs;
GSM gsmAccess;

// IMPOSTO I PARAMETRI DEL SERVER, PORTA, SENSORE E DEL FILE DOVE SALVARE I DATI

char server[] = "ftp.mecoman.altervista.org"; 
int port = 21; 
int valore = 0;

// IMPORTO IL FILE .PHP PER INSERIRE I DATI IN MYSQL IN RETE

char path[] = "server/pass.php"; 
char key[] = "";

void setup() {
  
// APRO LA PORTA SERIALE
  
Serial.begin(9600);
Serial.println("Avvio di Arduino...");
}

void loop() {
  
// LETTURA TEMPERATURA

Serial.println ("Lettura temperatura");
Leggi_sensore();

// INVIO I DATI A MYSQL

Invio_dati();

// ATTENDO 3 SECONDI

delay(3000);
}

void Leggi_sensore() {
  
valore = analogRead(A0);
Serial.println(valore);

}

void Invio_dati() {

Serial.println("Invio dati a Mysql in corso...");

// SE HO UN COLLEGAMENTO I DATI VIA SERIALE

boolean notConnected = true;
while(notConnected)
{
  if((gsmAccess.begin(PINNUMBER)==GSM_READY) &
  (gprs.attachGPRS(GPRS_APN, GPRS_LOGIN, GPRS_PASSWORD)==GPRS_READY))
  notConnected = false;
  else
{
  Serial.println("Non connesso a internet !!!");
  delay(1000);
}
}

Serial.println("In fase di connessione a internet...");
if (client.connect(server, port)) {

  // FACCIO UNA RICHIESTA HTTP:
  
  client.print("GET /server/pass.php? HTTP/1.1");
  client.print(path);
  client.print("?data=");
  client.print("&check=");
  client.print(key);
  client.print("Host: ftp.mecoman.altervista.org ");
  client.println(server);
  client.stop();
  client.flush();
  client.println();
  Serial.println("Dati inseriti correttamente nel database!!!");
}
else {
  Serial.println("Errore nell'inserimento dei dati.Non c'è connessione con il server!!!"); 
}
}

Arrivato a questo punto non ho capito proprio dove sbaglio e spero che tu e tutta la comunità mi possiate aiutare perché mi piacerebbe molto imparare ad inviare i dati in questo modo.

Grazie, ciao.

Nessun suggerimento?

Ciao,
se la connessione funziona, credo che un problema potresti averlo anche qui:

...
client.print("GET /server/pass.php? HTTP/1.1");
client.print(path);
client.print("?data=");
client.print("&check=");
client.print(key);
client.print("Host: ftp.mecoman.altervista.org ");
client.println(server);
...

prova a modificarlo così

...
client.print("GET /server/pass.php?data=");
client.print(data); //qui passi i tuoi dati (che non passavi)
client.print("&check=");
client.print(key);
client.println(" HTTP/1.1");
client.println("Host: ftp.mecoman.altervista.org");
client.println("Connection: close");
client.println();
...

o perlomeno riguardati l'esempio GSM \ GSMWebClient