SIM800 und SMS empfangen

Hi,

meine "diversen" Probleme haben sich ziemlich reduziert, jetzt hänge ich noch am SMS-Empfang.
Es funktioniert wenn ich in der loop die Schnittstelle mit dem SIM800 laufend und schnell abfrage. Ich möchte aber noch ein paar andere Dinge ablaufen lassen und die SMS eher in größeren Abständen abfragen. Dazu habe ich diesen Ablauf genommen:

AT+CMGF=1 ; SMS im Textmode
AT+CNMI=0,0,0,0,0 ; SMS speichern
AT+CMGR=1 ; SMS 1 abrufen
oder
AT+CMGL = "ALL" ; alle SMS abrufen

Dies der Reihe nach im Terminal eingegeben klappt einwandfrei, ich sehe die erste oder alle 4 bisher gesendeten SMS.

Dann alles in einem Sketch:

#define GSM_Serial Serial2                      // Serial 2 für GSM

char inchar;                                        // Will hold the incoming character from the GSM shield
String ssSMS = "";                              // String für SMS

void setup()
{
  Serial.begin(115200);
  GSM_Serial.begin(115200);

  GSM_Serial.println("AT+CMGF=1");               // Textmode
  delay(100);

  GSM_Serial.println("AT+CNMI=0,0,0,0,0");      // Nachricht puffern und sonst nichts
  delay(100);
  while (GSM_Serial.available())
  {
    Serial.write(GSM_Serial.read());             // Port anzeigen und leeren
  }
  Serial.println("Ready Setup...");
}
//********************************************************
void loop()
{
  delay(1000);
  ssSMS = SMS();                                  // SMS lesen
}

//********************************************************
String SMS()
{
  String sSMS = "";

  GSM_Serial.println('AT+CMGR=3');
  delay(100);

  while (GSM_Serial.available())
  {
    Serial.write(GSM_Serial.read());          // auslesen, in sSMS speichern kommt später...
  }
  Serial.println("");
  //  GSM_Serial.println("AT+CMGD=1,4");      // delete all SMS kommt noch...
  //  delay(100);
  return (sSMS);
}

Aber als Ergebnis kommt nur die erwartete Antwort auf die ersten AT-Befehle und dann nur noch eine 5-stellige Zahl....

AT+CMGF=1
OK
AT+CNMI=0,0,0,0,0
OK
Ready Setup...
15667
15667
15667

usw.

Was mache ich da falsch?

Hinweis: SIM800 (rote Platine) läuft sonst einwandfrei, versorgt mit einem Lipo, eine Zelle, 750 mA. Pegelwandler ARDUINO zum SIM Spannungsteiler 1k/3k.

Wieso muss das so schnell sein? Frag doch die sms nur alle paar Sekunden ab. Am besten mit INTERVAL.h oder combies Nachfolger dafür

ElEspanol:
Wieso muss das so schnell sein? Frag doch die sms nur alle paar Sekunden ab. Am besten mit INTERVAL.h oder combies Nachfolger dafür

Das muss gar nicht so schnell sein, im Gegenteil. Aber das ist ja gerade mein Problem. Im "richtigen" Program habe ich in der Loop 3 Abschnitte: Alle Minute - mit millis() - wird gemessen (Spannung, Temperatur), das geht schnell. Alle 60 Minuten werden die Messwerte hochgeladen, das dauert ein paar Sekunden. Ansonsten läuft alles durch und dabei wird die SMS-Routine abgefragt. Die Abfrage geht ja an sich auch, aber wieso komme da nur ZAHLEN du nicht meine SMS?

Ich habe schon mehrere Abfragen probiert, so wie oben, oder erst in eine Variable dann diese ausgegeben oder alles in einen String oder char-Array - immer kommt nur diese Zahl...... Und ich weiß nicht wo die herkommt.

So, jetzt bin auf etwas gestoßen:
Ich habe den fragwürdige Befehl so GSM_Serial.println('AT+CMGR=3'); geschrieben.
Wenn ich statt Hochkomma (') Anführungszeichen (") nehme kommt zumindest lesbarer Text.
Bei anderen Sprachen ist ' und " funktionsgleich, hier offenbar nicht. Ist das korrekt????

Aber jetzt kommt noch was: Wenn ich in der unteren while-Schleife den Port lese kommt nicht der komplette Text sondern nur ein Teil:

Im Terminal kommt mit AT+CMGR=3

+CMGR: "REC READ","+491712543277","","18/02/01,21:03:01+04"
dies ist eine sms

OK

im Programm nur

+CMGR: "REC READ","+491712146277","","18/02/01,21:0

Gibt es da irgendeine Buffergröße oder so????

Zwischen ˋ und “ ist ein Riesenunterschied.
Eines ist ein einzelnes char, das andere ein char array

Hallo in die Runde,

ich bin neu hier und kurz davor, mir die Kugel zu geben Habe dasselbe oder ein sehr ähnlcihes Problem wie uk1408. Arduino nano mit einem SIM800. Funktioniert im Prinzip einwandfrei, das Platinchen wählt sich ein, ich kann SMS verschicken und machnmal auch korrekt empfangen. Meiste kriege ich jedoch vom SIM800 nur den Anfang der SMS geliefert wie Nummer des Absenders, Datum und Uhrzeit. Bevor aber der eigentliche Inhalt der SMS kommt, bricht die Nachricht ab. Das Phnomen ist bei zwei Modulen genau dasselbe. Es ist auch egal, ob ich eine Library verwende, oder die Kommandos einzeln als AT-Befehle selbst tippe. Was um Himmels Willen kann da falsch sein? Hin und wieder funktioniert es dann plötzlich, dann wieder nicht. Bin für jeden Tipp dankbar ...

Keine Ahnung, wo dein Problem liegt.
Allerdings sind diese Module sehr empfindlich was die Beriebsspannung betrifft.

Hallo, ich habe leider das gleiche Problem (sim800l und arduino-nano) - alles funktioniert im wesentlichen, nur eingehende SMS werden meist unvollständig geliefert, so dass ich den eigentlichen sms-Text nicht lesen kann. Hast du inzwischen eine Lösung gefunden? Würde mich extrem über einen Tipp freuen. Grüße, Wolfgang

Hast du die Spannungsversorgung überprüft ?

Hallo,

bei mir geht das jetzt so einigermaßen... Ich habe das jetzt nicht mehr am NANO, sondern an einem NODMCU, aber das dürfte ja egal sein.
Stelle doch mal deinen Code hier ein (am besten auf das Wesentliche reduziert).

uk1408:
Hallo,

bei mir geht das jetzt so einigermaßen... Ich habe das jetzt nicht mehr am NANO, sondern an einem NODMCU, aber das dürfte ja egal sein.
Stelle doch mal deinen Code hier ein (am besten auf das Wesentliche reduziert).

Das heißt somit, mit dem Nano hat es bei dir auch nicht funktioniert ?

HotSystems:
Das heißt somit, mit dem Nano hat es bei dir auch nicht funktioniert ?

Doch... Nur war der NANO schon an der Grenze (Speicher, Ports) und ich wollte auch noch was mit WLAN machen. Und dann wollte ich auch noch Strom sparen und bin letztendlich beim ESP 12 - bzw. während der Erprobung bei NODEMCU - gelandet. Ändert aber sicherlich am Sketch-Ablauf nichts....

uk1408:
Doch... Nur war der NANO schon an der Grenze (Speicher, Ports) und ich wollte auch noch was mit WLAN machen. Und dann wollte ich auch noch Strom sparen und bin letztendlich beim ESP 12 - bzw. während der Erprobung bei NODEMCU - gelandet. Ändert aber sicherlich am Sketch-Ablauf nichts....

Ok...als Hauptproblem sehe ich mal die Geschwindigkeit deiner seriellen zum SIM800.
SoftwareSerial wird das nie fehlerfrei schaffen. Ich meine, die max. Baudzahl ist da 57600.
Danach wird sehr fehleranfällig.

Die Serielle Schnittstelle für's SIM800 läuft mit 19200, das dürften beide schaffen :confused: Und es läuft ja bei mir.

uk1408:
Die Serielle Schnittstelle für's SIM800 läuft mit 19200, das dürften beide schaffen :confused: Und es läuft ja bei mir.

Ok...das geht auch. In deinem Eingangspost steht noch 115200.

Hallo,

bei mir geht es ja, meine Hinweise gehen an WoBu….

Hallo zusammen.

Wenn man nur Rx und Tx verdrahtet hat, dann gibt es keine Flusskontrolle. Deshalb muss man sicherstellen, dass der Empfangsbuffer nicht überläuft. Ich habe die Daten mit SoftwareSerial aus dem SIM800L ausgelesen. Da hat der Empfangsbuffer nur 64Byte. Wenn man jetzt mit AT+CMGR=1 eine SMS ausliest, kommen viel mehr als 64Byte und ein Teil fehlt natürlich.

Also habe ich in SoftwareSerial.h den _SS_MAX_RX_BUFF, das ist gleich der erste Wert, von 64 auf 512 hochgesetzt, neu übersetzt und schon läuft es.

Gruß
Rüdiger