Inviare AT COMMANDS alla GSM SHIELD

Ciao a tutti!

Sto sviluppando un progetto con la GSM SHIELD di Arduino.
Cerco di inviare AT COMMANDS al modem, ma non ottengo risposta neanche dal monitor seriale.
Credevo bastasse scrivere nello sketch un comando del tipo:

Serial.println("AT+QSRT=9");

ma non succede nulla.

Qualcuno di voi c'è mai riuscito?

in teoria sì, ma in pratica primadevi settare il baudrate, corretto, e in alcuni casi anche altri parametri (parity byte, stop byte, etc..)

Problema risolto!!! :slight_smile: :slight_smile: :slight_smile:

Con un comando del tipo:

theGSM3ShieldV1ModemCore.println("AT+QSRT=7");

si riesce a comunicare direttamente alla porta seriale della GSM SHIELD e funziona!!!
Grazie ancora Lesto per l' interessamento. Ciao!!!

fersuoch,
percaso hai trovato come si fa a leggere un risposta ricevuta da un comando AT? Ricercando nell'implementazione di GSM3Shield1ModemCore, ho provato con il seguente comando:

  Serial.write(theGSM3ShieldV1ModemCore.theBuffer().read());

Sembra funzionare, ma mi sembra un po macchinosa. Hai per caso trovato un metodo piu' semplice, che mi permetta anche di eseguire il comando solo quando e' arrivata la risposta? Del tipo simile a:

  if (mySerial.available())
    Serial.write(mySerial.read());

In particolare dovrei salvare parte della risposta in una stringa.

Per essere piu' esplicito sto cercando di ottenere il # di telefono associato con la SIM con il seguente comando:

AT+CNUM

che mi ritorna correttamente il numero di telefono.

Ciao butyouyes,

hai provato questo comando?

theGSM3ShieldV1ModemCore.theBuffer().availableBytes()

dovrebbe fare il caso tuo.

Ho visto invece, che in una tua replica sul forum della GSM Shield sei riuscito ad utilizzare un comando del tipo:

theGSM3ShieldV1ModemCore.theBuffer().extractSubstring ()

hai trovato anche un corrispondente per indexOf?

fersuoch,
si sono riuscito a risolvere il mio problema dopo aver cercato nella libreria GSM, ho trovato che extractString funziona bene, poiche' la risposta contiene altre informazioni come OK ed altro che a me non interessavano. Inizialmente avevo provato con availableBytes, ma avrei dovuto fare il parsing della risposta dassolo, mentre extactString lo fa per me. Grazie per avermi indirizzato nella strada giusta, senza il tuo suggerimento di utilizzare theGSM3ShieldV1ModemCore non ci sarei mai arrivato!

Da quello che vedo GSM3CircularBuffer (oggetto ritornato da theBuffer()) non contiene nessun metodo paragonabile a indexOf (cioe' che ritorna in 'int' quando gli dai un 'char' o 'String'). Se hai l'accesso alla libreria GSM, GSM3CircularBuffer ha degli altri metodi che potrebbero essere utili per risolvere cio' che potresti risolvere con indexOf.

Una possible soluzione potrebbe ad esempio essere utilizzando theBuffer().retrieveBuffer, che ti salva il contenuto del buffer in un array di char, poi puoi creare una nuova String con il questo char array e quindi utilizzare indexOf. Un po macchinoso ma se hai abbastanza memoria dovrebbe funzionare...

In bocca al lupo.