SIM800L problema connessione GSM

Buongiorno a tutti,

Il mio problema è il seguente: dopo aver collegato la scheda SIM800L al mio arduino uno, e una volta fatti tutti i passaggi di inizializzazione (led lampeggia una volta ogni 3 sec.), al comando per settare l'APN (sim Things Mobile e APN: TM), il comando restituisce 0 al posto di 1.
Inoltre una volta che passo quel comando, il led lampeggia 3 volte al secondo, segno che è connesso al GPRS.

Qualcuno mi saprebbe spiegare il motivo/indicare cosa sbaglio?

Segue il codice e il messaggio di "errore".

#include <SoftwareSerial.h>



#define SIM800_TX_PIN 2 
#define SIM800_RX_PIN 3 


//Create software serial object to communicate with SIM800
SoftwareSerial serialSIM800(SIM800_TX_PIN,SIM800_RX_PIN);


 
void setup() {
  //Begin serial comunication with Arduino and Arduino IDE (Serial Monitor)
  Serial.begin(9600);
  while(!Serial);
   
  //Being serial communication witj Arduino and SIM800
  serialSIM800.begin(9600);
  Serial.println("Initializing...");
  delay(6000);
  serialSIM800.println("AT"); //Once the handshake test is successful, it will back to OK
  updateSerial();
  serialSIM800.println("AT+CSQ"); //Signal quality test, value range is 0-31 , 31 is the best
  updateSerial();
  serialSIM800.println("AT+CCID"); //Read SIM information to confirm whether the SIM is plugged
  updateSerial();
  serialSIM800.println("AT+CREG?"); //Check whether it has registered in the network
  updateSerial();
  serialSIM800.println("AT+CGATT?"); //Check whether GPRS is attached
  updateSerial();
  Serial.println("Setup Complete!");
  delay (1000);
  
}
 
void loop() {
  boolean flag_data=1;
  if(flag_data==1){
    getdata();
    flag_data = 0;
  }
  updateSerial();
}


void updateSerial()
{
  delay(500);
  while (Serial.available()) 
  {
    serialSIM800.write(Serial.read());//Forward what Serial received to Software Serial Port
  }
  while(serialSIM800.available()) 
  {
    Serial.write(serialSIM800.read());//Forward what Software Serial received to Serial Port
  }
}


void getdata(){
  Serial.println("Get data HTTP");
  //set up GPRS, connection type
  serialSIM800.print("AT+SAPBR=3,1,\"CONTYPE\",\"GPRS\"\r");
  delay(1000);
  // set the APN
  serialSIM800.print("AT+SAPBR=3,1,\"APN\",\"TM\"\r");
  delay(1000);
  //tries to connect to GPRS
  serialSIM800.print("AT+SAPBR=1,1\r");
  delay(2000);
  // initialise embedded HTTP ruttine
  serialSIM800.print("AT+HTTPINIT\r");
  delay(2000);
  // set the HTTP session
  serialSIM800.print("AT+HTTPPARA=\"CID\",1\r");
  delay(1000); 
  // set the HTTP URL
  serialSIM800.print("AT+HTTPPARA=\"URL\",\"mio_URL\r");
   delay(1000);
  // start the session
  serialSIM800.print("AT+HTTPACTION=0\r");
  delay(10000);
  // read the data of the HTTP server
  serialSIM800.print("AT+HTTPREAD\r");
  delay(1000);
  // terminate the HTTP server
  serialSIM800.print("AT+HTTPTERM\r");
  delay(100);
  serialSIM800.println();
}

Il serial monitor restituisce invece:

Initializing...
AT

OK
AT+CSQ

+CSQ: 25,0

OK
AT+CCID

XXXXXXXXXXXXXXXXX

OK
AT+CREG?

+CREG: 0,5

OK
AT+CGATT?

+CGATT: 0

OK
Setup Complete!
Get data HTTP
AT+SAPBR=3,1,"CONTYPE","GPRS"

OK
AT+SAPBR=3,1,"APN","TM"

OGet data HTTP

AT+SAPBR=3,1,"CONTYPE","GPRS"

OK
AT+SAPBR=3,1,"APN","TM"

Get data HTTP

AT+SAPBR=3,1,"CONTYPE","GPRS"

OK
AT+SAPBR=3,1,"APN","TM"

Get data HTTP

Come si può notare, il comande AT+SAPBR=3,1,"APN","TM" restituisce 0 e poi va in loop.

Grazie per l'aiuto!

P.S. Ho parlato con Things Mobile e mi hanno confermato che l'APN sia bene TM.

Buongiorno,
essendo il tuo primo post, nel rispetto del regolamento della sezione Italiana del forum (… punto 13, primo capoverso), ti chiedo cortesemente di presentarti IN QUESTO THREAD (spiegando bene quali conoscenze hai di elettronica e di programmazione ... possibilmente evitando di scrivere solo una riga di saluto) e di leggere con molta attenzione tutto il su citato REGOLAMENTO ... Grazie. :slight_smile:

Guglielmo

P.S.: Ti ricordo che, purtroppo, fino a quando non sarà fatta la presentazione nell’apposito thread, nessuno ti potrà rispondere, quindi ti consiglio di farla al più presto. :wink:

Fatto! :wink: Mannaggia a me, mi ero fermato al punto 10 del regolamento

Porta quel ...

boolean flag_data=1;

fuori dal loop() e riprova.

Guglielmo

Portato fuori il boolean flag_data dal void loop, ma non cambia nulla.

Il comando ritorna la "O" di OK e poi si blocca.

La stranezza è che dal portale della sim, mi dice che sto consumando dati GPRS e che sono connesso alla rete.

Lola_health:
Portato fuori il boolean flag_data dal void loop, ma non cambia nulla.

Il comando ritorna la "O" di OK e poi si blocca.

Quindi cambia ... :slight_smile:
Prima perdevi il contenuto della flag (v_isto che l'avevi dichiarata locale nel loop_), ora, almeno, quello è sistemato.

Sicuro che non stai mal interpretando la risposta e che in realtà sei regolarmente connesso e che il tutto funziona ?

Guglielmo

Non credo, perché si blocca e non lancia i comandi successivi ("AT+SAPBR=1,1\r", "AT+HTTPINIT\r", etc.)

Inoltre, siccome mi segnala sul protale della sim, che questa è connessa al GPRS ho provato a togliere i comandi (forse inutili nel mio caso, ma mi farebbe strano)

serialSIM800.print("AT+SAPBR=3,1,\"CONTYPE\",\"GPRS\"\r");
delay(1000);
// set the APN
serialSIM800.print("AT+SAPBR=3,1,\"APN\",\"TM\"\r");
delay(1000);

e il codice procede senza errori per i seguenti comandi

//tries to connect to GPRS
  serialSIM800.print("AT+SAPBR=1,1\r");
  delay(2000);
  // initialise embedded HTTP ruttine
  serialSIM800.print("AT+HTTPINIT\r");
  delay(2000);
  // set the HTTP session
  serialSIM800.print("AT+HTTPPARA=\"CID\",1\r");
  delay(1000);

ma poi non lancia mai il comando

serialSIM800.print("AT+HTTPPARA=\"URL\",\"mio_URL\"\r");

Ovvero ritorna OK a AT+HTTPPARA=CID,1 e poi si blocca