mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik GSM-Modul sendet SMS ohne Inhalt


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Maximilian P. (maxpis)


Bewertung
-3 lesenswert
nicht lesenswert
Guten Abend,
da ich keine Lösung zu meinem Problem finde, wende ich mich hier in 
diesem Forum. Für ein Projekt verwendet ich den Mikrocontroller ATSAMC21 
und das GSM-Modul SIM800L. In Atmel Studio programmier ich das Ganze. 
Nun zu meinem Problem. Ich kann eine SMS an mein Mobiltelefon 
verschicken, jedoch kommt die SMS ohne Text an und ich versteh nicht 
warum. Nachfolgend ist ein Teil meines Programms. Muss ich vor oder nach 
dem Text "Hallo" noch irgendwas einfügen, damit dies als Text erkannt 
wird oder wie ist die Lösung? Und ja ich weiß auch das man auf die 
Antwort vom GSM-Modul achten sollte. Das mit dem Delay ist nur zu 
Testzwecken da. Vielen Dank jetzt schon für Ihre Bemühungen.


        static uint8_t handshake[] = "AT\r";
        static uint8_t textmode[] = "AT+CMGF=1\r";
        static uint8_t number[] = "AT+CMGS=\"+491783167199\"\r";
        static uint8_t text[] = "Hallo";
        static uint8_t ctrlz[] = "\x1A";


  io_write(&USART_1.io, handshake, sizeof(handshake));
        delay_ms(2000);
  io_write(&USART_1.io, textmode, sizeof(textmode));
  delay_ms(2000);
  io_write(&USART_1.io, number, sizeof(number));
  delay_ms(2000);
  io_write(&USART_1.io, text, sizeof(text));
  delay_ms(500);
  io_write(&USART_1.io, ctrlz, sizeof(ctrlz));

von pegel (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Sind nicht die meisten SMS ohne Inhalt? ;)

Nein im Ernst, braucht das Hallo nicht auch ein Ende? CR, NL oder 0?

von sid (Gast)


Bewertung
1 lesenswert
nicht lesenswert
glaub auch dass da nur der terminator fehlt.

apropos angriff der roboter:
Macht es nciht vielleicht sinn Diene Telefonnummer aus dem Code zu 
entfernen? ;)

von Maximilian P. (maxpis)


Bewertung
0 lesenswert
nicht lesenswert
Vielen Dank für die Antworten.
Keiner der Lösungsvorschläge hat aber leider nicht funktioniert.
Ich hab diese Lösungsvorschläge ausprobiert:

static uint8_t text[] = "Hallo\r";
static uint8_t text[] = "Hallo\0";
static uint8_t text[] = "Hallo0";
static uint8_t text[] = "Hallo\n";

Habt Ihr evtl. noch andere Vorschläge?

von Hakim (Gast)


Bewertung
1 lesenswert
nicht lesenswert
"Normalerweise" wartet man auf das '>'-Zeichen bevor man den Inhalt der 
SMS zum Modem überträgt.

von pegel (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Versuche mal an Stelle von sizeof(text) direkt 6 einzusetzen.

von pegel (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Nein, sorry hatte char im Hinterkopf.

von Maximilian P. (maxpis)


Bewertung
0 lesenswert
nicht lesenswert
Das mit sizeof(text) durch 6 zu ersetzen hat leider auch nicht 
funktioniert.
Ich habe jetzt ein Eintrag bei Stackoverflow gefunden:

https://stackoverflow.com/questions/47576988/sim800l-blank-sms-issue

Da gab es das gleiche Problem und wurde anscheinend gelöst. Aber ich 
versteh nicht was genau da gemeint ist mit: The whole payload was 
followed by a '\0' which is unexpected.
Könnte mir das mal einer bitte erklären. Muss ich das \0 im string 
löschen?

von Mw E. (Firma: fritzler-avr.de) (fritzler)


Bewertung
0 lesenswert
nicht lesenswert
hier stand mist, weil ich was überlesen hatte.

: Bearbeitet durch User
von pegel (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Der Verkäufer:
https://www.hotmcu.com/sim800-gsmgprs-module-p-302.html

hat einen Beispiel Code angehängt.
Ist zwar Ardu*, spielt aber keine Rolle.
In der .print Funktion werden die Zeichen angegeben, die wirklich 
übertragen werden:
void SendMessage()
{
  GSMSerial.print("AT+CSCS=");  
  GSMSerial.print('"');  
  GSMSerial.print("GSM");
  GSMSerial.print('"');
  GSMSerial.print("\r\n");

  delay(1000);
  GSMSerial.print("AT+CMGF=1\r\n");
  delay(1000);
      
  GSMSerial.print("AT+CMGS=");  
  GSMSerial.print('"');  
  GSMSerial.print("18067933376");      //发送目标手机号在这里设置
  GSMSerial.print('"');
  GSMSerial.print("\r\n");
  delay(1000);
  GSMSerial.print("Hello World!");      //短信内容
  delay(1000);
  GSMSerial.write(0x1A);      //发送操作
  delay(1000);
}

von Walter T. (nicolas)


Bewertung
0 lesenswert
nicht lesenswert
Ich habe es gerade probiert: Bei mir funktioniert es fehlerfrei, eine 
SMS an +491783167199 zu senden.

von Michael R. (mr-action)


Bewertung
2 lesenswert
nicht lesenswert
Mach sizeof(text) -1 bzw. strlen(text).

Davon ab, guck dir mal an, wie das mit den Strings in den char Arrays 
funktioniert und dann weißt du auch wo das \0 her kommt und warum du das 
grade munter mit verschickst...

(Dir fehlen da noch ein paar C Basics...)

: Bearbeitet durch User
von Maximilian P. (maxpis)


Bewertung
0 lesenswert
nicht lesenswert
Walter T. schrieb:
> Ich habe es gerade probiert: Bei mir funktioniert es fehlerfrei,
> eine
> SMS an +491783167199 zu senden.

Haben Sie jetzt wirklich eine SMS an die Nummer geschickt, weil keine 
angekommen ist.

Also bei mir funktioniert es immer noch nicht und ich finde einfach den 
Fehler nicht, warum der Text nicht mitgesendet wird.

von Karl (Gast)


Bewertung
-1 lesenswert
nicht lesenswert
Maximilian P. schrieb:
> Keiner der Lösungsvorschläge hat aber leider nicht funktioniert.

Wo ist dann das Problem? Wenn keiner nicht funktioniert hat, dann haben 
doch alle funktioniert? Problem gelöst.

von pegel (Gast)


Bewertung
1 lesenswert
nicht lesenswert
Maximilian P. schrieb:
> Also bei mir funktioniert es immer noch nicht und ich finde einfach den
> Fehler nicht

Dann wird es höchste Zeit mit einem RS232 Wandler das Modul per Hand im 
Terminalprogramm anzusprechen und auf Ergebnisse zu achten.

von Edward C. (teddy)


Bewertung
0 lesenswert
nicht lesenswert
GSMSerial.print("\r\n");

"AT+CMGS=\"+491783167199\"\r";

Mal checken?

Teddy

von Ben B. (Firma: Funkenflug Industries) (stromkraft)


Bewertung
-1 lesenswert
nicht lesenswert
> static uint8_t number[] = "AT+CMGS=\"+491783167199\"\r";
Wäre möglich, daß das hinten ein \r\n sein muß.

Ich hab das ansonsten mal mit dem Quellcode meiner Alarmsau verglichen 
(die auch ein SIM800L benutzt) und mir fällt kein weiterer Untschied 
auf.

von Idiotenhasser (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Es gibt echt Leute, die es noch nicht mal schaffen, korrekt 
abzuschreiben.

von pegel (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Ben B. schrieb:
> Wäre möglich, daß das hinten ein \r\n sein muß.

Ist im China Beispiel auch so.
Wäre interessant, wenn das Hallo als Teil der Telefonnummer 
interpretiert wird.

von Hakim (Gast)


Bewertung
-1 lesenswert
nicht lesenswert
Maximilian P. schrieb:
> Also bei mir funktioniert es immer noch nicht und ich finde einfach den
> Fehler nicht

Es könnte daran liegen, dass du ein Ignorant bist.

von Ben B. (Firma: Funkenflug Industries) (stromkraft)


Bewertung
-2 lesenswert
nicht lesenswert
Die Telefonnummer interpretiert er korrekt, sonst würde keine leere SMS 
ankommen.

Das SIM800L ist relativ "fehler-tolerant", also wenn man Mist damit 
baut, macht es trotzdem irgendwas, nur eben meistens nicht das was es 
soll. Es wäre möglich, daß es ohne korrekten Zeilenabschluss den Text 
einfach nicht findet, weil es den in der nächsten Zeile erwartet.

Mein Code sendet auch überall \r\n, das ">" bei der Eingabe des 
SMS-Textes ignoriere ich ebenfalls, ich warte nur sicherheitshalber bis 
das Kommando mit der Telefonnummer vollständig gesendet wurde +5ms bevor 
ich die zweite Zeile mit dem SMS-Text sende. Funktioniert zuverlässig.

von pegel (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Ben B. schrieb:
> Die Telefonnummer interpretiert er korrekt, sonst würde keine leere SMS
> ankommen.

Ich habe viele gleiche Ziffern in meiner Tel-Nummer am Ende.
Mich hat mal einer angerufen, der meinte er hat immer weiter fleißig die 
Ziffer gedrückt. Egal wie viele verbunden wurde trotzdem.

Kannst ja mal probieren.

von Wolfgang (Gast)


Bewertung
1 lesenswert
nicht lesenswert
pegel schrieb:
> Ich habe viele gleiche Ziffern in meiner Tel-Nummer am Ende.
> Mich hat mal einer angerufen, der meinte er hat immer weiter fleißig die
> Ziffer gedrückt. Egal wie viele verbunden wurde trotzdem.

Was soll die Telefonvermittlung auch machen, wenn im Baum der Wählrelais 
keine weitere Verzweigung kommt. Wenn das in der elektronischen 
Vermittlung genauso ist, bedeutet es nur, dass sie kompatibel zur alten 
Relaiswahl ist.

von Walter T. (nicolas)


Bewertung
0 lesenswert
nicht lesenswert
Walter T. schrieb:
> Ich habe es gerade probiert: Bei mir funktioniert es fehlerfrei, eine
> SMS an +491783167199 zu senden.

Maximilian P. schrieb:
> Haben Sie jetzt wirklich eine SMS an die Nummer geschickt, weil keine
> angekommen ist.

Nein. Das hat sich heute morgen lustiger gelesen als jetzt.

von Alex D. (allu)


Bewertung
0 lesenswert
nicht lesenswert
Probehalber mal den SMS-Text mit Chr(26) abschliessen.

von Marq (Gast)


Bewertung
1 lesenswert
nicht lesenswert
Alex D. schrieb:
> Probehalber mal den SMS-Text mit Chr(26) abschliessen.

Ahh, guten Ideen!

Ich hatte das Problem mal mit einer Prepaid-Karte. Sobald das Guthaben 
aufgebraucht war kam zwar eine SMS an, aber ohne Inhalt.

von Martin H. (horo)


Bewertung
0 lesenswert
nicht lesenswert
Marq schrieb:
> Ich hatte das Problem mal mit einer Prepaid-Karte. Sobald das Guthaben
> aufgebraucht war kam zwar eine SMS an, aber ohne Inhalt.

Das reicht doch wunderbar, um für den Heizungswächter ein Alarmbit zu 
übertragen.

von Harlekin (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Martin H. schrieb:
> Marq schrieb:
>> Ich hatte das Problem mal mit einer Prepaid-Karte. Sobald das Guthaben
>> aufgebraucht war kam zwar eine SMS an, aber ohne Inhalt.
>
> Das reicht doch wunderbar, um für den Heizungswächter ein Alarmbit zu
> übertragen.

Unter Einbezug von Zeitabständen ist sogar Morsen möglich.

von Stefan ⛄ F. (stefanus)


Bewertung
1 lesenswert
nicht lesenswert
Maximilian P. schrieb:
> Habt Ihr evtl. noch andere Vorschläge?

\r\n

Aber ich glaube nicht, dass das die Problemursache ist. Ich habe früher 
am Ende keinen Terminator angehängt, das waren allerdings andere GSM 
Modems.

sizeof() ist auf jeden Fall falsch, denn das liefert die Größe des 
String-Arrays einschließlich der Ende-Markierung \0. strlen() ermittelt 
die Anzahl der Zeichen korrekt.

Ich rate mal ins Blaue:

Sende mal einen Text mit genau 8 Zeichen oder einem Vielfachen davon. 
Ich könnte mir vorstellen, dass die Firmware des GSM Modul einen Bug in 
der PDU codierung hat.

: Bearbeitet durch User
von Michael R. (mr-action)


Bewertung
0 lesenswert
nicht lesenswert
Ließt hier eigentlich jemand die Doku zu den Sachen, die er benutzt?

Laut dem AT Commands Manual 
(https://www.elecrow.com/wiki/images/2/20/SIM800_Series_AT_Command_Manual_V1.09.pdf) 
gehört hinter den Befehl ein \r und kein \r\n. Da muss man eigentlich 
sehr wenig raten oder probieren - ist sogar bei allen Modems so, mit 
dennen ich bisher gearbeitet habe.

Außerdem wäre da immer noch das sizeof(), das falsch ist - wie 
inzwischen schon zwei mal angemerkt wurde.

Und nach den "Änderungen" könnte mann dann wieder über den Code 
diskutieren, wenn es noch nicht geht.
Aber grundsätzlich drehen wir uns hier ordentlich im Kreis grade.

Edit: Achja, und der SMS Text ist doch mit Chr(26) also 0x1A (\x1A) 
abgeschlossen - zwar ist da noch ein \0 zwischen und eine überflüssige 
Wartezeit aber es scheint ja zu gehen. Ohne ein Ctrl+Z am Ende vom Text 
habe ich noch nie eine SMS raus bekommen.

: Bearbeitet durch User

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.