Ricezione sms con modulo gsm tc35

Ciao a tutti. Ho acquistato da poco il modulo gsm tc35 e ho provato a fare le prime semplici operazioni di chiamata e invio sms e fin qui nessun problema. Ora vorrei che Arduino “faccia qualcosa” alla ricezione di un preciso sms il cui contenuto è, per ora, un singolo carattere. lo sketch che ho scritto è:

#include <SoftwareSerial.h>
SoftwareSerial gsmSerial(2,3);
char gsm_sms = 0;

void setup(){
pinMode(13, OUTPUT);
gsmSerial.begin(9600);
Serial.begin(9600);
}

void loop(){
if(Serial.available()>0) {
gsm_sms=gsmSerial.read();
if (gsm_sms == ‘A’){
digitalWrite(13,HIGH);
}
else if (gsm_sms == ‘a’){
digitalWrite(13,LOW);
}
}
}

che non funziona. L’intento è banalmente accendere il led connesso al pin 13 con un sms che contiene ‘A’ e spegnerlo con ‘a’. Credo che il no funzionamento sia dovuto all’assenza di comandi AT, che non ho ancora capito come utilizzare. pensavo di inserire nella funzione setup:

gsmSerial.println(“AT”); // che avvia la connessione (forse :smiley: )
delay(100);
gsmSerial.println(“AT+CMGR=1”); // che setta il modulo sulla funzione di ricezione sms (ri-forse )

qualcuno ha già utilizzato questo modulo? ha suggerimenti sul come leggere sms? Grazie mille :slight_smile:

ciao si devi usare i comandi AT ti serve l'elenco dei comandi AT del modulo e poi devi lavorare con le stringhe per estrapolare dal messaggio la parte che ti interessa

già trovati.

http://read.pudn.com/downloads134/doc/570607/tc35i_at_commands.pdf

ma no so come usarli.

ciao
questo è uno degli sketch che ho fatto per testare i comandi AT usando un modem wavecom

/*
SparkFun Cellular Shield - Pass-Through Sample Sketch
 SparkFun Electronics
 Written by Ryan Owens
 CC by v3.0
 3/8/10
 max current 330 mA when 'ringing'
 impostare il serial print su A capo NL
 */
#include <SoftwareSerial.h>  //Include the NewSoftSerial library to send serial commands to the cellular module.
#include <string.h>         //Used for string manipulations
char incoming_char=0;//Will hold the incoming character from the Serial Port.
String stringOne="";
String substringa="";

SoftwareSerial cell(5,6);  //Create a 'fake' serial port. NewSoftSerial cell(RX,TX)

void setup()
{
  Serial.begin(9600);//Initialize serial ports for communication.
  cell.begin(9600);//Initialize serial ports for communication.
}

void loop() 
{
  //If a character is coming from the modem to the Arduino...  
  while(cell.available())  //oppure if
  {
    incoming_char=cell.read();    //Get the character from the cellular serial port.
    //stringOne+=String(incoming_char);
    Serial.print(incoming_char);  //Print the incoming character to the terminal.

    stringOne+=String(incoming_char);
    //  stringOne.trim();

    //Serial.println(stringOne);  //stampa di controllo
    //Serial.println(stringOne.length());  //stampa di controllo

    delay(50);
    /*  
     while(cell.available()>0)  //svuota i messaggi dal modem
     {
     delay(50);  //pausa
     cell.read();  //legge dalla seriale 
     //Serial.print(String(cell.read()));       
     }
     */
  }
  //stringOne=""; 
  //If a character is coming from the the Arduino to the modem
  if(Serial.available())
  {
    incoming_char=Serial.read();  //Get the character coming from the terminal
    cell.print(incoming_char);    //Send the character to the cellular module.
    //cell.print("\r\n");    //Send the character to the cellular module.
    delay(50);
  }

}

ciao i comandi AT li stai già usando per mandare sms, per ricevere devi leggere quello che arriva al modulo e lavorare con le stringhe

ho letto il manuale: AT+CMGR Read SMS message questo fa al caso tuo

Scusami per il ritardo nel rispondere, ma non ho avuto molto tempo. Ho provato il tuo sketch e non va, probabilmente perchè si tratta di due modem differenti; per quanto riguarda quel comando ho provato ad utilizzarlo in questo modo, ma continuo a non visualizzare nulla sul monitor seriale.

char gsm_char;

void setup(){
  Serial.begin(9600);
}

void loop (){
  
while(Serial.available()){
  Serial.println("AT");
  delay(100);
  Serial.println("AT+CMGR");
  delay(100);
  gsm_char = Serial.read();
  Serial.print("Received char is: ");
  Serial.println(gsm_char);
}
}

Ovviamente i collegamenti sono corretti: con le chiamate e con l'invio di sms non ho problemi.

ciao
mi sono accorto che non sono stato chiaro:
lo sketch che ti ho dato prende il comando dal serial monitor, usa lo sketch cosi come è correggi il software serial e scrivi il comando nella finestra del serial monitor, trovo strano che non riesci a risolvere visto che effettui chiamate e mandi SMS, il diverso modem non c’entra, i comandi AT sono generali salvo qualche personalizzazione

Certo, avevo già cambiato il software serial. Se scrivo il comando nella finestra del serial monitor lo visualizzo; ciò che non riesco a visualizzare è il carattere inviato tramite SMS dal mio cellulare alla sim del modulo gsm. Ossia questa parte di codice:

 while(cell.available())  //oppure if
  {
    incoming_char=cell.read();    //Get the character from the cellular serial port.
    stringOne+=String(incoming_char);
    Serial.print(incoming_char);  //Print the incoming character to the terminal.

    stringOne+=String(incoming_char);

ciao lo sketch che ho postato lo uso per provare i comandi AT e vedere cosa mi risponde il modem, ho provato solo una volta il comando per leggere SMS ma non ricordo che risposta mi ha dato, fammi rileggere il manuale del tuo modem.

Stefano

ciao comincia con un comando alla volta prova a scrivere questo e vedi cosa succede AT+CMGL=?

in questa discussione http://forum.arduino.cc/index.php?topic=266382.0 ho trovato questo link http://arduino.cc/en/Tutorial/GSMExamplesReceiveSMS