SMS-Versand vom ESP32

OP #6752552
Lesenswert?

Hallo,
ein ESP32-SIM800L soll automatisiert eine SMS versenden.
Angeschlossen ist das SIM800 derzeit über ein USB-Kabel an einen PC, 
programmiert wird es über eine Arduino-IDE 1.8.13.
Das Teil ist im Netz eingebucht, es kann Telefonverbindungen herstellen 
und auch SMS empfangen, nur nicht, was es allein soll, SMS senden.

Das Problem ist,
1.) die Telefonnummer kann das Programm nicht richtig übertragen,
2.) die SMS im Textmode kann mein Programm nicht abschließen.
1
void setup()
2
{
3
  pinMode(SIM800L_POWER, OUTPUT);
4
  digitalWrite(SIM800L_POWER, HIGH);
5
  delay(4000);          // zum Umschalten auf den seriellen Monitor
6
  Serial.begin(115200);
7
  Serial.println("ESP32+SIM800L SMS-Test");
8
  delay(10000);
9
  Serial2.println("AT+CMGF=1");               // Textmode aktivieren
10
  delay(1000); 
11
  Serial2.begin(9600, SERIAL_8N1, SIM800L_TX, SIM800L_RX);
12
  Serial2.println("AT+CPIN=xxxx");           // PIN-Eingabe für das Netz von 1und1
13
  delay(10000);                              // genügend Zeit zum Einbuchen des SIM800 
14
  Serial2.println("AT+CGATT?");              // ins Netz eingebucht?  (Nachfrage unnötig!)
15
  delay(10000);  Serial2.println("AT+CSMP=17,167,0,0");      // Parameter
16
  delay(1000);
17
  Serial2.println("AT+CMGF=1");                    // Textmode 
18
  delay(1000);
19

20
>>> edit >>>  hier beginnt das erste Problem:
21

22
//  Serial2.println("AT+CMGS=+49xxxxxxxx");       // Telefonnummer, Problem: wie eingeben?
23
//  delay(1000);
24
//  Serial2.println("Test-SMS vom SIM800L ");          // SMS-Text
25
//  delay(1000);
26
//  Serial2.println((char)26);                  // ASCII code of CTRL+Z
27
}

 Das erste Problem ist, daß zur Eingabe der Telefonnummer vom SIM800
1
AT+CMGS="+49xxxxxxxx"
verlangt wird (mit "...")! Die "-Zeichen werden aber von Serial2.println 
selbst benötigt und da darf auch keines zu viel sein. Läßt sich dafür 
eine Lösung finden? Ich habe es mit ' und mit Klammern versucht, es 
hilft nichts.
Das andere Problem ist der Abschluß der SMS, damit das SIM800 erkennt, 
daß nun die SMS zu Ende ist und die Übertragung beginnen soll. Dazu wird 
ein Ctrl-Z oder char(26) benötigt (und kein CR). Selbst, wenn ich über 
den seriellen Monitor die Telefonnummer von Hand eingebe und 
anschließend den SMS-Text,  einen Abschluß mit Ctrl-Z schaffe ich nicht, 
es bleibt offen, das SIM800 wartet und wartet.

Gibt es für das Programm mit den direkten AT-Befehlen eine Lösung? Ich 
habe auch fertige Libraries (z.B.  TinyGSM, wo alle cpp-Files fehlen) 
probiert, aber da gibt es auch meistens irgendwelche Probleme.
AM liebsten wäre es mir, wenn man mein kleines übersichtliches Programm 
ertüchtigen könnte.
Hat man da eine Chance?
VG
735knut

PS was ich als "mein Programm" bezeichnet habe, ist von einer 
freundlichen Seele im Internet übernommen!
#6752629
Lesenswert?

Alexander S. schrieb:
> Das erste Problem ist, daß zur Eingabe der Telefonnummer vom SIM800
>
1
> AT+CMGS="+49xxxxxxxx"
2
>
> verlangt wird (mit "...")! Die "-Zeichen werden aber von Serial2.println
> selbst benötigt und da darf auch keines zu viel sein.
1
Serial2.println("\"AT+CMGS=+49xxxxxxxx\"");

> Das andere Problem ist der Abschluß der SMS, damit das SIM800 erkennt,
> daß nun die SMS zu Ende ist und die Übertragung beginnen soll. Dazu wird
> ein Ctrl-Z oder char(26) benötigt (und kein CR).
1
Serial2.write(26);
OP #6753166
Lesenswert?

Hi Thomas2, es hat geholfen!
Ich mußte zwar bei der Telefonnummereingabe das \" etwas nach rechts 
verschieben und weiter unten wollte es Serial2.print(char(26)) haben.
Aber damit funktioniert es jetzt endlich, das SIM800 konnte problemlos 
eine SMS versenden.
Vielen Dank für Deine Hilfe!
VG
735knut
OP #6753490
Lesenswert?

Hallo Thomas2,
eine Nachfrage hätte ich noch:
Weißt Du zufällig, wie man das mit Ctrl-Z bzw. char(26) machen kann, 
wenn man den SMS-Text über den seriellen Monitor eingibt?
Ich kann zwar die Telefonnummer wählen, aber nach Eingabe des Textes 
wartet das SIM800 auf irgendeinen Abschluß.
VG
735knut

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