Secondo voi, è possibile ricevere dati da un server attraverso l'utilizzo della connessione dati ?
hai provato con i comandi at? leggi qui:link
Come funzionano i comandi AT con arduino ?
fabio22:
Come funzionano i comandi AT con arduino ?
Ma sai come funziona uno shield GSM/GPRS ? ...
... perché mi sembra che non ti sia chiaro neanche come ci si comunica :
Guglielmo
So che comunica con i comandi AT, pensavo di passare attraverso seriale questi comandi AT...
Chiedere non nuoce alla salute
Nessuno è nato esperto...
Fabio
No, certo, ovviamnete ...
... per questo che uno si deve scaricare tutti i manuali dei pordotti e se li deve studiare ... proprio per capire come funzionano le cose.
Se sai che parlano via seriale, basta che ti scarichi il manuale dei comandi AT del SIM88C e vedi tutto quello che puoi fareinviandoli via seriale al modulo.
Guglielmo
... ecco se vai QUI (... è il sito del produttore ) e ti iscrivi (... altrimenti non ti fanno scaricare nulla) ... puoi scaricare tutto lo scibile sul SIM800C
Buone letture ...
Guglielmo
Grazie. Buona giornata
Penso di chiedere la penultima informazione riguardante i comandi AT.Per quanto riguarda l'invio di un messaggio o perle chiamate ci sono riuscito. Non ho capito come leggere un messaggio inviato al GSM attraverso il buffer
Parli della lettura di un messaggio SMS ? Devi guardare la sezione che riguarada i comandi AT per la lettura di essi ...
... in pratica puoi chiedere quanti ce ne sono, poi devi leggerne uno alla volta dando il numero del messaggio che vuoi leggere.
Guarta AT+CMGL , AT+CMGR , AT+CMGD
Guglielmo
AT+CMGR=[,]
Si, index è il numero d'ordine del SMS, mode è come lo vuoi leggere ... è tutto ben documentato nel manuale dei comandi AT.
Guglielmo
Piano piano sto crescendo, sicuramente grazie a voi. sono arrivato al punto di inviare dei dati a una pagina in PHP ma sono sempre bloccato nella ricezione dei dati dalla pagina PHP a arduino.
Guarda l'esempio di Arduino Ethernet -> WebClientRepeating ... li vedi che Arduno fa richieste ad un server e riceve risposte.
Guglielmo
Salve, con l'ethernet ci sono riuscito... Per quanto riguarda il GPRS ho aggiunto nel codice questa parte
while (gprsSerial.available()) {
Serial.write(gprsSerial.read());
}
ma non mi visualizza nessun dato
Non è che sul GPRS arrivano dati così da soli eh ...
... c'è un intero capitolo dedicato hai comandi AT per parlare con il GPRS (7 - AT Commands for GPRS Support) ... per ogni cosa devi mandare via seriale il comando AT e dopo verificare l'arrivo della risposta ... :
Guglielmo
void loop()
{
// initialize http service
gprsSerial.println("AT+HTTPINIT");
delay(2000);
toSerial();
Serial.println("Done!...");
// set http param value
gprsSerial.println("AT+HTTPPARA=\"URL\",\"http://controllo22.altervista.org/database.php?valore=50&localita=Sardegna\""); //controllo22.altervista.org/database.php?valore=50&localita=Sardegna
delay(2000);
toSerial();
Serial.println("Done!...");
// set http action type 0 = GET, 1 = POST, 2 = HEAD
gprsSerial.println("AT+HTTPACTION=0");
delay(6000);
toSerial();
Serial.println("Done!...");
// read server response
gprsSerial.println("AT+HTTPREAD");
delay(1000);
toSerial();
Serial.println("Done!...");
gprsSerial.println("");
gprsSerial.println("AT+HTTPTERM");
toSerial();
delay(300);
Serial.println("Done!...");
delay(10000);
}
void toSerial()
{
while (gprsSerial.available() != 0)
{
Serial.println("Done!1000...");
Serial.write(gprsSerial.read());
Serial.println(gprsSerial.read());
}
}
Nella toSerial(), nel while() fai DUE scritture sulla seriale ... ricorda che ciascura rimuove un carattere dal buffer, quindi ogni giro stampi DUE caratteri ed il CR, è questo che vuoi ?
Comunque, all'interno del while, metti un delay(5) ... o c'è il rischio che il ciclo di stampa sia più veloce della disponibilità di caratteri.
Guglielmo
Diventerà in questo modo ?
void loop()
{
// initialize http service
gprsSerial.println("AT+HTTPINIT");
delay(2000);
toSerial();
Serial.println("Done!...");
// set http param value
gprsSerial.println("AT+HTTPPARA=\"URL\",\"http://controllo22.altervista.org/database.php?valore=50&localita=Sardegna\""); //controllo22.altervista.org/database.php?valore=50&localita=Sardegna
delay(2000);
toSerial();
Serial.println("Done!...");
// set http action type 0 = GET, 1 = POST, 2 = HEAD
gprsSerial.println("AT+HTTPACTION=0");
delay(6000);
toSerial();
Serial.println("Done!...");
// read server response
gprsSerial.println("AT+HTTPREAD");
delay(1000);
toSerial();
Serial.println("Done!...");
gprsSerial.println("");
gprsSerial.println("AT+HTTPTERM");
toSerial();
delay(300);
Serial.println("Done!...");
delay(10000);
}
void toSerial()
{
while (gprsSerial.available() != 0)
{
Serial.println("Done!1000...");
Serial.println(gprsSerial.read());
delay(5);
}
}
penso che dentro il ciclo while non entra mai
Secondo me devi prima provare TU i vari comandi e vedere come risponde la scheda ...
... per fare questo devi fare un semplice programma che prende quello che tu scrivi sul monitor seriale e lo manda alla scheda e viceversa ... cambiando i pin con quelli che usi tu una cosa simile :
#include <SoftwareSerial.h>
#define SS_RX 10 // RX PIN to receive data
#define SS_TX 11 // TX PIN to transmit data
SoftwareSerial ssSerial(SS_RX, SS_TX);
void setup()
{
delay (2000);
//
Serial.begin(9600); // Initialize USB Serial port
ssSerial.begin(9600); // Initialize SoftwareSerial port
//
Serial.println("--- Ports ready ---");
Serial.println("");
}
void loop()
{
if (ssSerial.available() > 0) Serial.write(ssSerial.read());
if (Serial.available() > 0) ssSerial.write(Serial.read());
}
... così tu invii i comandi da monitor seriale e vedi le risposte che ti devi apsettare.
Guglielmo