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.
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.
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.