Go Down

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

HotSystems

Ein geeignetes Beispiel findest du in der IDE unter Beispiele-Communication-SerialEvent.

Wenn du diese Beispiel verwendest, musst du nur in Zeile 55 "if (inChar == '\n')" ein "\r" statt dem "\n" einsetzen.

Dann wird nach einer Texteingabe mit Enter der Text in die Variable "inputString" übernommen.
Diese kannst du dann als SMS weiter verarbeiten und deine SMS hieraus starten.


Gruß Dieter

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

Tobias93

hey, vielen dank.

ich suche nach einem beispiel was mir zeigt wie ich etwas was VOM GSM Modul gesendet wird anzeigen kann. Also quasi ein Beispiel wo ich zum Beispiel im Serial Monitor ein "AT" an das Modul sende und ich dann angezeigt bekomme was das Modul antwortet, im Idealfall "OK". So etwas wäre genau das was ich suche...
Nobody is perfect but - impossible is nothing

ElEspanol

Dann musst du das gsm Modul per usb-seriell-Wandler an den PC anschließen. TX/RX müssen gekreuzt sein, entsprechende Stromversorgung ans Modul und Massen verbinden. ggf. noch beachten ob 3.3V oder 5V

Richtige Baudrate einstellen und ein cr/lf mitschicken. Dann muss es klappen. Ist vom Anschluss im Prinzip nix anderes wie z.B. ein ESP8266

Tobias93

Dann musst du das gsm Modul per usb-seriell-Wandler an den PC anschließen.
Genau das möchte ich nicht, ich möchte es gerne direkt aus der Arduino IDE heraus machen und suche Beispiele/Hilfe hierzu. Nicht über über z.B. ein Terminalprogramm vom PC aus.
Nobody is perfect but - impossible is nothing

HotSystems

Wenn du den SMS-Sketch entsprechend anpasst und mein obiges Beispiel verwendest, funktioniert das auch. Du musst nur erreichen, dass der Befehl "AT" auch so übergeben wird.
Dazu muss das Modul in Warteposition sein, dann nimmt es ja AT-Befehle an.

Hier mal ein Überblick der AT-Befehle.
Gruß Dieter

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

Tobias93

genau das probiere ich eigentlich schon aber anscheinend mache ich was falsch.

Ich sende an das Modul mit

Code: [Select]
TC35Serial.print("AT\r");

Die Anfrage nach seinem Status und frage dann in der Loop mit

Code: [Select]
while(gsmSerial.available() > 0)
  {
    cGSMSerialRead = gsmSerial.read();
    Serial.print(cGSMSerialRead);
  }


Die Antwort ab, aber es wird leider nichts ausgegeben. Er springt noch nichtmal in die Schleife rein also ich komme da wirklich nicht weiter...
Nobody is perfect but - impossible is nothing

HotSystems

genau das probiere ich eigentlich schon aber anscheinend mache ich was falsch.

Ich sende an das Modul mit

Die Antwort ab, aber es wird leider nichts ausgegeben. Er springt noch nichtmal in die Schleife rein also ich komme da wirklich nicht weiter...
Der Ansatz ist eigentlich richtig.

Ich verwende folgende Anweisung in dem Sketch den du erhalten hast:
Code: [Select]
SendTextMessage(); //vorhanden
ShowSerialData();  //eintragen

//nachfolgende Funktion:

void ShowSerialData() {
  while (TC35Serial.available() != 0)
    Serial.write(TC35Serial.read());
}


Da wird auch die Antwort sichtbar.
Gruß Dieter

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

Tobias93

danke für deine Rückmeldung,

Da wird auch die Antwort sichtbar.
ich habe den Sketch von dir um die oben genannte Funktion erweitert, es kommt KEINE Antwort zurück, wirklich rein garnichts. Ich weiß mir wirklich keinen Rat mehr kommt mir bald so vor als ob es bei allen geht nur bei mir nicht.

Das hier ist der Sketch der auf meinem Arduino läuft, kannst du bitte schauen ob er SO wirklich richtig ist und bei dir funktioniert ? Weil bei mir wie gesagt kommt keine Antwort.

Code: [Select]
/*
* Taster löst Funktion nur einmal aus, egal wie lange gedrückt wird.
* Erst wiederholtes Drücken löst Funktion erneut aus.
*/

#include <SoftwareSerial.h>

// SMS-Texte und Telefonnummern in Array eintragen
char* SmsTxt[] = { "", "1. Hallo SMS-Test !"};
char* SmsNmr[] = { "", "1519876543"};
char atxt[100];                                               // Array for message

const int rxPin = 2;                  // rxPin für SoftwareSerial
const int txPin = 3;                  // txPin für SoftwareSerial
const int GSMok = 4;                  // okPin für GSM-Modem geht auf IGT
const int GSMOn = 13;                 // GSMonPin zur Anzeige GSM aktiv, wo geht der hin am Modul ?

unsigned int InValue[5];
const int Input1 = 6;
int i;

SoftwareSerial TC35Serial = SoftwareSerial(rxPin, txPin);
String message  = "";
String number   = "";

void setup() {
  pinMode(Input1, INPUT_PULLUP);
  pinMode(GSMok, OUTPUT);
  pinMode(GSMOn, OUTPUT);

  Serial.begin(9600);
  TC35Serial.begin(9600);
  digitalWrite(GSMok, LOW);         // start GSM TC35
  delay(100);
  digitalWrite(GSMok, HIGH);
  Serial.println("Write your SMS:");

  //Serial.print("Quality: ");
  TC35Serial.println("AT+CSQ\r");
  delay(1000);

  // sende an das Modul den AT Befehl
  SendATtoTheModul();

  // ... irgendwann ab jetzt muss im Serial Monitor
  // ein "OK" zurückkommen
}

void loop() {

  // erste Taste wenn LOW dann senden
  if (digitalRead(Input1) == LOW)     // Tasterabfrage
  {
    if (InValue[1] == LOW )           // aktueller Zustand
    {
      InValue[1] = HIGH;              // neuer Zustand
      SendSMS(1);                     // Funktion SMS(Position)
    }
  }
  else
  {
    InValue[1] = LOW;                 // alter Zustand
  }

  ShowSerialData();  //eintragen
}

void SendSMS(unsigned int i) {
  // hier kommt deine Funktion zum SMS-senden rein
  digitalWrite(GSMOn, HIGH);          // Led an wenn sendet
  Serial.println("Send SMS......");
  Serial.println(SmsTxt[i]);          // auf Monitor zum testen anzeigen
  Serial.println(SmsNmr[i]);          // auf Monitor zum testen anzeigen

  message = SmsTxt[i];
  number = SmsNmr[i];
  SendTextMessage();
 
  delay(100);
  Serial.println("\r");
  Serial.println("Success");
  Serial.println("\r");
  message = "";
  number = "";
  digitalWrite(GSMOn, LOW);
  delay(50);
}

void SendTextMessage() {
  // hier wird die Nummer und der Text ans GSM übermittelt
  TC35Serial.print("AT+CMGF=1\r");
  delay(300);
  TC35Serial.print("AT+CMGS=\"+49" + number + "\"\r");
  delay(300);

  TC35Serial.println(message);
  TC35Serial.print("\r");
  delay(300);

  TC35Serial.println((char)26);
  TC35Serial.println();
}


void SendATtoTheModul()
{
  //Hier wird der "AT" Befehl an das Modul gesendet
  TC35Serial.print("AT\r");
  delay(300);
  TC35Serial.println((char)26);
  TC35Serial.println();
}

//nachfolgende Funktion  wird ausgeführt wenn das Modul antwortet
void ShowSerialData() {
  while (TC35Serial.available() != 0)
    Serial.write(TC35Serial.read());
}


Vielen Dank für deine Hilfe.
Nobody is perfect but - impossible is nothing

HotSystems

Aktuell kann ich deinen Sketch leider nicht testen.
Du hast aber die Anweisung "ShowSerialData();" an die falsche Stelle kopiert.
Setze es bitte hinter die Anweisung "SendTextMessage();".

In deiner Funktion fehlt die Anweisung "TC35Serial.read();" die eine Rückmeldung liefert.
Gruß Dieter

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

Tobias93

hey,

danke für die Rückmeldung! Ich habe die Änderungen von oben durchgeführt aber auch das funktioniert nicht.

Ich komme so leider nicht mehr weiter.

Kann mit bitte jemand mit einem Sketch helfen der bei ihm sicher auch funktioniert hat? Nicht das bei meiner Hardware doch was nicht passt...

Vielen Dank euch!
Nobody is perfect but - impossible is nothing

Tobias93

eine Frage zu deinem Code habe ich noch, der GSMOn Pin, für was ist der und mit welchem Pin des TC Moduls wird er verbunden?
Lg
Nobody is perfect but - impossible is nothing

HotSystems

eine Frage zu deinem Code habe ich noch, der GSMOn Pin, für was ist der und mit welchem Pin des TC Moduls wird er verbunden?
Lg
Das steht im Sketch, ist für eine Kontrollled (Pin13) beim Senden.
Gruß Dieter

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

HotSystems

danke für die Rückmeldung! Ich habe die Änderungen von oben durchgeführt aber auch das funktioniert nicht.
Ich komme so leider nicht mehr weiter.
Dann habe ich leider keine Idee mehr.
Gruß Dieter

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

Tobias93

danke für deine Rückmeldungen!

Gibt es denn über die Hardware des Moduls eine möglichkeit abzufragen ob das Modul in ein GSM Netz eingeloggt ist?
Nobody is perfect but - impossible is nothing

HotSystems

danke für deine Rückmeldungen!

Gibt es denn über die Hardware des Moduls eine möglichkeit abzufragen ob das Modul in ein GSM Netz eingeloggt ist?
Das siehst du am Blinken der Led.

Langsames Blinken (sekunden-Takt)= nicht verbunden.
Kurzes Blinken, lange Pause = eingeloggt.

Mich wundert, dass die Meldungen bei dir nicht funktionieren.
Evtl. kann ich mein Modul am Wochenende ausbauen und das nochmal hier testen.
Ist aber nicht sicher da es aktiv läuft aber keine Verbindung zum PC o. ä. hat.

Gruß Dieter

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

Go Up