bin neu in der Arduino Welt.
Hatte vorher noch keine Erfahrungen mit Arduino (hatte nur in der Schule C++).
Für einen Freund habe ich einen Webserver gebastelt um dort DS18B20 Temperatursensoren anzeigen zu lassen.
Parallel dazu habe ich versucht wenn ein Wert unterschritten ist das dann max. alle ca. 15 Minuten eine E-Mail versendet wird.
Beide Programme funktionieren erst mal soweit einzeln.
Wollte beides jetzt kombinieren das er über einen Webbrowser seine Werte immer im Blick hat und zur Not noch eine E-Mail bekommt.
Ich vermute mal das man da etwas tricksen muss weil ja das E-Mail versenden als Client geschieht und der Webserver als server halt.
Hier mal der Fehler Code vom Gesamten Sketch:
Lars_Arduino_Komplett.ino:28:22: error: conflicting declaration ‘EthernetServer server’
Lars_Arduino_Komplett.ino:25:6: error: ‘server’ has a previous declaration as ‘byte server [4]’
Lars_Arduino_Komplett.ino: In function ‘void setup()’:
Lars_Arduino_Komplett.ino:54:10: error: request for member ‘begin’ in ‘server’, which is of non-class type ‘byte [4] {aka unsigned char [4]}’
Lars_Arduino_Komplett.ino: In function ‘void loop()’:
Lars_Arduino_Komplett.ino:111:35: error: request for member ‘available’ in ‘server’, which is of non-class type ‘byte [4] {aka unsigned char [4]}’
Als Anhang sind meine Sketch's.
Sketch zu Fehler : Lars_Arduino_Komplett
Vom Webserver : WebServer_mit_DS18B20
vom E-Mail Sketch: Email_mit_DS18B20
Setze bitte deine Sketche hier in den Thread mit Code-Tags (Schaltfläche </>) rein.
So machst du uns zusätzliche Arbeit und auf einem Tablet kann man es teilweise nicht lesen.
Und tricksen muss man da sicher nicht, nur richtig den Code zusammensetzen.
Hallo, habe heute noch etwas probiert aber bekomme es leider nicht zum laufen.
verstehe noch nicht so richtig was der unterschied ist, weil beim einen Sketch ist die IP mit "byte ip[]" und beim anderen mit IPAdress ip(*) festgelegt
Dazu kommt das ja beim mailversand bei Server der Mailserver steht und beim Webserver sozusagen das er auf Port 80 laufen soll..
Falls noch jemand einen Tipp oder vielleicht sogar eine Lösung hat wäre ich sehr Glücklich !!!
m0nn3:
verstehe noch nicht so richtig was der unterschied ist, weil beim einen Sketch ist die IP mit "byte ip[]" und beim anderen mit IPAdress ip(*) festgelegt
Schau dir den Quell Code an. IPAdress ist lediglich eine Wrapper Klasse für ein Byte Array:
class IPAddress : public Printable
{
private:
union {
uint8_t bytes[4];
uint32_t dword;
} _address;
...
}
Enthält dann noch etwas Zugriffs-Methoden um den Inhalt zu manipulieren. Aber man kann es so oder so machen.
Das deutet wie gesagt darauf hin dass du was doppelt drin stehen hast:
error: 'server' has a previous declaration as 'byte server [4]'
Du solltest schon verstehen was du machst. Auch wenn du Code kopierst
Hallo,
habe es jetzt schon mal hinbekommen es so zusammen zustellen das ich beim kompelieren keinen Fehler mehr bekomme.
#include <SPI.h>
#include <Ethernet.h>
// Temperatursensoren Library
#include <OneWire.h> // OneWire-Bibliothek
#include <DallasTemperature.h> // DS18B20-Bibliothek
#define DS18B20_PIN 2 // Pin für DS18B20 definieren Arduino D2
OneWire oneWire(DS18B20_PIN); // OneWire Referenz setzen
DallasTemperature sensors(&oneWire); // DS18B20 initialisieren
byte mac[] = {
0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
IPAddress ip(192,168,178,45);
//EthernetClient client;
EthernetServer server(80);
//Variable fuer Counter
int count = 0;
//Temperatur ab der benachrichtigt wird
float tempMin = 22;
//Einstellungen Temperatursensor
float temperatur1;
float temperatur2;
float temperatur3;
void setup() {
Serial.begin(9600);
// start the Ethernet connection and the server:
Ethernet.begin(mac, ip);
server.begin();
sensors.begin(); // DS18B20 starten
Serial.print("server is at ");
Serial.println(Ethernet.localIP());
delay(1000);
Serial.println("Initialisieren abgeschlossen");
}
void loop() {
EthernetServer server(80);
sensors.requestTemperatures(); // Temperatursensor(en) auslesen
delay(5000);
temperatur1 = sensors.getTempCByIndex(0);
temperatur2 = sensors.getTempCByIndex(1);
temperatur3 = sensors.getTempCByIndex(2);
// Serial Monitor Ausgabe
Serial.print("Temp1 = ");
Serial.print(temperatur1);
Serial.print(" ");
Serial.print(char(176));
Serial.println("C .");
Serial.print("Temp2 = ");
Serial.print(temperatur2);
Serial.print(" ");
Serial.print(char(176));
Serial.println("C .");
Serial.print("Temp3 = ");
Serial.print(temperatur3);
Serial.print(" ");
Serial.print(char(176));
Serial.println("C .");
// wenn count >= 180 ist dann wird eine mail geschickt. das Heißt alle 15 Minuten (180 x 5Sekunden)
if ( count >= 180 && (temperatur1 <= tempMin || temperatur2 <= tempMin || temperatur3 <= tempMin)) {
Serial.println("Temperatur zu gering!!!!!!!!!!!!!!!!!!!!!!!!!!");
sendEmail();
count=0;
}
else
{
Serial.print("Count = ");
Serial.println(count);
Serial.println("Temperatur im Normbereich");
//delay(5000); Dieses delay habe ich nach dem Sernsor auslesen hinzugefügt
count++;
}
// listen for incoming clients
EthernetClient client = server.available();
if (client) {
Serial.println("new client");
// an http request ends with a blank line
boolean currentLineIsBlank = true;
while (client.connected()) {
if (client.available()) {
char c = client.read();
Serial.write(c);
if (c == '\n' && currentLineIsBlank) {
client.println("HTTP/1.1 200 OK");
client.println("Content-Type: text/html");
client.println("Connection: close");
client.println("Refresh: 10");
client.println();
client.println("<!DOCTYPE HTML>");
client.println("<html>");
//##########################################################################################################
client.println(" <title>Lar's Arduino Projekt</title>");
client.println("");
client.println("<body>");
client.println("<div style='text-align: center;'><big><big><big><big><span");
client.println("style='font-weight: bold;'>Temperatur Heizung</span></big></big></big></big><span");
client.println("style='text-decoration: underline;'><span style='font-weight: bold;'>
");
client.println("</span></span>");
client.println("
");
client.println("<table style='text-align: left; width: 100%;' border='1' cellpadding='2'");
client.println("cellspacing='2'>");
client.println("<tbody>");
client.println("<td style='vertical-align: top; width: 100px; text-align: center;'><big><big><big><big><big><big><big>Sensor1</big></big></big></big></big></big></big>
");
client.println("</td>");
client.println("<td style='vertical-align: top; width: 100px; text-align: center;'><big><big><big><big><big><big><big>");
client.println(temperatur1);
client.println(char(176));
client.println("C</big></big></big></big></big></big></big>
");
client.println("</td>");
client.println("</tr>");
client.println("<tr>");
client.println("<td style='vertical-align: top; width: 100px; text-align: center;'><big><big><big><big><big><big><big>Sensor2</big></big></big></big></big></big></big><br");
client.println("</td>");
client.println("<td style='vertical-align: top; width: 100px; text-align: center;'><big><big><big><big><big><big><big>");
client.println(temperatur2);
client.println(char(176));
client.println("C</big></big></big></big></big></big></big>
");
client.println("</tr>");
client.println("<tr>");
client.println("<td style='vertical-align: top; width: 100px; text-align: center;'><big><big><big><big><big><big><big>Sensor3</big></big></big></big></big></big></big>
");
client.println("</td>");
client.println("<td style='vertical-align: top; width: 100px; text-align: center;'><big><big><big><big><big><big><big>");
client.println(temperatur3);
client.println(char(176));
client.println("C</big></big></big></big></big></big></big>
");
client.println("</td>");
client.println("</tr>");
client.println("</tbody>");
client.println("</table>");
client.println("<span style='text-decoration: underline;'><spanstyle='font-weight:");
client.println("bold;=''>
");
client.println("</spanstyle='font-weight:'></span></div>");
client.println("</body>");
//##########################################################################################################
client.println("</html>");
break;
}
if (c == '\n') {
// you're starting a new line
currentLineIsBlank = true;
}
else if (c != '\r') {
// you've gotten a character on the current line
currentLineIsBlank = false;
}
}
}
// give the web browser time to receive the data
delay(1);
// close the connection:
client.stop();
Serial.println("client disonnected");
}
} // loop Klammer
void sendEmail()
{
EthernetClient client;
//byte ip[] = {192, 168, 178, 45 };
byte server[] = {103, 47, 204, 4 }; // FHSTP smtp IP
Serial.println("connecting...");
if (client.connect(server, 587)) {
Serial.println("connected");
client.println("EHLO mail.smtp2go.com");
// Authentication
client.println("auth login");
delay(500);
client.println("bTBubjNAd2ViLmRl");
delay(500);
client.println("c2hvcnRtb25uZQ==");
delay(500);
client.println("MAIL FROM:<m0nn3@web.de>");
client.println("RCPT TO:<amm0nne@gmail.com>");
client.println("DATA");
client.println("TO: <amm0nne@gmail.com>");
client.println("From: Arduino Temperaturüberwachung <m0nn3@web.de>");
client.println("SUBJECT: Arduino Temperaturwarnung");
client.println();
client.println("Wichtige Nachricht von Arduino:");
client.print("Sensor 1 hat ");
client.print(temperatur1);
client.println(" Grad!");
client.print("Sensor 2 hat ");
client.print(temperatur2);
client.println(" Grad!");
client.print("Sensor 3 hat ");
client.print(temperatur3);
client.println(" Grad!");
client.println(".");
client.println("quit");
client.stop();
} else {
client.println("Connection failed");
}
}
Wenn ich es so übertrage habe ich nicht mal eine Serielle Ausgabe.
Wenn ich aber die sendEmail Funktion ausklammere habe ich eine Serielle Ausgabe und der Webserver funktioniert auch.
Aber bekomme leider keine Fehlermeldung.
Edit: was ja eigentlich auch komisch ist weil die sendEmail Funktion wird ja noch gar nicht durchlaufen innerhalb der ersten ca. 15 Minuten.
Da dürfte sie ja noch keine Rolle spielen..