Hilfe - Arduino Ethernet Smart Home
lima-city → Forum → Programmiersprachen → Sonstige Programmiersprachen
adresse
ausgabe
auslese
byte
code
datei
datum
fehlermeldung
host
http
kennwort
not
pfad
quellcode
sensor
server
temperatur
url
verbindung
wartezeit
-
Ich will für ein Schulprojekt ein Smart Home machen, wo man z.B. die Temperatur oder sowas auf einen Webserver auslesen kann.
Alle Sachen auf Seiten des Webservers funktionieren schon und wenn ich was manuell in die Datenbank eintrage, wird das vom Webserver verarbeitet und dargestellt. Jetzt muss ich nurnoch das mit den Arduino zum laufen bringen, dass er die Daten an die MySQL Datenbank schickt.
Ich habe jetzt dieses Script und habe das Teilweise aus einen Tutorial übernommen und eig. sollte das funktionieren. Jedoch wird bei mir mehrere Fehlermeldungen angezeigt.
Ich hoffe ihr könnt mir helfen
Arduino Quellcode:
#include <Ethernet.h> #include <SPI.h> byte mac[] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; // MAC-ADRESSE eingeben! IPAddress ip(192,168,178,60); byte gateway[] = { 192, 168, 178, 1 }; // Gateway eingeben! byte subnet[] = { 255, 255, 255, 0 }; byte server[] = { 212,83,45,137 }; // IP des Servers eingeben EthernetServer server(80); char host[] = "dreamworkindustries.tk"; // DOMAIN eingeben! char url[] = "/arduino_push_data.php"; // Pfad zur PHP-Datei eingeben char key[] = "f"; // Kennwort aus PHP-Datei eingeben char c; int Sensor = 0; // LM35 int PowerLED = 3; // Power LED float Temperatur = 0; // Variable für Temperatur ;-) int temp = 0; // Analog-Wert void setup() { pinMode(PowerLED, OUTPUT); Serial.begin(9600); // für Debug-Ausgaben Serial.println("Programm gestartet..."); digitalWrite(PowerLED, HIGH); Ethernet.begin(mac, ip, gateway, subnet); delay(5000); // warten, bis LAN gestartet } void loop() { digitalWrite(PowerLED, LOW); Sensor_lesen(); Daten_senden(); delay(900); digitalWrite(PowerLED, HIGH); if (client.available()) { char c = client.read(); Serial.print(c); } delay(899000); client.stop(); client.flush(); } void Sensor_lesen() { temp = analogRead(Sensor); // Analog-Wert auslesen Temperatur = (5.0 * temp * 100.0)/1024.0; // Berechnung der Temperatur in °C Serial.print("Temperatur: "); Serial.println(Temperatur); } void Daten_senden() { if (client.connect()) // Verbindung zum Server aufbauen { Serial.print("Verbunden...sende Daten..."); client.print("GET "); client.print(url); client.print("?TEMP="); client.print(Temperatur); client.print("&key="); client.print(key); client.println(" HTTP/1.1"); client.print("Host: "); client.println(host); client.println(); Serial.println("fertig!"); } else { Serial.println(" ***** VERBINDUNGSAUFBAU NICHT MÖGLICH *****"); } }
Fehlermeldungen:
WebServer:36: error: conflicting declaration 'EthernetServer server'
WebServer:35: error: 'server' has a previous declaration as 'byte server [4]'
WebServer.ino: In function 'void loop()':
WebServer:65: error: 'client' was not declared in this scope
WebServer:71: error: 'client' was not declared in this scope
WebServer.ino: In function 'void Daten_senden()':
WebServer:85: error: 'client' was not declared in this scope
Ich hoffe ihr könnt mir irgentwie dabei helfen... komme echt nicht weiter und verzweifle an den fehlermeldungen -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
Also dort ist etwas verbogen:
Fangen wir mit den einfachen Fehlern an:
Du referenzierst eine Instanz der Klasse client ohne einen definiert zu haben, das kann nicht stimmen.
Außerdem verwendest du zwei mal den namen server (einmal für ein bytearray und einmal für eine Instanz der Ethernet lib) das geht nicht.
Welches Tutorial reproduzierst du denn ?
Beitrag zuletzt geändert: 23.1.2014 20:42:42 von fatfox -
Hej danke schonmal für deine Antwort :)
Ich habe versucht aus diesen Tuts schlau zu werden
1. http://fluuux.de/2012/09/arduino-mysql-temperatur-sensoren-uber-webserver-auslesen/
2. http://jleopold.de/2011/03/16/arduino-daten-logger-mysql-php/
Ich habe beide Quellcodes von den Seiten probiert und beide haben nicht funktioniert.
Ich benutze einen Arduino Leonardo + Ethernet Shield
Mittlerweise habe ich es so hinbekommen, dass keine fehlermeldungen mehr kommen, aber es regt sich auch nichts leider ...
Hier der Quellcode meines jetztigen standes:
#include <Ethernet.h> #include <SPI.h> byte mac[] = { 0x90, 0xA2, 0xDA, 0x00, 0x82, 0x14 }; // MAC-ADRESSE eingeben! byte ip[] = { 192, 168, 178, 60 }; // IP-Adresse eingeben! byte gateway[] = { 192, 168, 178, 1 }; // Gateway eingeben! byte subnet[] = { 255, 255, 255, 0 }; byte server[] = {212,83,45,137}; // IP des Servers eingeben EthernetClient client; char host[] = "dreamworkindustries.tk"; // DOMAIN eingeben! char url[] = "/arduino_push_data.php"; // Pfad zur PHP-Datei eingeben char key[] = "fabi"; // Kennwort aus arduino_push_data.php -Datei eingeben char c; int wartezeit =9000; // Wartezeit zwischen messungen, IMMER 1 sec weniger angeben (59 für 60 usw...) float TEMP; void setup() { Serial.begin(9600); // für Debug-Ausgaben Serial.println("Programm gestartet..."); Ethernet.begin(mac, ip, gateway, subnet); delay(5000); // warten, bis LAN gestartet } void loop() { Sensor_lesen(); Daten_senden(); delay(900); if (client.available()) { char c = client.read(); Serial.print(c); } delay(wartezeit); // Upload alle 60 sec. immer 1 sec weniger eintragen! client.stop(); client.flush(); } void Sensor_lesen() { TEMP = 20; } void Daten_senden() { if(client.connect(server, 80)>0) // Verbindung zum Server aufbauen { Serial.print("Verbunden...sende Daten..."); client.print("GET "); client.print(url); //ab hier meine sachen client.print("?TEMP"); client.print(TEMP); client.print("&key="); client.print(key); client.println(" HTTP/1.1"); client.print("Host: "); client.println(host); client.println(); Serial.println("fertig!"); } else { Serial.println(" ***** VERBINDUNGSAUFBAU NICHT MÖGLICH *****"); } }
Vielleicht, ist der ja bisschen besser und leichter zu verbessern.
Danke für deine Hilfe :) -
Keine Ahnung, ob es der einzige Fehler ist, aber falsch ist es:
client.print("?TEMP");
muss
client.print("?TEMP=");
sein.
Am besten erst mal die verbindung selbst mit einer festen Zeile, wie z.B.
client.println("dreamworkindustries.tk/Arduino_push_data.php?TEMP=21&KEY=fabi");
testen.
Dann nochmal kritisch schauen, wo print und wo println hinkommt, glaube da sind auch Fehler.
OT: "TEMP" ist zwar ein schöner Name für die Temperatur, aber ich dachte erst das wäre eine temporäre Variable
Beitrag zuletzt geändert: 24.1.2014 16:20:17 von strommanager2013 -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage