Go Down

Topic: Mehrere SMS'en über Arduino GSM Modul versenden [Frage/Hilfe] (Read 4888 times) previous topic - next topic

Tobias93

hey, also ich wäre dir sehr dankbar wenn du das machen könntest, ich habe dann wenn es bei dir gehen sollte wirklich genug probiert dann würde ich das Board umtauschen gehen.
Vielen Dank für deine Hilfe !
Nobody is perfect but - impossible is nothing

Tobias93

EDIT:

Hallo Leute,
also ich habe nun das Modul getauscht und kann sagen das die Schnittstellenkommunikation nun geht! Die Platine hatte einen Hardwaredefekt, @HotSystems: Du brauchst dein Gerät nicht ausbauen, aber vielen Dank für das Angebot!

Ich habe nun mein Programm am Arduino laufen und momentan nur noch eine Frage:

Das GSM Modul wird zum Programmbeginn über den IGT zu einer Verbindung mit dem GSM Netz angeregt, das klappt auch gut, danach hat der Arduino PIN welcher mit dem IGT Verbunden ist die Funktion eines Eingangs.

Doch nach etwa 2-5 Minuten sehe ich anhand der LED auf dem TC35 das es NICHT mehr mit dem GSM Netz verbunden ist. Mir fehlt da jetzt die Erfahrung, daher die Frage an euch, ist das normal also muss man die GSM Verbindung zyklisch wieder neu aufbauen? Wenn nein, hat einer eine Idee woher das rührt?
Gibt es eine Möglichkeit dem Modul mitzuteilen das es selbst automatisch dafür sorgen soll das es immer in ein GSM Netz eingebucht ist?

Vielen Dank für die bisherige Hilfe, Tobias
Nobody is perfect but - impossible is nothing

HotSystems

Hallo,
freut mich dass es jetzt funktioniert.
Wenn du nicht immer Empfang hast, liegt es evtl. an der schlechten Empfangsfeldstärke.

Alternativ:
Du könntest mit einem Timer regelmäßig alle 60 Minuten den IGT schalten.
Der Pin für IGT bleibt aber ein Ausgang.

P.S.
Der TC35 bleit jetzt wo er ist, habe mir aber auch schon einen weiteren bestellt. ;)
Gruß Dieter

I2C = weniger ist mehr: weniger Kabel, mehr Probleme. 8)

Tobias93

hallo,

Der Pin für IGT bleibt aber ein Ausgang.
Machst du das so ? Ich habe bei meiner Suche im Netz immer nur Codes in der Art gefunden und das deshalb bei mir auch so gemacht:

Code: [Select]

  pinMode(8, INPUT);
  digitalWrite(8, LOW);
  pinMode(8, OUTPUT);
  delay(2000);
  pinMode(8, INPUT);


Bei dir ist die letzte Zeile nicht vorhanden oder weil du es ja als Ausgang lässt? Hast du den Port dann aber vorher als Pullup eingerichtet oder?

Liebe Grüße
Nobody is perfect but - impossible is nothing

HotSystems

Sieh dir den Sketch an, den ich in #10 gepostet habe.

Da ist es nur als Ausgang (GSMok) definiert und da brauchst du kein Pullup.
Der schaltet im Setup kurzzeitig auf LOW.

Einen Pullup benötigst du nur, wenn du einen Eingang definiert hast.

Gruß Dieter

I2C = weniger ist mehr: weniger Kabel, mehr Probleme. 8)

Tobias93

stimmt, das war ja dein code bei #10.
Ich habe es jetzt auch so gemacht und das mit den Verbindungsabbrüchen lag wirklich an meinem schlechten Empfang hier. Jetzt läuft alles so wie es soll :-)
Nobody is perfect but - impossible is nothing

Tobias93

Hallo Leute,

ich stehe jetzt nun wieder bei meinem ganz anfänglichen Problem von Seite 1, bei dem SMS Versand an mehrere Verschiedene Nummern.

Ich habe mich mit den Funktionen des TC35 auseinandergesetzt und festgestellt das es leider von sich aus keine Möglichkeiten bietet z.B. einfach das ganze Telefonbuch durchzurattern, also muss ich die Lösung realisieren in dem ich nacheinander über den Arduino die einzelnen Nummern an das Modul sende.

Der Code den ich hierzu nutze sieht so aus:

Code: [Select]

    tc.println("AT+CMGF=1");
    delay(modulDelay);

    String a ="AT+CMGS=\"+49";
    String b = "\"\r";
    String c = "";
for(int i = 0;i<AnzMitglieder;i++)
{
    c = a+MitgliederNummern[i]+b;

    tc.println(c);
    delay(smsDelay);
    tc.print("Einsatz!");
    delay(smsDelay);
    tc.println((char)26); // Strg-Z
    delay(smsDelay);
}


Leider funktioniert der Code nicht und ich verstehe nicht so recht warum. Das smsDelay steht momentan bei 200mS ich habe es aber auch schon mit 100mS und 500mS versucht.

@HotSystems:
Du hattest auf Seite 1 geschrieben das du auch schon einen mehrfachen SMS versand (bei dir waren es 10 Nummern) durchgeführt hast, hast du es nach dem Schema wie ich oben gemacht oder habe ich irgendwo einen Gedankenfehler und das ganze geht doch anders?

Das Mitglieder Array liefert die Nummer im gültigen Format (z.B. 177...) als String, das habe ich getestet, wenn ich die SMS einzeln versende geht es, nur über die Schleife nicht.


Ich wäre euch für weitere Hilfe sehr dankbar,

Viele Grüße, Tobias
Nobody is perfect but - impossible is nothing

HotSystems

Hallo,
so wie ich das in deinem Sketch sehe, rufst du die einzelnen Nummern in der "Sendefunktion" auf.
Das funktioniert so nicht.

Du must die komplette Funktion (inkl. Länderkennziffer und Text) komplett aufrufen.
Also wenn du meinen Sketch zugrunde legst,

Code: [Select]

for(int i = 0;i<AnzMitglieder;i++) {
   void SendSMS(i)
}


Und "i" ist hier der Index des char-Arrays, welches du zuvor füllen musst.
Hier stehen die Nummern und evtl. Texte drin.
Gruß Dieter

I2C = weniger ist mehr: weniger Kabel, mehr Probleme. 8)

Tobias93

Hallo,

danke für deine Rückmeldung!

mit:

Code: [Select]

c = a+MitgliederNummern[i]+b;


erstelle ich doch zuerst den String und sende ihn dann an das Modul, mit dem darauffolgenden Text. Das ist doch vom Schema her der gleiche Ablauf als würde ich es nochmal in einer separaten Funktion machen?

Wie hast du das bei deinem Sketch realisiert?

Viele Grüße, Tobias
Nobody is perfect but - impossible is nothing

Tobias93

EDIT: Ich habe zwischen die einzelnen zu sendenden Nachrichten nun mal ein größeres Delay gesetzt, dann geht es. Allerdings ist das Delay von großen Nachteilen weil der Versand nun eindeutig viel zu lange dauert...

Kann hier jemand weiterhelfen?

@HotSystems: Wie lange dauerte dein SMS versand ? Hatte was von 10 Empfänger und unter 30 Sekunden im Kopf bei dir, stimmt das ?

Lg
Nobody is perfect but - impossible is nothing

ElEspanol

Nimm INTERVAL.h um Pausen zu machen.

Kannst du das Modul nicht auf erfolgreichen SMS-Versand abfragen?

Tobias93

Hallo,

Kannst du das Modul nicht auf erfolgreichen SMS-Versand abfragen?
Mir ist hierzu kein AT Command bekannt.

Nach dem Versenden einer SMS scheint es so als ob die GSM Netzwerkverbindung in die Knie geht und deshalb keine weitere SMS versendet werden kann, würde auch erklären warum es mit einem größeren Delay geht weil ich im Hintergrund eine Routine laufen lasse die die GSM Verbindung sicherstellt und bei Verbindungsverlust neu Verbindet.
Aber das große Delay macht es halt für meine Anwendung leider absolut unbrauchbar...

HILFE :-(
Nobody is perfect but - impossible is nothing

HotSystems

Hallo,

wenn du die Funktion "ShowSerialData()" auswertest, hast du doch eine Info über den erfolgreichen SMS-Versand.

Und richtig, bei meinem damaligen Test war der Versand von 10 SMS unter 30 Sek.

Ich vermute, deine Spannung bricht zusammen und dadurch bricht die Verbindung ab.
Hast du den Elko an der Betriebsspannung vom TC35, direkt auf dem TC35-Board ?
Wenn ja, mach den mal größer.

Wenn das Netz stark genug ist, darf die Verbindung nicht abbrechen.

Was der Aufbau deines Strings für die Nummer und dem SMS-Text betrifft, bin ich nicht sicher, das es so funktioniert.

Ich habe es immer so gelöst, wie in Post #37 geschrieben. Da wird die gesamte Funktion abgearbeitet, die die Nummer und den Text beinhaltet.

Erst wenn dieser (1. Text und 1. Nummer) abgearbeitet ist, kann ein neuer Aufruf (nächster Text und Nummer) erfolgen.
Gruß Dieter

I2C = weniger ist mehr: weniger Kabel, mehr Probleme. 8)

ElEspanol

Kann man nicht wie beim Handy mehrere Empfänger mit Trennzeichen dazwischen eingeben und das in einem Rutsch weghauen?

Warum machst du delay rein und lässt das nicht einfach mit INTERVAL.h alle x Sekunden ausführen? In der Zwischenzeit könntest du die serielle abfragen, damit du siehst, was das Modul so als Antwort von sich gibt.

HotSystems

Kann man nicht wie beim Handy mehrere Empfänger mit Trennzeichen dazwischen eingeben und das in einem Rutsch weghauen?
Das habe ich bei meinen ersten Versuche damit auch gesucht und nicht gefunden. Alle Tests damit, gingen schief.

Quote
Warum machst du delay rein und lässt das nicht einfach mit INTERVAL.h alle x Sekunden ausführen? In der Zwischenzeit könntest du die serielle abfragen, damit du siehst, was das Modul so als Antwort von sich gibt.
Ist sicher auch eine Alternative.
Die Funktion "ShowSerialData()" zeigt nach dem SMS-Versand auch die Antwort des Moduls.
Hier funktioniert das prima.

Ich vermute der TO macht da noch einen Fehler.
Aber es ist sicher zu optimieren.
Gruß Dieter

I2C = weniger ist mehr: weniger Kabel, mehr Probleme. 8)

Go Up