Ich hoffe ihr könnt mir helfen auf der Herstellerseite des Moduls finden sich Programme zum senden und empfangen von sms. Das Senden funktioniert auf anhieb aber das empfangen leider nicht.
Habt ihr vllt eine idee woran es liegen könnte?
http://www.sainsmart.com/siemens-tc35-sms-gsm-module-voice-adapter.html
Vielen Dank
Ich tippe darauf, dass dein Sketch nicht funktioniert.
Denn den sehen wir nicht.
Danke für die schnelle Antwort.
Ich habe einfach den code per copy paste getestet. Das ist jetzt der für sms empfangen:
#include <SoftwareSerial.h>
SoftwareSerial mySerial(10, 9);
char recu[150]; // Array for entering message
int i;
int dp=0;
char c;
String message="";
String cmd="";
String cReturn="";
int nReturn=0;
int nPremier=0;
//--Pin of the LED to turn ON and OFF
int ledPin = 5;
void setup()
{//--For Leonardo
Serial.begin(9600);
while (!Serial){
}
mySerial.begin(9600);
delay(5000);
Serial.println("Started!");
Serial.println("Hello, Pour commencer taper Envoyer");
message="AT+CPMS=\"SM\"";
Serial.println("Envoi de la commande ["+message+"]");
SendCmdMessage();
ShowSerialData();
Serial.println(nReturn);
nPremier=nReturn;
pinMode( ledPin, OUTPUT );
digitalWrite( ledPin, LOW);
//-- Choose SIM memory and show the SMS in MEMORY
//-> AT+CPMS="SM". //mySerial.println( "AT+CPMS=\"SM\"" );
//-- Ask for all the SMS
//-> AT+CMGL="ALL".// mySerial.println( "AT+CMGL=\"ALL\"" );
//-> AT+CMGR=2. // Read the 2nd message
//-> AT+CMGD=2. // Delete the 2nd message
//-> AT+CNMI=?. //-- Test received message
}
void loop()
{
while ( Serial.available()>0 )
{ message="AT+CPMS=\"SM\"";
SendCmdMessage();
ShowSerialData();
Serial.print("Nombre de SMS : ");
Serial.println(char(nReturn+48));
if (nReturn>nPremier)
{Serial.println("Nouveau SMS !");
//nPremier=nReturn-1;
Serial.print(nReturn);
Serial.print(" ");
Serial.println(nPremier);
digitalWrite( ledPin, HIGH);
delay(1000);
//--Read the nReturn message
message="";
message=nReturn+message;
message="AT+CMGR="+message;
Serial.println("Envoi de la commande ["+message+"]");
SendCmdMessage();
ShowSmsData();
delay(1000);
//--Delete the nReturn message
message="";
message=nReturn+message;
message="AT+CMGD="+message;
Serial.println("Envoi de la commande ["+message+"]");
SendCmdMessage();
ShowSmsData();
message="";
delay(1000);
digitalWrite( ledPin, LOW);
}
}
}
void ShowSerialData()
{ cReturn="";
while(mySerial.available()!=0)
{
//Serial.print(char(mySerial.read()));
c=char(mySerial.read());
switch(dp){
case 1 :
if (c==44)///-- Acii code for Comma
dp=2;
else
cmd+=c;
break;
case 2 :
if (cmd!="")
{ cmd.trim();
//Serial.println("Mem SMS ["+cmd+"]");
cReturn=cmd;
if (cReturn.length()==1)
{c=cReturn.charAt(0);
nReturn=c-0;
nReturn=nReturn-48;}
else
nReturn=0;
}
dp=0;
cmd="";
break;
default :
if (c==58) //-- Acii code for :
dp=1;
break;
}
}
}
void ShowSmsData()
{
while(mySerial.available()!=0)
{
//Serial.print(char(mySerial.read()));
c=char(mySerial.read());
switch(dp){
case 1 :
if (c==13)///-- Acii code for Return
dp=2;
else
cmd+=c;
break;
case 2 :
if (cmd!="")
Serial.println("Mem SMS ["+cmd+"]");
dp=0;
cmd="";
break;
default :
if (c==58) //-- Acii code for :
dp=1;
break;
}
}
}
void SendCmdMessage()
{ mySerial.println(message);
delay(1000);
}
Aber du hast schon deine Mobil-Nummer an die richtige Stelle eingetragen, hier sehe ich nichts.
Was hast du für einen Arduino?
Lässt sich der Sketch fehlerfrei hochladen?
Kommt irgend eine Meldung im Monitor?
Wo muss ich denn da meine Handynr eintragen?
Müsste die sms nicht trotzdem ankommen und zum arduino durchgehen?
ich habe ein Arduino Uno
Ja lässt sich fehlerfrei hochladen.
Im Monitor steht:
Started!
Hello, Pour commencer taper Envoyer
Envoi de la commande [AT+CPMS="SM"]
0
Nach eingeben und drücken von send kommt fortlaufend:
Nombre de SMS : 0
Nombre de SMS : 0
Nombre de SMS : 0
Nombre de SMS : 0
Nombre de SMS : 0
Ja, du brauchst die hier wohl nicht. Ich hatte mal ein Modul in den Fingern, da musste die Nummer eingetragen werden.
Ich vermute, du hast zum SMS-Empfang nicht den richtigen AT-Befehl übertragen.
Sieh dazu mal in die Doku.
Ich habe ein paar Threads zu dem Thema gefunden:
http://forum.arduino.cc/index.php?topic=245076.0
oder
http://forum.arduino.cc/index.php?topic=142660.0
ich denke da ist was bei, was dir hilft.
Hier habe ich mal ein Programm gezeigt um AT Kommandos zu senden und die Antwort auszuwerten:
https://forum.arduino.cc/index.php?topic=339073.msg2339931#msg2339931
Das ist aber nicht sehr allgemein. Da ging es nur um die Signalstärke. Aber im Prinzip lässt sich das anpassen. Was wichtig ist dass man abfragt wenn bei einem Kommando "ERROR" zurückkommen kann. Das war da nicht nötig, aber wenn es auftreten kann muss man das unbedingt behandeln, sonst bleibt das Programm im Fehlerfall stehen, da es auf etwas wartet dass nie eintritt.
könnte es sein das das tc35 in einen bestimmten zustand gesetzt werden muss. Also per Befehle?
Habe schon seit tagen versucht mich in das Handbuch einzuarbeiten. Vllt kennt sich jemand besser damit aus?
http://www.hughes.com/AT_Command_Reference.html#AT_plusCMGL
Du solltest dir den Beitrag von Serenifly ansehen. Der ist sehr interessant und könnte dir weiter helfen.
Ich denke schon, das es an einem AT-Befehl liegt und da findest du auch in den von mir verlinkten Beiträgen einiges dazu.
Und teste dann einfach die einzelnen Befehle durch.
Der entsprechend Zustand wird sicherlich sein: SMS-Empfang und Daten auf Bildschirm zeigen!
Die Version braucht aber etwas Programmierkenntnisse, da man das je nach Anwendung anpassen muss. Da bin ich mir nicht sicher, ob das hier so gut geht.
Bei SMS muss da eben unbedingt den Fehlerfall abfragen. Siehe Reply #26 wie das grob aussehen könnte.
@serenifly
Ich befürchte auch, das wird schwierig.
@satalaner
So wie ich das aus der doku rauslese, musst du den AT-Befehl "AT+CMGL="ALL"" "
Mitgeben. Aber da solltest du die Doku schon genau lesen, auch wenn es schwer fällt.
Nur wie schon geschrieben, es gibt reichlich Beiträge im Netz, die sich mit diesem Thema befassen.
Ich habe jetzt mal ein ftdi an das tv35 direkt angeschlossen.
Ich bekomme jedenfalls rückmeldungen die so aussehen.
AT
OK
AT+CMGL="ALL"
+CMGL: 1,"REC UNREAD","+4915129761296",,"15/10/09,18:14:15+08"
twqiztqwgkdukqwgotd
OK
AT+CPMS="SM"
+CPMS: 1,20,1,20,1,20
OK
Das schein zu gehen die Frage ist jetzt was ist an diesem befehl anders als im Programm ich finde den fehler nicht?
So wie ich es sehe, hast du direkt unterhalb der Loop einen falschen AT-Befehl gesendet. Den musst du tauschen.
Danke für die schnelle antwort.
Das scheint mir auch so aber ich weiß einfach nicht wie der richtige befehl aussehen müsste?
Das steht oben im Sketch als Beispiele,
unter:
//-- Choose SIM memory and show the SMS in MEMORY
z.B. so:
"AT+CMGL="ALL""
diesen habe ich auch schon in der loop hinter message geschrieben. Leider ohne erfolg
Satalaner:
diesen habe ich auch schon in der loop hinter message geschrieben. Leider ohne erfolg
Und auch mal andere Befehle getestet?
wüsste jetzt ehrlich gesgt nicht welche.
Habe das ftdi nochmal angeschlossen. Müsste ich die befehle z.b. AT+CMGL="ALL"" und "AT+CPMS="SM"" nicht auch über dieses senden können? ich bekomme so nämlich einen error
wenn ich jedoch AT+CMGL="ALL" oder AT+CPMS="SM" sende gehts und ich bekomme sofort infos. Ich kann die aber so nicht ins arduino schreiben da kommt ein fehler. Ich kann sie nur so wie oben geschrieben per \ schreiben.
Satalaner:
wüsste jetzt ehrlich gesgt nicht welche.
Habe das ftdi nochmal angeschlossen. Müsste ich die befehle z.b. AT+CMGL="ALL"" und "AT+CPMS="SM"" nicht auch über dieses senden können? ich bekomme so nämlich einen error
Alle die oben im Code stehen oder im Handbuch.
Ok, SORRY, aber ich glaube, da kann ich nicht weiter helfen.