nachdem das Kommunizieren meiner CNC-Maschine jetzt per Mobiltelefon funktioniert wollte ich eine weitere Funktion programmieren.
Jetzt geht es darum das Signal der CNC-Maschine zu zählen und nach einer bestimmten Anzahl von Durchläufen soll automatisch eine E-Mail versendet werden.
Dazu habe ich folgenden Code geschrieben...
//Programm zum zählen von Signalen und anschließendem versenden von einer E-Mail
#include <Ethernet.h>
#include <SPI.h>
byte mac[] = { 0x00, 0xAA, 0xBB, 0xCC, 0xDE, 0x02 }; // durch eigene mac ersetzen
byte ip[] = { x, xx, xx, xx }; //durch eigene IP ersetzen
byte server[] = { 217, 69, 254, 100 }; // Mail server IP, //von smtp@smart-mail.de, ev. durch eigenen Server ersetzen
int puls= 0;
EthernetClient client;
int x = 5000; // sichert die Kommunikation zum Server ab
void setup()
{
Serial.begin(9600);
attachInterrupt(0, pulsZahl, HIGH);
Ethernet.begin(mac, ip);
Serial.begin(9600);
Serial.println("connecting...");
delay(x);
if (client.connect(server, 25)) {
Serial.println("connected, Server will respond, please wait");
delay(x);
client.println("EHLO Arduino"); //EHLO muß so geschrieben sein, Arduino = beliebiger Name
delay(x);
//LOG IN************************************************ ************************************************** ************
client.println("AUTH LOGIN"); //Benutzername und Passwort müssen im BASE64 Format vorliegen. Unter "http://base64-encoder-online.waraxe.us/" einfach zu finden.
delay(x);
client.println("xxxxxxxxxxxx"); // das ist der Benutzername, die " " müssen bleiben, xxxx bitte durch deinen BASE 64 code ersetzen
delay(x);
client.println("xxxxxxxxxxx"); // das ist das Passwort, die " " müssen bleiben, xxxx bitte durch deinen BASE 64 code ersetzen
delay(x);
//MAIL Versand******************************************* **************************************************
client.println("MAIL FROM: xxxxxxx@smart-mail.de"); //xxxx bitte durch deine E-Mail ersetzen
delay(x);
client.println("RCPT TO: xxxxxxx@smart-mail.de");
delay(x);
client.println("DATA");
delay(x);
client.println("From: xxxxxx@smart-mail.de");
delay(x);
client.println("To: xxxxxx@smart-mail.de");
delay(x);
client.println("SUBJECT: Test");
delay(x);
client.println();
delay(x);
client.println("Erster test mit arduino.");
delay(x);
client.println(".");
delay(x);
client.println("QUIT");
}
else {
Serial.println("connection failed");
}
}
void loop()
{
delay (10000)
Serial.println (puls, DEC);
puls= 0;
}
void pulsZahl()
{
noInterrupts();
puls++;
interrupts();
}
{
if (client.available()) {
char c = client.read();
Serial.print(c);
}
if (!client.connected()) {
Serial.println();
Serial.println("disconnecting.");
client.stop();
for(; ;
}
}
Ich habe hier das Problem das ich das zählen nicht mit dem Versand der Email in Verbindung bekomme.Außerdem will ich es über das GSM-Modul versenden nicht über die Ethernet-Schnittstelle.
Wenn ich das richtig verstehe, dann kann das GSM900-Modul (müsste auch mit deinem GSM900A gehen) direkt eine Email schicken. Es gibt ein Tutorial zum Versenden einer Email mit dem Modul. Der Ersteller nutzt allerdings ein Terminalprogramm statt eines Arduinos zur Kommunikation mit dem Modul: SIM900 GPRS EMAIL AT Commands
Im Prinzip müsstest du dein SMS-Programm mit den entsprechenden Commandos abändern können.
Mail direkt mit dem Arduino kannst du inzwischen vergessen. Der überwiegende Teil der Provider verlangt inzwischen zwingend SSL oder TLS (verschlüsselte Mails). Dazu ist ein Standard-Arduino (Nano, Uno, Mega) aus Speicher- und Performance-Gründen nicht in der Lage.
Mögliche Lösungen wären z.B., eine Webseite mit PHP-Script zum Mailen zwischen zu schalten oder einen Arduino-Konkurrenten wie ESP8266 oder Yun zu verwenden. Eigentlich sollte es auch mit nem Due möglich sein, kenne aber noch niemanden, der sich die Mühe gemacht hätte, das zu coden ...
also ich wollte jetzt den Code vom SMS versenden anpassen aber bin mir nicht sicher was ich hier dann genau ändern muss?
Ich würde jetzt quasi das versenden von SMS erweitern durch den Verbindungsaufbau zu einem Server.
Wo muss ich den Programmcode einfügen und was muss ich entfernen?
#include <SoftwareSerial.h> //Einbindung der Bibliothek von Arduino für serielle Datenkommunikation
SoftwareSerial mySerial(9, 10); //Definition der verwendeten Pin´s
char msg;
int inPin = 7; // Input pin für Arduino Kommunikation mit CNC
int reading; // Wert des Eingangs
int previous = LOW; // Vorheiger Wert des Eingangs
// folgende Variablen müssen vom Typo unsigned long sein da millis() disen Variablentyp liefert.
unsigned long time = 0; // letzter Zeitwert bei dem der Ausgangzustand wechselte.
unsigned long debounce = 200; // Entprellzeit
void setup()//Grundeinstellungen der Ein- und Ausgangskanäle definiert
{
pinMode(inPin, INPUT);
mySerial.begin(9600); // Festlegung der übertragenen Symbole pro Zeiteinheit - Bautraute vom GSM Module
Serial.begin(9600); // Festlegung der übertragenen Symbole pro Zeiteinheit - Bautraute vom 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 SendMessage()
{
mySerial.println("AT+CMGF=1"); //Setzt the GSM Module in Text Mode
delay(1000); // Delay von 1000 milli sekunde oder 1 sekunde
mySerial.println("AT+CMGS=\"+49XXX\"\r"); // Rufnummer an die gesendet werden soll
delay(1000);
mySerial.println("K-Modul");// Text der gesendet werden soll
delay(100);
mySerial.println((char)26);// ASCII Zeichen verwenden CTRL+Z
delay(1000);
}
Es muss doch jetzt erst das GSM mit dem Server die Verbindung herstellen oder?
#include <SoftwareSerial.h>
SoftwareSerial GSM(7, 8); // RX, TX
enum _parseState {
PS_DETECT_MSG_TYPE,
PS_IGNORING_COMMAND_ECHO,
PS_HTTPACTION_TYPE,
PS_HTTPACTION_RESULT,
PS_HTTPACTION_LENGTH,
PS_HTTPREAD_LENGTH,
PS_HTTPREAD_CONTENT
};
byte parseState = PS_DETECT_MSG_TYPE;
char buffer[80];
byte pos = 0;
int contentLength = 0;
void resetBuffer() {
memset(buffer, 0, sizeof(buffer));
pos = 0;
}
void sendGSM(const char* msg, int waitMs = 500) {
GSM.println(msg);
delay(waitMs);
while(GSM.available()) {
parseATText(GSM.read());
}
}
void setup()
{
GSM.begin(9600);
Serial.begin(9600);
sendGSM("AT+SAPBR=3,1,\"APN\",\"vodafone\"");
sendGSM("AT+SAPBR=1,1",3000);
sendGSM("AT+HTTPINIT");
sendGSM("AT+HTTPPARA=\"CID\",1");
sendGSM("AT+HTTPPARA=\"URL\",\"http://www.iforce2d.net/test.php\"");
sendGSM("AT+HTTPACTION=0");
}
void loop()
{
while(GSM.available()) {
parseATText(GSM.read());
}
}
void parseATText(byte b) {
buffer[pos++] = b;
if ( pos >= sizeof(buffer) )
resetBuffer(); // just to be safe
/*
// Detailed debugging
Serial.println();
Serial.print("state = ");
Serial.println(state);
Serial.print("b = ");
Serial.println(b);
Serial.print("pos = ");
Serial.println(pos);
Serial.print("buffer = ");
Serial.println(buffer);*/
switch (parseState) {
case PS_DETECT_MSG_TYPE:
{
if ( b == '\n' )
resetBuffer();
else {
if ( pos == 3 && strcmp(buffer, "AT+") == 0 ) {
parseState = PS_IGNORING_COMMAND_ECHO;
}
else if ( b == ':' ) {
//Serial.print("Checking message type: ");
//Serial.println(buffer);
if ( strcmp(buffer, "+HTTPACTION:") == 0 ) {
Serial.println("Received HTTPACTION");
parseState = PS_HTTPACTION_TYPE;
}
else if ( strcmp(buffer, "+HTTPREAD:") == 0 ) {
Serial.println("Received HTTPREAD");
parseState = PS_HTTPREAD_LENGTH;
}
resetBuffer();
}
}
}
break;
case PS_IGNORING_COMMAND_ECHO:
{
if ( b == '\n' ) {
Serial.print("Ignoring echo: ");
Serial.println(buffer);
parseState = PS_DETECT_MSG_TYPE;
resetBuffer();
}
}
break;
case PS_HTTPACTION_TYPE:
{
if ( b == ',' ) {
Serial.print("HTTPACTION type is ");
Serial.println(buffer);
parseState = PS_HTTPACTION_RESULT;
resetBuffer();
}
}
break;
case PS_HTTPACTION_RESULT:
{
if ( b == ',' ) {
Serial.print("HTTPACTION result is ");
Serial.println(buffer);
parseState = PS_HTTPACTION_LENGTH;
resetBuffer();
}
}
break;
case PS_HTTPACTION_LENGTH:
{
if ( b == '\n' ) {
Serial.print("HTTPACTION length is ");
Serial.println(buffer);
// now request content
GSM.print("AT+HTTPREAD=0,");
GSM.println(buffer);
parseState = PS_DETECT_MSG_TYPE;
resetBuffer();
}
}
break;
case PS_HTTPREAD_LENGTH:
{
if ( b == '\n' ) {
contentLength = atoi(buffer);
Serial.print("HTTPREAD length is ");
Serial.println(contentLength);
Serial.print("HTTPREAD content: ");
parseState = PS_HTTPREAD_CONTENT;
resetBuffer();
}
}
break;
case PS_HTTPREAD_CONTENT:
{
// for this demo I'm just showing the content bytes in the serial monitor
Serial.write(b);
contentLength--;
if ( contentLength <= 0 ) {
// all content bytes have now been read
parseState = PS_DETECT_MSG_TYPE;
resetBuffer();
}
}
break;
}
}
Dein Code ist meiner Meinung nach übel zu lesen. Die Mühe, das nachzuvollziehen, was Du machen möchtest und dann zu überlegen, wie Du das erreichen könntest, mache ich mir daher erst gar nicht.
Räume Deinen Code auf und mache ihn lesbar. Wenn Du etwas auskommentiert hast, dann lösche es aus dem Code und formatiere den Rest so, dass Zusammenhänge und Abläufe klar sind und man sich keine Knoten ins Hirn machen muss.
also ich möchte den funktionierenden Code zum versenden von SMS so modifizieren, dass ich damit Emails versenden kann. Nachdem die Speicherkapazität für Standardverschlüsselungen von Email vom Arduino wohl nicht reicht wollte ich den Umweg über einen Internetprovider gehen.
Das heißt...
Basiscode vom SMS versenden erlösen von den nutzlosen Sachen --> z.B. Eingabe der Rufnummer
Grundeinstellungen und Abfrage Pin 7 bleibt bestehen
Basiscode erweitern um Verbindung zu Email-Server herstellen zu können
Nachricht versenden über Internetanbieter
Kann man den Code so jetzt lesen?
#include <SoftwareSerial.h> //Einbindung der Bibliothek von Arduino für serielle Datenkommunikation
SoftwareSerial mySerial(9, 10); //Definition der verwendeten Pin´s
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 Typo unsigned long sein da millis() disen Variablentyp liefert.
unsigned long time = 0; // letzter Zeitwert bei dem der Ausgangzustand wechselte.
unsigned long debounce = 200; // Entprellzeit
void setup()//Grundeinstellungen der Ein- und Ausgangskanäle definiert
{
pinMode(inPin, INPUT);
mySerial.begin(9600); // Festlegung der übertragenen Symbole pro Zeiteinheit - Bautraute vom GSM Module
Serial.begin(9600); // Festlegung der übertragenen Symbole pro Zeiteinheit - Bautraute vom 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 überprüfen
delay(100);
ShowSerialData();// Anzeige vom GSM für 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 the SAPBR
delay(2000);
ShowSerialData();
SIM900.println("AT+HTTPINIT"); //init HTTP request
delay(2000);
ShowSerialData();
SIM900.println("AT+HTTPPARA=\"URL\",\"WebsiteAccess?"");// Einstellung httppara, parameter für 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
//while(!SIM900.available());
ShowSerialData();
SIM900.println("AT+HTTPREAD");// Lesen der Daten von Website
delay(300);
SendMessage();
ShowSerialData();
SIM900.println("");
delay(100);
}
void SendMessage()
{
mySerial.println("AT+CMGF=1"); //Setzt the GSM Module in Text Mode
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);
}
Sehr viel besser. Ich habe das noch ein wenig umformatiert und teilweise kommentiert. Wesentliche Änderung: Auf 80 Zeichen Breite bringen, weil ich sowas am liebsten auf Papier lese. Damit Du schon mal etwas davon hast:
#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\",\"WebsiteAccess?\""); // 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);
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);
}
Gruß
Gregor
Nachtrag:
Vorweg: Ich kenne die SoftwareSerial-Bibliothek noch nicht, aber ich werde sie bald ziemlich gut kennen müssen.
Was mir auffällt: SIM900 wird nirgendwo angelegt. Ist das ein Ding, das von der Bibliothek zur Verfügung gestellt wird? Ebenso vermisse ich die Definition von ShowSerialData(). Gilt hierfür das Gleiche?
Hoffnungsvoll stimmt mich immerhin, dass es wohl möglich ist, direkt mit einem Server zu kommunizieren. Wenn Du einen E-Mail-Account hast, von dem aus Du senden kannst, ist das Versenden einer E-Mail nicht allzu schwierig. Es ist halt notwendig, eine „Telnet-Session“ mit einem Server herstellen zu können. Dann kannst Du dem Server quasi per „Text-hin-und-her“ sagen, dass er eine E-Mail zu versenden hat. Wenn ich nur grad das richtige RFC zur Hand hätte ...
Ja genau das SIM900 uns Serial.data wird von der Bib zur Verfügung gestellt.
Also könnte ich eigentlich meine Gmailadresse verwenden und einen Port freigeben auf den zugegriffen werden kann und dann darüber eine Email versenden. Oder brauche ich dazu einen speziellen Provider der seine Programme freigibt und es erlaubt über Fremden Zugriff zu arbeiten?
Das heißt aber der Code ist schon einmal nicht so schlecht oder?
Baril:
Also könnte ich eigentlich meine Gmailadresse verwenden und einen Port freigeben auf den zugegriffen werden kann und dann darüber eine Email versenden. Oder brauche ich dazu einen speziellen Provider der seine Programme freigibt und es erlaubt über Fremden Zugriff zu arbeiten?
Jein, d. h. ich bin mir grad nicht mehr so sicher, ob das problemlos geht, weil ich zu Test- und Demozwecken gerade eine entsprechende Session zu meinem Provider anstellen wollte. Der Zugriffsversuch per telnet hat jedoch nur ein „Request timed out“ ergeben.
Ein Workaround könnte sein, eine Webmail-Session zu simulieren, aber das wird evtl. ein blödes Gefummel.
Baril:
Das heißt aber der Code ist schon einmal nicht so schlecht oder?
Naja, ich kann zumindest alles auf eine A4-Seite drucken (jetzt, wo ich es auf 80 Zeichen Breite gebracht habe :-). Weitergehende Code-Kritik lasse ich lieber bleiben.
Gruß
Gregor
Nachtrag: Manchmal ist es doch ganz gut, wenn man denken kann. Was Du tun möchtest, geht wohl nicht direkt, weil es eben das Verschlüsselungsproblem gibt. Abhilfe wäre möglicherweise, wenn Du selbst einen Server einrichtest, der unverschüsselte Kommunikation via SMTP (Simple Mail Transfer Protocol, Port 25) ermöglicht und der seinerseits verschlüsselt an den Provider weiterreicht. Ob und wie das mit aktuellen Systemen geht, weiß ich nicht. Ich konnte mich mit derlei Zeug eine Zeit lang nicht beschäftigen und habe mein Wissen seither nicht gerade auf dem Laufenden gehalten. Hm ...
Ja habe ich gesehen konnte ich aber nicht ganz nachvollziehen. Habe aber darauf hin mein Programm geschrieben und dachte ich mach dort genau das gleiche...
Baril:
Ich richte bei meiner Fritzbox einen Email-Server ein der unverschlüsselte Nachrichten empfängt und diese dann verschlüsselt weiterleitet.
Ist sowas möglich oder denke ich da grad falsch?
Wenn Deine Fritzbox das kann, ist das wohl die beste Lösung. Dass eine Fritzbox einen E-Mail-Server mimen kann, halte ich aber für sehr unwahrscheinlich.
Nochmal zurück zum Anfang: Du kannst die Info, auf die es ankommt, ja per SMS versenden. Problem ist, dass es jedoch nicht per E-Mail klappt. Wieso ist es so wichtig (ist es das denn wirklich?), dass das per E-Mail klappen soll?
gregorss:
Wenn Deine Fritzbox das kann, ist das wohl die beste Lösung. Dass eine Fritzbox einen E-Mail-Server mimen kann, halte ich aber für sehr unwahrscheinlich.
Ich auch.
Hinzu kommt noch, dass andere Mailserver Mails von dynamischen IP-Adressen fast ausschließlich als Spam betrachten und weg werfen.
Der Mailserver des Providers wird wohl auch nicht von einem anderen Mailserver aus seinem Netz Mails annehmen, weil er dann Gefahr läuft, selbst als Spamschleuder auf die schwarzen Listen zu geraten.
Wenn Du also einen Mailprovider findest, der unverschlüsselt Mails von Dir annimmt oder eine feste IP hast kann es funktionieren, sonst wohl nicht.
Gruß Tommy
Edit: Dazu kommt dann bei einem eigenen Mailserver noch das Problem mit dem MX-DNS-Record.
ohne das Angebot genau geprüft zu haben, ist https://www.smart-mail.de/ ein kostenloser Email-Provider, der auch Mailversand ohne SSL/TLS zulässt.
Es lohnt sich auch mal die alten Accounts durchzugehen. Mein Internetprovider, den ich vor fast 20J. noch vor Compuserve und AOL benutzte, hat laut Webseite auch unverschlüsselten Mailversand. Mich kennt er noch. Den kostenlosen und werbefreien Webspace nutze ich noch immer.
ich werde es nun über die Smart-Mail-Provider probieren. Aber mir ist gerade aufgefallen das mein Code dazu garnicht ausreicht und der Login in die zu dem Server fehlt. Wie müsste ich den Code erweitern damit das dann auch funktioniert?
Im Moment habe ich ja nur den Request ohne Login und Email Versand drinnen...
#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\",\"WebsiteAccess?\""); // 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);
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);
}
Die Anleitung mit Command-Fenster kann ich nicht ganz nachvollziehen und wie das dann im Arduino-Code ausschauen soll