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.
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...
Abfrage Pin 7
Request HTTP --> Kontakt zur Website herstellen
Login in Website
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...
Abfrage Pin 7
Request HTTP --> Kontakt zur Website herstellen
Login in Website
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.
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/
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);
}