Forum: Mikrocontroller und Digitale Elektronik Senden einer SMS


von Thomas H. (datatom)


Lesenswert?

Hallo zusammen,

ich schaffe es nicht von meinem GSM Modul (GT864 E mit Telit GE864 Quad) 
über hterm eine SMS zu versenden.

Ich gebe folgende Kommandos ein:

Kommando           Antwort:
AT                           OK
AT+CPIN=0000    OK
AT+CMGF=1         OK
AT+CMGS="+491735....." Ok und Einhabezeichen >
Text und Enter drücken. Leider bleibe ich dann im Eingabemodus hängen. 
Nach jedem Enter kommt das Eingabezeichen >

Was kann das sein?

von Thomas Z. (thomas_z41)


Lesenswert?

Du musst dem Modul irgendwie mitteilen dass die Nachricht zu ende ist, 
dies macht man normalerweise indem man EOF (end of file) sendet. Unter 
Linux mache ich das mit STRG+D, guck mal ob das bei dir auch geht.

von Hanns-Jürgen M. (yogy)


Lesenswert?

Am Ende es SMS-Textes muß ein CTRL+Z (0x1A) eingegeben werden.

von Thomas H. (datatom)


Lesenswert?

Ich habe jetzt ein bisschen weiter getestet und kann vom Mikrocontroller 
die AT Kommandos bis einschließlich des Textes absenden. 
Atmel-Beispielvideo sei Dank:-)
1
char String_CPIN[]="AT+CPIN=6674\r";
2
char String_CMGF[]="AT+CMGF=1\r";
3
char String_CSCS[]="AT+CSCS=\"GSM\"\r";
4
char String_CMGS[]="AT+CMGS=01234567890\r";
5
char String_TEXT[]="Test77\r";
Gesendet mit:
1
void GSM_init(void)
2
{
3
  n++;
4
  USART0_putstring(String_CPIN);
5
  _delay_ms(200);
6
  USART0_putstring(String_CMGF);
7
  _delay_ms(200);
8
  USART0_putstring(String_CSCS);
9
  _delay_ms(200);
10
  USART0_putstring(String_CMGS);
11
  _delay_ms(200);
12
  USART0_putstring(String_TEXT);
13
  _delay_ms(200);
14
  USART0_putstring(String_TEXT_ENDE);
15
  _delay_ms(200);
16
  n++;
17
}
1
void USART0_putstring(char* String)
2
{
3
  while(*String != 0x00)
4
  {
5
    USART0_Transmit(*String);    //Using the simple send function we send one char at a time
6
    String++;
7
  }                                //We increment the pointer so we can read the next char
8
}
1
void USART0_Transmit(unsigned char data)
2
{
3
  unsigned char tmphead;
4
  
5
  /* Calculate buffer index */
6
  tmphead = (USART0_TxHead + 1) & USART_TX_BUFFER_MASK;
7
  /* Wait for free space in buffer */
8
  while (tmphead == USART0_TxTail);
9
  /* Store data in buffer */
10
  USART0_TxBuf[tmphead] = data;
11
  /* Store new index */
12
  USART0_TxHead = tmphead;
13
  /* Enable UDRE interrupt */
14
  UCSR0B |= (1<<UDRIE0);
15
}

Wie kann ich jetzt in den Hex-Wert 0x1A als String bzw. char absenden um 
den Sendevorgang abzuschließen?

char String_TEXT_ENDE[]="????";

Vielen Dank.

Gruß

Datatom

--

Ich glaube nicht, daß Du hier eine Telephonnummer veröffentlichen 
willst.

-rufus

: Bearbeitet durch User
von TU-Student (Gast)


Lesenswert?

Warum nicht einfach nach dem Texts USART0_Transmit(0x1A); ?

Bei manchen Modulen musst du noch den Zeichensatz auf GSM umstellen:
AT+CSCS="GSM"

Wenn ich mich an meine Entwicklungen mit dem GT864-PY erinnere, ist das 
AT+CSCS-Kommando dort nicht notwendig, weil standardmässig GSM 
eingestellt ist... Ich könnte mich aber auch irren.

Ich empfehle dir, zwecks Vereinfachung den PIN mit einem alten 
Nokia-Handy  auszuschalten, falls es eine Prepaid-SIM ist...

von eProfi (Gast)


Lesenswert?

char String_TEXT_ENDE[]="????";

char String_TEXT_ENDE[]="\032";//oktal für 0x1a

von Markus F. (mfro)


Lesenswert?

eProfi schrieb:
> char String_TEXT_ENDE[]="\032";//oktal für 0x1a

wenn Du 0x1a schreiben willst, dann schreib's doch einfach hin:
1
char String_TEXT_ENDE[]="\x1a";

von Thomas H. (datatom)


Lesenswert?

Besten Dank. Hex und Okt haben beide funktioniert.

: Bearbeitet durch User
von Dirk B. (dirkb2)


Lesenswert?

Markus F. schrieb:
> eProfi schrieb:
>> char String_TEXT_ENDE[]="\032";//oktal für 0x1a
>
> wenn Du 0x1a schreiben willst, dann schreib's doch einfach hin:
>
>
1
> char String_TEXT_ENDE[]="\x1a";
2
>

Aber aufpassen! Bei oktal werden maximal 3 Ziffern genommen.
Die Hexnotation ist dagegen gierig. Die codiert weiter, solange es 
gültige Ziffern gibt.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.