Collegamento seriale MEGA-GPRS

Buona domenica a tutti!

Sicuramente mi sfugge qualcosa ma non ne vengo a capo…

Ho collegato il MEGA2560 con una scheda GPRS e utilizzando librerie reperite on-line il tutto funziona (sono quindi sicuro che i collegamenti/ponticelli sono corretti). La scheda GPRS è collegata alla Seriale numero 1 della MEGA

Adesso, volendo capire come funzionano queste librerie e i relativi comandi AT ho intenzione, riga per riga di riscrivere il codice di comunicazione (non ho toccato nessun tipo di collegamento rispetto al test precedente) per capire la logica delle singole istruzioni.

Già dopo due righe di codice però mi sono bloccato: - ho inizializzato la seriale per la comunicazione con il PC e funziona; - ho inizializzato la seriale 1 per comunicazione con GPRS ma non funziona

Cosa ho dimenticato? Bisogna inizializzare qualcosa anche lato GPRS? Dalle librerie non riesco a capire il funzionamento. Scusatemi se è una stupidaggine ma non capisco.

const unsigned int baud_rate_seriale = 9600;      
const unsigned int baud_rate_sim900 = 9600;     
                                                  

void setup(){
    
    // Inizializzazione porta seriale e attesa di risposta
    Serial.begin(baud_rate_seriale);
    delay(10);
    while (!Serial) {
    ; 
    }
    
    Serial.println(F("Inizializzazione seriale avvenuta con successo"));

    // Inizializzazione Serial1 per comunicazione con SIM900
    Serial1.begin(baud_rate_sim900);
    delay(500);
    if (Serial1.available()>0){
      Serial.println(F("Comunicazione con SIM900 avvenuta con successo"));
    }else{
      Serial.println(F("Problemi di comunicazione con SIM900"));
    }
  
         
} // Fine setup

void loop(){

} // Fine loop

Non ne vengo a capo. Grazie Ciao, Giuliano

Sei sicuro che il baudrate é giusto?

E' lo stesso valore utilizzato nel test con le librerie. Bho...

Attenzione al baud-rate come dice uwefed: nei programmi di esempio che ho trovato impostano 19200 baud.

Leggi questo tutorial: sim900-gsm-gprs-shield-arduino

ho provato anche con 19200...niente.. Ma ripeto con 9600 utilizzando le librerie funziona. Probabilmente ci sarà qualche altro settaggio fatto dalle librerie che non riesco a trovare.

JulianusGM:
ho provato anche con 19200…niente…
Ma ripeto con 9600 utilizzando le librerie funziona.
Probabilmente ci sarà qualche altro settaggio fatto dalle librerie che non riesco a trovare.

Prima di continuare, mi confermi che possiedi ESATTAMENTE il modello di SIM900 (SIM900 GSM GPRS Shield) riportato nelle foto del tutorial di cui ti ho fornito il link?

Se la risposta è affermativa, ho provato a fare un programma di test che va semplicemente a richiedere una sola volta l’identificativo numerico del SIM900 e lo stampa sul monitor seriale, quindi Arduino deve essere collegato al PC col monitor seriale aperto.

Ecco come come procedere per fare la prova:

Scolleghi tutto ciò che è collegato ad Arduino. Colleghi Arduino al PC con l’USB. Carichi il seguente programma:

#include <SoftwareSerial.h>

SoftwareSerial SIM900(7, 8);
bool flag = false;

void setup() {

  Serial.begin(9600);
  while (!Serial);   //attesa per inizializzazione seriale

  SIM900.begin(19200);
  // Give time to your GSM shield log on to network
  delay(20000);

  SIM900.println("AT+CGSN"); //Richiesta identificazione modello
  delay(100);

}

void loop() {

  if (SIM900.available() && !flag) {
    Serial.print("Modello SIM900: ");
    Serial.println(SIM900.read());
    delay(100);
    flag = true;
  }

}

Stacchi l’Arduino dal PC e, ad alimentazione tolta sia per l’Arduino che per il SIM900, fai i collegamenti elettrici come nella seguente immagine:


Nella foto si vede Arduino UNO, ma il mega ce li ha lo stesso i PIN 7 e 8.

Alimenti prima il SIM900 e poi ricolleghi Arduino al PC. Infine vedi se, dopo circa 20 secondi, il monitor seriale dà segni di vita. Sappimi dire.

Ciao e grazie della risposta. Allora.... Avevo già provato a fare qualcosa del genere (non esattamente così, ma molto simile), utilizzando la software serial come suggerisci tu e tutto funziona correttamente. Ma funziona correttamente anche la Serial Hardware... se utilizzo le librerie trovate in rete.

Ora stavo facendo ulteriori prove e mi sembra di aver trovato la soluzione... Praticamente se dò un ritardo di mezzo secondo nella "lettura" dei dati proveniente dal SIM900 sembra funzionare. Il baud impostato è comunque 9600 dato che con 19200 non va. Ora faccio altri test e poi ti dico.

Ancora grazie.