Go Down

Topic: arduino gsmShield e stringa GET da trasmettere (Read 983 times) previous topic - next topic

roberto123

Salve, sono nuovo in questo forum e sto cercando di comprendere come avviene la trasmissione di dati mediante l'accoppiata arduino uno e gsm shield. Ho provato a cercare in internet, ma quasi tutti gli sketch fanno riferimento alle schede ethernet e nonostante abbia effettuato molti tentativi di modifica, gli esiti sono piuttosto deludenti. Nel dettaglio, ho scritto una pagina jsp che è ospitata in un server remoto ed avrei bisogno di trasmettere a tale pagina una stringa GET che deve essere opportunamente "costruita" da arduino e che deve contenere contenente le coppie "nome=valore" cosi come riportato nella stringa che segue
Code: [Select]
insertDbDaArduino.jsp?idSensore=1&tipoSensore=3&misura=35&dataRilevazione=2015/11/03&ipAddress=null&ks_idStazione=2
tale tipo di comunicazione mi consentirebbe di memorizzare i valori nel Database che ho già predisposto e che funziona correttamente. La trasmissione di tale stringa da browser funziona correttamente e determina l'insert nel Db in maniera corretta, ma non riesco affatto a fare la stessa cosa mediante la gsm shield.
Ringrazio in anticipo chiunque volesse darmi qualche indicazione e/o schema di sketch in grado di trasmettere la stringa di cui sopra.

nid69ita

Ti invitiamo a presentarti (dicci quali conoscenze hai di elettronica e di programmazione) qui: Presentazioni
e a leggere il regolamento: Regolamento
- qui una serie di schede by xxxPighi per i collegamenti elettronici vari: ABC - Arduino Basic Connections
- qui le pinout delle varie schede by xxxPighi: Pinout
- qui una serie di link generali utili: Link Utili
my name is IGOR, not AIGOR

PaoloP

O crei la stringa e poi la spedisci con un singolo client print oppure scrivi una serie di client print intervallando le parti fisse con i print delle variabili.

roberto123

Salve PaoloP, grazie per avermi risposto.
Ne approfitto anche per presentarmi e mi scuso con la community per non averlo fatto prima. Sono un semplice appassionato di informatica ed elettronica e da un paio di mesi a questa parte mi sto addentrando nel fantastico mondo di arduino nel tentativo di capirci qualcosa e cercare di realizzare qualche piccola applicazione. In particolare ho già realizzato una web-application in java/jsp che è in grado di connettersi con un database e fornirmi report sia in forma grafica che in forma tabellare di alcuni dati di prova che ho preventivamente inserito nel DB relazionale ospitato su apposito server remoto.
Ciò premesso, durante l'attuale fase di sviluppo del mio programma non riesco a far si che la stringa GET che ho già copiato nel precedente form riesca ad arrivare a destinazione nella stessa forma in cui la si vede. Se copio tale stringa in un qualsiasi web browser la pagina jsp in ascolto sul server  mi effettua correttamente l'INSERT sul db e fa esattamente ciò che dovrebbe. Se invece "delego" l'invio di tale stringa ad arduino mediante l'apposita shield GSM, la connessione sembra avvenire correttamente, ma di fatto sul server non avviene l'inserimento. Lo sketch che uso è quello che riporto nel seguito (ho omesso per brevità le variabili ed ho considerato la stringa "statica" in quanto se anche in tale forma riuscisse ad arrivare al server, avrei risolto il mio problema). Sulla base di quanto sopra, suppongo che l'errore sia nella specifica dei percorsi, o della porta (8266)  ma sebbene abbia fatto alcune decine di tentativi, i risultati non sono quelli attesi e spero che qualcuno possa indicarmi dove sbaglio...Grazie in anticipo per il tempo che mi avete dedicato per arrivare fin qui nella lettura...
Code: [Select]
// include the GSM library
#include <GSM.h>

// PIN number if necessary
#define PINNUMBER ""

// APN information obrained from your network provider
#define GPRS_APN       "mobile.vodafone.it" // replace with your GPRS APN
#define GPRS_LOGIN     ""    // replace with your GPRS login
#define GPRS_PASSWORD  "" // replace with your GPRS password

// initialize the library instances
GSMClient client;
GPRS gprs;
GSM gsmAccess;



char server[] = "sitoprova.it"; the base URL
char path[] = "/Monitor/insertDatiDaArduino.jsp";
int port = 80; // the port, 80 for HTTP

void setup()
{
  
  // initialize serial communications
  Serial.begin(9600);
  Serial.println("Starting Arduino web client.");
  // connection state
  boolean notConnected = true;

  // Start GSM shield
  // pass the PIN of your SIM as a parameter of gsmAccess.begin()
  while(notConnected)
  {
    if((gsmAccess.begin(PINNUMBER)==GSM_READY) &
        (gprs.attachGPRS(GPRS_APN, GPRS_LOGIN, GPRS_PASSWORD)==GPRS_READY))
       {
      notConnected = false;
      Serial.println("la connessione gprs è avvenuta");
       }
    else
    {
      Serial.println("Not connected");
      delay(1000);
    }
  }

  Serial.println("connecting...");

  // if you get a connection, report back via serial:
  if (client.connect(server, port))
  {
    Serial.println("connected");
    // Make a HTTP request:
    client.print("GET ");
    //Serial.print("GET ");
    client.print(path);
    Serial.print(path);
    client.print("Host: ");
    client.println(server);
    client.println(" HTTP/1.1");
    Serial.println(" HTTP/1.1");
    client.println();
    Serial.println();
    client.println(path);
    
    Serial.println("il client è connesso" );
    
  }
  else
  {
    // if you didn't get a connection to the server:
    Serial.println("connection failed");
  }
}

void loop()
{
  // costruisco la stringa GET da passare alla pagina jsp - nota: la costruzione della stringa GET avverrà leggendo i dati dai piedini di Arduino
  String url="xxx.yyy.zzz.kkk:8266/Monitor/insertDatiDaArduino.jsp?idSensore=1&tipoSensore=3&misura=34&dataRilevazione=2015/11/02&ipAddress=null&ks_idStazione=2";
  
 
  delay (15000);
  Serial.println(url);  // prints "URL"
  //trasmetto la stringa
  client.print("GETclient.print(url)");
  //trasmetto la stringa
  
  if (client.available())
  {
    char c = client.read();
    Serial.print(c);
  }

  // if the server's disconnected, stop the client:
  if (!client.available() && !client.connected())
  {
    Serial.println();
    Serial.println("disconnecting.");
    client.stop();

    // do nothing forevermore:
    for(;;)
      ;
  }
}

PaoloP

#4
Mar 05, 2015, 06:22 pm Last Edit: Jun 29, 2015, 10:51 am by PaoloP
Prova con
Code: [Select]
#define GPRS_APN       "web.omnitel.it"
Con quello vodafone la shield mi dava un sacco di problemi.

Questo codice è funzionante
--> https://codebender.cc/sketch:95960

roberto123

Grazie PaoloP, il tuo codice mi è stato utilissimo per risolvere il problema.
Dal confronto tra il mio sketch ed il tuo che sapevo essere funzionante, ho capito che il problema era probabilmente dovuto al fatto che il mio servizio di hosting mette a disposizione apache che resta in ascolto sulla porta 8266 e non sulla 80 che è quella utilizzata dal protocollo http. Specificando tale porta al posto della variabile "port" ed aggiustando leggermente il path, il sistema funziona correttamente.
Grazie per il prezioso supporto,..a buon rendere....

Go Up