Forum: Mikrocontroller und Digitale Elektronik SMS-Versand vom ESP32


von Alexander S. (knut740)


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!

: Bearbeitet durch User
von Thomas B. (thomas2)


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);

von Alexander S. (knut740)


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

von Alexander S. (knut740)


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

von Martin (Gast)


Lesenswert?

.print statt .println?

von Martin (Gast)


Lesenswert?


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.