GSM-Modul sendet SMS ohne Inhalt

OP #6105677
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));
OP #6106344
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?
OP #6106368
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?
Gast #6106409
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:
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
}
(Firma: Funkenflug Industries) #6106502
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.
(Firma: Funkenflug Industries) #6106526
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.
Gast #6106531
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.
Gast #6106618
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.
Gast #6107531
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.
Gast #6107619
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.
#6107641
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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren