AT+CIPSTART="TCP","www.google.it","80"
OK
CONNECT OK
AT+CIPSEND
> GET
www.google.it
HTTP/1.0\nHost:
www.google.it
\n
User-Agent: Arduino
\n\n
_
SEND OK
CLOSED
ma il risultato non è cambiato...
ho provato anche il nuovo esempio che mi hai linkato ma non è cambiato nulla...
gli esempi si intoppano ed "crashano" nel inetGSM.cpp proprio all'inizio della funzione httpGET, alla riga if(!gsm.connectTCP(server, port))
** return 0;**
questa è la funzione...
int InetGSM::httpGET(const char* server, int port, const char* path, char* result, int resultlength)
{
int length_write;
char end_c[2];
end_c[0]=0x1a;
end_c[1]='\0';
if(!gsm.connectTCP(server, port))
return 0;
gsm.SimpleWrite("GET ");
gsm.SimpleWrite(path);
gsm.SimpleWrite(" HTTP/1.0\nHost: ");
gsm.SimpleWrite(server);
gsm.SimpleWrite("\n");
gsm.SimpleWrite("User-Agent: Arduino");
gsm.SimpleWrite("\n\n");
gsm.SimpleWrite(end_c);
switch(gsm.WaitResp(10000, 100, "SEND")){
case RX_TMOUT_ERR:
return 0;
break;
case RX_FINISHED_STR_NOT_RECV:
return 0;
break;
}
Serial.println("SENT");
int res= gsm.read(result, resultlength);
//gsm.disconnectTCP();
//int res=1;
return res;
}
in pratica la funzione connectTCP restituisce false e quindi termina la httpGET.
Ora sto cercando di capire a che punto della funzione connectTCP si interrompe il flusso del programma...
la mia pazienza si sta esaurendo :0
ora prendo zio Arduino e lo frullo dalla finestra!!
Dai dai resisti ...
Allora,
nel file SIM900.cpp
c'è la funzione int SIMCOM900::connectTCP(const char* server, int port){
prova a decommentare i Serial.println di DEBUG come "CONNECTED" e "RCVD INPUT"
compila e ricarica, e vediamo cosa esce fuori lanciando lo sketch.
(Ti compare il tuo IP durante l'avvio?)
Altro consiglio, nel file di esempio AT, gli puoi assegnare delle funzioni alla scritta TEST, tipo gsm.connectTCP("www.google.it",80);
così basta scrivere TEST sulla serial monitor per fare le prove.
Tengo duro...
il problema da quanto capisco è che quando esegue nello sketch il comando gsm.attachGPRS il programma non passa in stato ATTACHED ma rimane in READY e quindi successivamente nella funzione connectTCP esce...
i serial.println di DEBUG sono già NON commentati, il programma termina prima, non c'arriva neanche su quelle righe...
EUREKA!!!
Ho avuto un response decente dal web server di Google!! Yabadabaduuuuuu
GSM Shield testing.
status=READY
Byte: 0
OK
OK
ERROR
ERROR
109.114.125.79
OK
CONNECT
SEND OK
HTTP/1.0 302 Found
Location: http://www.google.it/
Cache-Control: private
Content-Type:ttm aeU8S-o:R==6832:=T106:=295=RVOjcxr=u2e238: Tp= mnglc
t e2D2183 TSv sCt-nh2
X-otn1meo
-aOisSOG
M<A<at-u=nnteoe=xhlhsu->TE0Me/L<E>D
12odH
ce v
Fhp/woetheA
/Y/M
CLOSED
e l'ho fatto da uno sketch inviando direttamente i comandi AT senza usare la libreria.
Certo ho saltato tutti controlli sui vari stati della connesione che fa la libreria... ma è un inizio...
In realtà nella gsm.connectTCP il controllo sullo stato è commentato (è stata adattata un'altra libreria per l'inplementazione del GPRS e alcune cose devono ancora essere sistemate).
Ho caricato un nuovo file .zip su googlecode. Test.zip
Prova con quella libreria.
Altra cosa IMPORTANTISSIMA... Quando uno preme sul RESET si resetta solamente l'Arduino! Il modulo no... di conseguenza se per caso sta in modalità ricezione testo (tipo dopo AT+CIPSEND) li non risponde più a nessun comando e sembra non funzionare. Ad ogni riavvio di Arduino è consigliabile effettuare qualche secondo prima un reset della SIM900 (togliendo l'alimentazione).
Buonasera,
scusate se mi intrometto ma anche io sto avendo problemi con la libreria.
Sto usando lo stesso shield di ghini76, preso da Futura Elettronica, e Arduino IDE 1.0
Non riesco a far funzionare nemmeno lo sketch GSM_GPRSLibrary_AT!
oltre al fatto che impiega più di 30 secondi per ottenere status=READY, questo è quello che ottengo da serial monitor:
GSGSM Shield testing.
status=READY
AT
come vedete non risponde al comando AT...
qualcuno più esperto di me può gentilmente darmi una mano? Per ora ho la sensazione di aver buttato 63 euro :~
evildeejay:
In realtà nella gsm.connectTCP il controllo sullo stato è commentato (è stata adattata un'altra libreria per l'inplementazione del GPRS e alcune cose devono ancora essere sistemate).
Ho caricato un nuovo file .zip su googlecode. Test.zip
Prova con quella libreria.
Altra cosa IMPORTANTISSIMA... Quando uno preme sul RESET si resetta solamente l'Arduino! Il modulo no... di conseguenza se per caso sta in modalità ricezione testo (tipo dopo AT+CIPSEND) li non risponde più a nessun comando e sembra non funzionare. Ad ogni riavvio di Arduino è consigliabile effettuare qualche secondo prima un reset della SIM900 (togliendo l'alimentazione).
Marco
Wow non avevo idea di scrivere con uno dei padri della libreria! Complimenti
Ho provato la nuova libreria (test.zip) ma ho gli stessi problemi....
riguardo al pulsante reset sapevo già che resetta solo Arduino... per oggi penso che possa bastare... riprenderò domattina con rinnovato vigore :)...
marchins:
Buonasera,
scusate se mi intrometto ma anche io sto avendo problemi con la libreria.
Sto usando lo stesso shield di ghini76, preso da Futura Elettronica, e Arduino IDE 1.0
Non riesco a far funzionare nemmeno lo sketch GSM_GPRSLibrary_AT!
oltre al fatto che impiega più di 30 secondi per ottenere status=READY, questo è quello che ottengo da serial monitor:
GSGSM Shield testing.
status=READY
AT
come vedete non risponde al comando AT...
qualcuno più esperto di me può gentilmente darmi una mano? Per ora ho la sensazione di aver buttato 63 euro :~
Ciao Marchins, allora la libreria per quanto rigaurda gli SMS e Chiamate è perfettamente funzionante, per adattarla al nuovo IDE 1.00 è sufficiente seguire le seguenti istruzioni:
The WProgram.h file, which provides declarations for the Arduino API,
has been renamed to Arduino.h. To create a library that will work in
both Arduino 0022 and Arduino 1.0, you can use an #ifdef that checks
for the ARDUINO constant, which was 22 and is now 100. For example:
Per il capitolo GPRS la libreria è in fase Beta, ti consiglio di rimanere sempre aggiornato tramite google code http://code.google.com/p/gsm-shield-arduino/downloads/list
dove usciranno release mano mano che emergono i nuovi problemi che speriamo di risolvere.
Penso che il tuo problema sia lo stesso che aveva ghini76 all'inizio del topic (ossia i pin 2 e 3), a momenti carico una nuova versione della libreria
dove è possibile selezionare dallo sketch stesso i pin utilizzati. Controlla la pagina dei download (su google code) tra una mezz'oretta
Aggiornato, ora è presente la versione 3.03 che dovrebbe risolvere il problema dei Pin, fammi sapere
Un'ultima cosa,
ho fatto questo sketch per fare una GET con i comandi AT a un webserver, come dicevo in qualche post fa sono riuscito ad avere una risposta decente dal web server di Google ma funziona solo con certi domini e non capisco perchè....
#include "SIM900.h"
#include <SoftwareSerial.h>
char msg[150];
int numdata;
char inSerial[40];
int i=0;
char* result;
int resultlength;
void setup()
{
char end_c[2];
end_c[0]=0x1a;
end_c[1]='\0';
//Serial connection.
Serial.begin(9600);
Serial.println("GSM Shield testing.");
//Start configuration of shield with baudrate.
//For http uses is raccomanded to use 4800 or slower.
if (gsm.begin(9600))
Serial.println("\nstatus=READY");
else Serial.println("\nstatus=IDLE");
delay(10000);
gsm.SimpleWrite("AT");
delay(2000);
gsm.SimpleWrite("AT+CSTT=\"mobile.vodafone.it\",\"\",\"\"");
delay(2000);
gsm.SimpleWrite("AT+CIICR");
delay(2000);
gsm.SimpleWrite("AT+CIFSR");
delay(2000);
//gsm.SimpleWrite("AT+CIPSTART=\"TCP\",\"91.81.87.70\",80\r");
gsm.SimpleWrite("AT+CIPSTART=\"TCP\",\"www.aruba.it\",80\r");
//gsm.SimpleWrite("AT+CIPSTART=\"TCP\",\"www.softwellitalia.it\",80\r");
//gsm.SimpleWrite("AT+CIPSTART=\"TCP\",\"173.194.35.20\",80\r");
delay(4000);
gsm.SimpleWrite("AT+CIPSEND");
delay(2000);
gsm.SimpleWrite("GET ");
//gsm.SimpleWrite("/custos/ricevi.aspx?op=2&id=1");
//gsm.SimpleWrite("/custos/ricevi.aspx");
gsm.SimpleWrite("/");
gsm.SimpleWrite(" HTTP/1.0\nHost: ");
//gsm.SimpleWrite("91.81.87.70");
gsm.SimpleWrite("www.aruba.it");
//gsm.SimpleWrite("www.softwellitalia.it");
//gsm.SimpleWrite("173.194.35.20");
gsm.SimpleWrite("\n");
gsm.SimpleWrite("User-Agent: Arduino");
gsm.SimpleWrite("\n\n");
gsm.SimpleWrite(end_c);
int res= gsm.read(result, resultlength);
Serial.print("Byte: ");
Serial.println(res);
};
void loop()
{
//Read for new byte on serial hardware,
//and write them on NewSoftSerial.
serialhwread();
//Read for new byte on NewSoftSerial.
serialswread();
};
void serialhwread(){
i=0;
if (Serial.available() > 0){
while (Serial.available() > 0) {
inSerial[i]=(Serial.read());
delay(10);
i++;
}
inSerial[i]='\0';
if(!strcmp(inSerial,"/END")){
Serial.println("_");
inSerial[0]=0x1a;
inSerial[1]='\0';
gsm.SimpleWrite(inSerial);
}
//Send a saved AT command using serial port.
if(!strcmp(inSerial,"TEST")){
Serial.println("SIGNAL QUALITY");
gsm.SimpleWrite("AT+CSQ");
}
//Read last message saved.
if(!strcmp(inSerial,"MSG")){
Serial.println(msg);
}
else{
Serial.println(inSerial);
gsm.SimpleWrite(inSerial);
}
inSerial[0]='\0';
}
}
void serialswread(){
gsm.SimpleRead();
}
con google.it e google.com funziona come con trenitalia.it e libero.it.
Ma ad esempio con aruba.it, globalitalia.it oltre che con un mio server puntando al suo IP pubblico non funziona.
GSM Shield testing.
status=READY
Byte: 0
OK
Call Ready
OK
OK
OK
2.42.151.214
OK
C
SEND OK
HTTP/1.0 302 Found
Location: http://www.google.it/
Cache-Control: private
Content-Type:ttt;aeU-S-oeP==b530aF:1573=229=U42xgeisu2D-3333Tph;mnggc
a:u2D 1333M
v:wCttet2
-Soco melkXa-tn EIN
T>E>thpqvoe-ecttt/mcr=f"<T3 v/T>HDO>H3Me/>eomtaodAE"t/woli"r/.<O<T>
CLOSED
quando non funziona ho il seguente output:
GSM Shield testing.
status=READY
Byte: 0
OK
OK
ERROR
ERROR
2.45.201.160
OK
CONNECT O
SEND OK
HTTP/1.1 400 Bad Request
Content-Type: text/html
Date: Tue, 27 Dec 2011 23:37:48 GMT
Coei:l
oe-g:4
haRutnl Lh
CLOSED
E comunque anche il response del GET su google.it contiene un po' troppi caratteri strani secondo me.
Secondo voi a cosa sono dovuti questi due problemucci?
@ghini76
Stavo cercando di capire dove potrebbe essere il problema, ma non riesco veramente a capire ma ce la faremo!
Per i caratteri strani:
Prova ad abbassare il baudrate con il SIM900, di solito con il download di pagine web è consigliabile 2400 o 4800. Nella mia esperienza, se alzo a 9600, salta un po' di caratteri. Per quanto riguarda il problema della libreria, potresti inviarmi l'output di un gsm.connectTCP("www.google.it",80) (anche domani mattina se preferisci) decommentando i print di debug dentro al file SIM900.cpp (nella funzione connectTCP righe 199, 210,222)
La versione nuova caricata è leggermente diversa dalla test.zip quindi non credo che ti potrà aiutare.. però non si sa mai
Dimenticavo (sarà l'ora) della prima domanda.
La GET request non è proprio identica per tutti i siti: alcuni richiedono per forza alcuni parametri, altri no.
Infatti il server risponde: Bad Request.
Questo è appunto ciò che ti dicevo, dovresti vedere quali sono i parametri che vogliono i siti e provare ad aggiungerli.
(Può essere pure che durante la comunicazione si perda un carattere e il server non riconosce più la richiesta)
A segnale come sei messo?
AT+CSQ?
Buongiorno evildeejay,
allora questo è l'output della funzione gsm.connectTCP("www.google.it",80) fatto con l'ultima versione della libreria scaricata questa mattina:
GSM Shield testing.
status=READY
status=ATTACHED
Number of data received:
0
Data received:
Come vedi non arriva proprio a quelle righe... ma a te funziona?
Per quello che riguarda il mio sketch che invia i comandi AT ho provato a cambiare la velocità del gsm.begin sia a 2400 che a 4800 e il programma non funzionaproprio. Si blocca dopo status=READY... bah
Per la GET è sicuramente come dici te visto che mi sembra di notare che tutti i server che mi rispondono con "bad request" sono tutti IIS6. Mi sono collegato con il telnet sulla porta 80 ed è bastato inviargli "GET /[path]\n\n" e mi ha restituito correttamente la pagina. Mi studierò il metodo GET sul sito del W3.
//Send a saved AT command using serial port.
if(!strcmp(inSerial,"TEST")){
Serial.println("TCP");
gsm.connectTCP("www.google.it",80);
}
In modo che dopo i soliti comandi per connettersi:
AT+CSTT="...
AT+CIICR
AT+CIFSR
invii un comando TEST, e vediamo l'output.
A me ovviamente funziona (non sono ancora così pazzo ma ci siamo vicini)...
La cosa che mi viene in mente è che io ho usato sempre Wind per i miei test, e magari Vodafone
ha dei tempi sui timeout diversi (per questo ti chiedevo l'output di gsm.connectTCP).
Tranquillo
Bene.. allora esegue la connessione correttamente (escluderei dunque il problema della Vodafone), riceve l'ok "CONNECT OK" e manca l'ultimo controllo "MOD INVIO"... ossia non vede il ">" che gli consente di inviare i dati.
Dopo aver eseguito la funzione TEST il modulo risponde ai comandi AT? o entra appunto nella "modalità invio" quindi non fa nulla se non riceve un /END?