Programm zur Kommunikation zum versenden von E-Mails

Baril:

  SIM900.println("AT+SAPBR=3,1,\"CONTYPE\",\"GPRS\"");//Einstellung SAPBR

// nach GPRS

Ohne dir eine Lösung anzubieten, sehe ich hier das Problem, dass innerhalb der Textnachricht benutzt wird. Das dürfte der Compiler als Beendung des Textes interpretieren. Leite die Befehle erst auf den seriellen Monitor und schaue, ob die Befehle dort wie beabsichtigt ankommen.

Hier gibt es das Email-Handbuch zum Sim900: http://www.8051projects.net/files/public/1414922889_22104_FT63039_sim900_email_at_command_manual_v1.02.pdf[/code]

Hallo Leute,

also ich hab jetzt dank Theseus den Code erweitern können allerdings leuchtet mir das nicht ganz ein was ich dort mache. Zum Verständnis...

  1. Abfrage Pin 7
  2. Request HTTP --> Kontakt zur Website herstellen
  3. Login in Website
  4. Versenden von Email

Oder sehe ich das falsch? Außerdem leuchtet mir nicht ein ob jetzt void SendMessage() überhaupt noch gebraucht wird oder nicht.

#include <SoftwareSerial.h> //Einbindung der Bibliothek von Arduino fuer
                            // serielle Datenkommunikation
SoftwareSerial mySerial(9, 10); //Definition der verwendeten Pins
char msg;
int inPin = 7;         // Input pin für Arduino
int reading;           // Wert des Eingangs
int previous = LOW;    // Vorheiger Wert des Eingangs


// folgende Variablen müssen vom Typ unsigned long sein da millis() diesen
// Variablentyp liefert.

unsigned long time = 0;       // letzter Zeitwert bei dem der Ausgangzustand 
                              // wechselte.
unsigned long debounce = 200; // Entprellzeit


void setup()
{
 pinMode(inPin, INPUT);

  mySerial.begin(9600);   // Baudrate GSM Modul
  Serial.begin(9600);     // Baudrate Arduino

  Serial.println("GSM SIM900A BEGIN");
  Serial.println("Signal von CNC:");
  Serial.println("LOW : to send message");
  Serial.println();

  delay(100); // ?
}

void loop()//Status Abfrage
{
   reading = digitalRead(inPin);

  // Beim Wechsel des Eingangs von LOW zu HIGH und nach der Entprellzeit: 
  if ((reading == HIGH) && (previous == LOW) && (millis() - time > debounce)) {
    time = millis(); 
    Serial.println("Sende SMS");
    SendMessage();    //Nachricht senden
  }

// Beim Wechsel des Eingangs von HIGH zu LOW und nach der Entprellzeit:
  if (reading == LOW && previous == HIGH && millis() - time > debounce) {
    time = millis();    
  }

previous = reading;
}

void SubmitHttpRequest()
{
 
  SIM900.println("AT+CSQ"); // Signal pruefen

  delay(100);
 
  ShowSerialData(); // Anzeige vom GSM fuer http request  
  SIM900.println("AT+CGATT?"); //Verbindung zu GPRS
  delay(100); // ?
 
  ShowSerialData();
  SIM900.println("AT+SAPBR=3,1,\"CONTYPE\",\"GPRS\"");//Einstellung SAPBR
                                                      // nach GPRS
  delay(1000); // ?
 
  ShowSerialData();
 
  SIM900.println("AT+SAPBR=3,1,\"APN\",\"K-Modul\"");
  delay(4000); // ?
 
  ShowSerialData();
 
  SIM900.println("AT+SAPBR=1,1"); //Einstellung SAPBR
  delay(2000); // ?
 
  ShowSerialData();
 
  SIM900.println("AT+HTTPINIT"); //init HTTP request
 
  delay(2000); //?

  ShowSerialData();
 
  SIM900.println("AT+HTTPPARA=\"URL\",\"https://www.smart-mail.de/\""); // Einstellung http-
                                                          // para, Parameter f.
                                                         // website eingeben,
                                                        // auf die Zugegriffen
                                                       // werden soll
  delay(1000); // ?
 
  ShowSerialData();
 
  SIM900.println("AT+HTTPACTION=0"); //Anfrage senden 
  delay(10000); //Delay Zeit für Datenübertragung ausreichend anlegen
 
  ShowSerialData();
 
  SIM900.println("AT+HTTPREAD");// Lesen der Daten von Website
  delay(300);

  SIM900.println("AT+EMAILCID=1");// Parameter für Email setzen
  delay(300);

  SIM900.println("AT+EMAILCID=30");// Parameter für Email setzen
  delay(300);

  SIM900.println("AT+SMTPSRV="www.smart-mail.de",25");// Server Adresse und Port setzen
  delay(300);


  SIM900.println("AT+SMTPAUTH="Kommunikationsmodul","Passwort?"");// Login Name und Passwort
  delay(300);


  SIM900.println("AT+SMTPFROM="Kommunikationsmodul@smart-mail.de","Kommunikationsmodul"");
								// Sender Adresse und Name
  delay(300);

  SIM900.println("AT+SMTPFROM="Empfänger@XXX.com","Empfängername");// Empfängeradresse und Name
  delay(300);

  SIM900.println("AT+SMTPSUB="TEST"");// Betreffzeile
  delay(300);

  SIM900.println("AT+SMTPBODY="TEST"");// Text der E-Mail
  delay(300);

  SIM900.println("AT+SMTPSEND");// E-Mail senden
  delay(300);

  SendMessage();
  ShowSerialData();
 
  SIM900.println("");
  delay(100);
}

void SendMessage()
{
  mySerial.println("AT+CMGF=1"); //Setzt GSM Module in Textmodus
  delay(1000); // Delay von 1000 milli sekunde oder 1 sekunde

  mySerial.println("K-Modul"); // Text der gesendet werden soll
  delay(100);

  mySerial.println((char)26); // ASCII Zeichen verwenden CTRL+Z
  delay(1000);
}

Baril:
also ich hab jetzt dank Theseus den Code erweitern können allerdings leuchtet mir das nicht ganz ein was ich dort mache. Zum Verständnis...

  1. Abfrage Pin 7
  2. Request HTTP --> Kontakt zur Website herstellen
  3. Login in Website
  4. Versenden von Email

Irgendwas scheint mir da etwas durcheinander zu laufen. Ich verstehe nicht, was du mit der HTTP Verbindung bezweckst. So wie ich das verstanden habe, logt man sich beim Email-Server ein und setzt die Email ab - im Prinzip das, was auch klassische Email-Programme wie Outlook machen. Also entweder Email per HTTP-Abfragen oder klassisch per Mail-Server machen.

Schau dir auch die Beispiele im Kapitel3 des Sim900-Email-Handbuch an.

Hallo Theseus,

ah ok ja das hat mich auch verwirrt. Ich dachte man stellt mit dem HTTP-Request die Verbindung zum Server her und danach stellt man quasi alles ein um E-Mail versenden zu können. Aber gut soll mir recht sein wenn man nur eines braucht. Dann müsste der Code demnach so aussehen...

#include <SoftwareSerial.h> //Einbindung der Bibliothek von Arduino fuer
                            // serielle Datenkommunikation
SoftwareSerial mySerial(9, 10); //Definition der verwendeten Pins
char msg;
int inPin = 7;         // Input pin für Arduino
int reading;           // Wert des Eingangs
int previous = LOW;    // Vorheiger Wert des Eingangs


// folgende Variablen müssen vom Typ unsigned long sein da millis() diesen
// Variablentyp liefert.

unsigned long time = 0;       // letzter Zeitwert bei dem der Ausgangzustand 
                              // wechselte.
unsigned long debounce = 200; // Entprellzeit


void setup()
{
 pinMode(inPin, INPUT);

  mySerial.begin(9600);   // Baudrate GSM Modul
  Serial.begin(9600);     // Baudrate Arduino

  Serial.println("GSM SIM900A BEGIN");
  Serial.println("Signal von CNC:");
  Serial.println("LOW : to send message");
  Serial.println();

  delay(100); // ?
}

void loop()//Status Abfrage
{
   reading = digitalRead(inPin);

  // Beim Wechsel des Eingangs von LOW zu HIGH und nach der Entprellzeit: 
  if ((reading == HIGH) && (previous == LOW) && (millis() - time > debounce)) {
    time = millis(); 
    Serial.println("Sende SMS");
    SendTextMessage();    //Nachricht senden
  }

// Beim Wechsel des Eingangs von HIGH zu LOW und nach der Entprellzeit:
  if (reading == LOW && previous == HIGH && millis() - time > debounce) {
    time = millis();    
  }

previous = reading;
}

void SendTextMessage()
{

  SIM900.println("AT+EMAILCID=1");// Parameter für Email setzen
  delay(300);

  SIM900.println("AT+EMAILCID=30");// Parameter für Email setzen
  delay(300);

  SIM900.println("AT+SMTPSRV="www.smart-mail.de",25");// Server Adresse und Port setzen
  delay(300);


  SIM900.println("AT+SMTPAUTH="Kommunikationsmodul","Passwort?"");// Login Name und Passwort
  delay(300);


  SIM900.println("AT+SMTPFROM="Kommunikationsmodul@smart-mail.de","Kommunikationsmodul"");
								// Sender Adresse und Name
  delay(300);

  SIM900.println("AT+SMTPFROM="Empfänger@XXX.com","Empfängername");// Empfängeradresse und Name
  delay(300);

  SIM900.println("AT+SMTPSUB="TEST"");// Betreffzeile
  delay(300);

  SIM900.println("AT+SMTPBODY="TEST"");// Text der E-Mail
  delay(300);

  SIM900.println("AT+SMTPSEND");// E-Mail senden
  delay(300);

  SIM900..println("AT+CMGF=1"); //Setzt GSM Module in Textmodus
  delay(1000);

  SIM900.println((char)26); // ASCII Zeichen verwenden CTRL+Z
  delay(1000);

  ShowSerialData();

}

Oder fehlt mir jetzt die Verbindung zwischen der Abfrage Pin 7 und dem versenden der Nachricht?
Kann mir jemand mitteilen ob der Code bei ihm funktioniert? Weiß jemand wie man bei smart-mail den Port 25 freigibt bzw. den Zugriff gewährt?

Ich habe leider kein SIM900-Modul, so dass ich es nicht testen kann. Versuche doch erst mal eine Email am PC mit einem Mail-Programm unverschlüsselt zu senden. Das sollten die Serveradressen sein: https://www.pop3-imap-smtp.de/smart-mail/

Ich gehe davon aus, dass smtp.smart-mail.de statt www.smart-mail.de wesentlich erfolgsversprechender ist.

Wenn du mal manuell einen Email-Service erfolgreich am PC in Outlook und Co. eingetragen hast, sollte dir vieles klarer werden.

Ja ok probiere ich.

Hat jemand eine Ahnung was diese Fehlermeldung bedeutet?

Mehrere Bibliotheken wurden für "SoftwareSerial.h" gefunden
 Benutzt: C:\Program Files (x86)\Arduino\hardware\arduino\avr\libraries\SoftwareSerial
 Nicht benutzt: C:\Program Files (x86)\Arduino\libraries\SoftwareSerial
exit status 1
stray '@' in program

Du solltest deine Softserial-Bibliotheken aufräumen. Du hast augenscheinlich mehrere installiert und der Compiler muss rätseln, welche die richtige ist.

Ja das hatte ich auch verstanden obwohl er da noch nie was gesagt hatte. Aber das @-Zeichen scheint er auch nicht interpretieren zu können. Muss man das erst noch hinzufügen oder schreibt man in solchen Programmen dann AT?

So habe jetzt noch die GSM.h bib eingebunden und den Code nochmal angepasst bekomme aber trotzdem nur Fehlermeldungen beim kompilieren kann mir da jemand auf die Sprünge helfen?

Arduino: 1.8.2 (Windows 10), Board: "Arduino/Genuino Uno"

C:\Arduino\Email_perGSM_an_Smart-mail.ino: In function 'void SendMessage()':

Email_perGSM_an_Smart-mail:57: error: expected unqualified-id before '.' token

   GSM.println("AT+EMAILCID=1");// Parameter für Email setzen

      ^

Email_perGSM_an_Smart-mail:60: error: expected unqualified-id before '.' token

   GSM.println("AT+EMAILCID=30");// Parameter für Email setzen

      ^

Email_perGSM_an_Smart-mail:63: error: expected unqualified-id before '.' token

   GSM.println("AT+SMTPSRV=""www.smart-mail.de","25");// Server Adresse und Port setzen

      ^

Email_perGSM_an_Smart-mail:67: error: expected unqualified-id before '.' token

   GSM.println("AT+SMTPAUTH=""Kommunikationsmodul","Passwort");// Login: Name und Passwort

      ^

Email_perGSM_an_Smart-mail:71: error: expected unqualified-id before '.' token

   GSM.println("AT+SMTPFROM=""Kommunikationsmodul@smart-mail.de","Kommunikationsmodul");

      ^

Email_perGSM_an_Smart-mail:75: error: expected unqualified-id before '.' token

   GSM.println("AT+SMTPFROM=""XXX@gmail.com","Marius");// Empfängeradresse und Name

      ^

Email_perGSM_an_Smart-mail:78: error: expected unqualified-id before '.' token

   GSM.println("AT+SMTPRCPT=1,0,""XXX@gmail.com","Marius");// CC Empfängeradresse und Name

      ^

Email_perGSM_an_Smart-mail:81: error: expected unqualified-id before '.' token

   GSM.println("AT+SMTPSUB=""K-Modul");// Betreffzeile

      ^

Email_perGSM_an_Smart-mail:84: error: expected unqualified-id before '.' token

   GSM.println("AT+SMTPBODY=""TEST");// Text der E-Mail

      ^

Email_perGSM_an_Smart-mail:87: error: expected unqualified-id before '.' token

   GSM.println("AT+SMTPSEND");// E-Mail senden

      ^

exit status 1
expected unqualified-id before '.' token

Hier der verwendete Code:

#include <SoftwareSerial.h> //Einbindung der Bibliothek von Arduino fuer
                            // serielle Datenkommunikation
#include <GSM.h>
SoftwareSerial mySerial(9, 10); //Definition der verwendeten Pins

char msg;
int inPin = 7;         // Input pin für Arduino
int reading;           // Wert des Eingangs
int previous = LOW;    // Vorheiger Wert des Eingangs


// folgende Variablen müssen vom Typ unsigned long sein da millis() diesen
// Variablentyp liefert.

unsigned long time = 0;       // letzter Zeitwert bei dem der Ausgangzustand 
                              // wechselte.
unsigned long debounce = 200; // Entprellzeit


void setup()
{
 pinMode(inPin, INPUT);

  mySerial.begin(9600);   // Baudrate GSM Modul
  Serial.begin(9600);     // Baudrate Arduino

  Serial.println("GSM SIM900A BEGIN");
  Serial.println("Signal von CNC:");
  Serial.println("LOW : to send message");
  Serial.println();

  delay(100);
}

void loop()//Status Abfrage
{
   reading = digitalRead(inPin);

  // Beim Wechsel des Eingangs von LOW zu HIGH und nach der Entprellzeit: 
  if ((reading == HIGH) && (previous == LOW) && (millis() - time > debounce)) {
    time = millis(); 
    Serial.println("Sende E-Mail");
    SendMessage();    //Nachricht senden
  }

// Beim Wechsel des Eingangs von HIGH zu LOW und nach der Entprellzeit:
  if (reading == LOW && previous == HIGH && millis() - time > debounce) {
    time = millis();    
  }

previous = reading;
}

void SendMessage() //Versenden von E-Mail
{

  GSM.println("AT+EMAILCID=1");// Parameter für Email setzen
  delay(300);

  GSM.println("AT+EMAILCID=30");// Parameter für Email setzen
  delay(300);

  GSM.println("AT+SMTPSRV=""smpt.smart-mail.de","25");// Server Adresse und Port setzen
  delay(300);


  GSM.println("AT+SMTPAUTH=""Kommunikationsmodul","Passwort");// Login: Name und Passwort
  delay(300);


  GSM.println("AT+SMTPFROM=""Kommunikationsmodul@smart-mail.de","Kommunikationsmodul");
                                                            // Sender Adresse und Name
  delay(300);

  GSM.println("AT+SMTPFROM=""XXX@gmail.com","Marius");// Empfängeradresse und Name
  delay(300);

  GSM.println("AT+SMTPRCPT=1,0,""XXX@gmail.com","Marius");// CC Empfängeradresse und Name
  delay(300);

  GSM.println("AT+SMTPSUB=""K-Modul");// Betreffzeile
  delay(300);

  GSM.println("AT+SMTPBODY=""TEST");// Text der E-Mail
  delay(300);

  GSM.println("AT+SMTPSEND");// E-Mail senden
  delay(300);

}

Also niemand eine Ahnung was hier am Code nicht stimmt?

Das sagt Dir der Compiler doch:

GSM.println...

Das GSM ist nicht definiert. Schau mal in den Beispielen zur Lib, wie Du die Instanz anlegen mußt.

Meist ist das so was wie

GSM gsm;

Dann muß das gsm.println... heißen.

Gruß Tommy