GSM-Modul sendet SMS ohne Inhalt

OP #6105677
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));
Gast
glaub auch dass da nur der terminator fehlt.

apropos angriff der roboter:
Macht es nciht vielleicht sinn Diene Telefonnummer aus dem Code zu 
entfernen? ;)
OP
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?
OP
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?
Gast
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:
1
void SendMessage()
2
{
3
  GSMSerial.print("AT+CSCS=");  
4
  GSMSerial.print('"');  
5
  GSMSerial.print("GSM");
6
  GSMSerial.print('"');
7
  GSMSerial.print("\r\n");
8

9
  delay(1000);
10
  GSMSerial.print("AT+CMGF=1\r\n");
11
  delay(1000);
12
      
13
  GSMSerial.print("AT+CMGS=");  
14
  GSMSerial.print('"');  
15
  GSMSerial.print("18067933376");      //发送目标手机号在这里设置
16
  GSMSerial.print('"');
17
  GSMSerial.print("\r\n");
18
  delay(1000);
19
  GSMSerial.print("Hello World!");      //短信内容
20
  delay(1000);
21
  GSMSerial.write(0x1A);      //发送操作
22
  delay(1000);
23
}
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...)
OP
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.
(Firma: Funkenflug Industries)
> 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.
Gast
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.
(Firma: Funkenflug Industries)
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.
Gast
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.
Gast
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.
Gast
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.
Gast
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.
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.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 6 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.