Hallo,
Vorweg: ich habe noch nicht so mega viel Erfahrung mit Arduino.
Ich habe ein kleines Problem: Ich habe mir eine kleine Wettersation aus holz gebaut, wo ich eine Arduino Uno, ein Ethernet Shield, ein 20x4 Display und ein Temperatursensor verbaut habe. Den Code habe ich aus dem Internet und habe ihn auch schon ein wenig verändert... So weit, so gut. Das war vor drei Wochen. Da hat auch alles funktioniert. Er hat alle Daten auf dem Display angezeigt. Jetzt war ich drei Wochen nicht zuhause und habe die Wetterstation wieder in Betrieb genommen und habe jetzt das Problem, dass die Arduino keine Verbindung zu Yahoo aufbauen kann...Auf meinem Rechner habe ich die Seite Browser aufgerufen und sie ist sofort da. Ich habe schon einen anderen Sketch ausprobiert, um die Uhrzeit aus dem Internet zu laden und auf dem Display anzuzeigen. Dies hat funktioniert. Yahoo ist anscheind erreichbar und auch das Ethernet Shield scheint zu funktionieren. Jetzt weiß ich nicht mehr weiter... :~ Vielleicht kann ja mal jemand den Sketch bei sich ausführen und schauen, ob es bei ihm funktioniert.
//
// Read Yahoo Weather API XML
// 03.09.2012
// http://arduino-praxis.ch
//#################################
#include <SPI.h>
#include <Ethernet.h>
#include <TextFinder.h>
#include <LiquidCrystal.h>
#include <OneWire.h>
#include <DallasTemperature.h>
//#################################
LiquidCrystal lcd(8, 9, 5, 4, 6, 2); //Display Pins deklarieren
int Verbunden = 1;
//#################################
#define ONE_WIRE_BUS 7
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
DeviceAddress insideThermometer = {
0x10, 0xA9, 0xC8, 0xC2, 0x02, 0x08, 0x00, 0x2A };
//#################################
byte mac[] = {
0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xAD };
byte ip[] = {
192, 168, 1, 12 };
// Server Yahoo
IPAddress server(87,248,122,181);
EthernetClient client;
//#################################
TextFinder finder( client );
char hum[30];
char wind[30];
//#################################
void setup()
{
// Start Ehternet
Ethernet.begin(mac, ip);
// Start Serial Port
Serial.begin(9600);
Serial.println("Setup...");
lcd.begin(20, 4);
sensors.begin();
//Sensorwerte das erste mal abfragen, weil erste Abfrage immer falsch.
sensors.requestTemperatures();
// set the resolution to 10 bit (good enough?)
sensors.setResolution(insideThermometer, 10);
lcd.setCursor(0,1);
lcd.print(" Arduino Air");
lcd.setCursor(0,3);
lcd.print(" Firmware Ver.:6.0");
delay(6000);
lcd.setCursor(0,1);
lcd.print(" ");
lcd.setCursor(0,3);
lcd.print(" ");
lcd.setCursor(0,1);
lcd.print(" Programmed by");
lcd.setCursor(0,3);
lcd.print(" Lauritz Ackermann");
delay(4000);
lcd.setCursor(0,1);
lcd.print(" ");
lcd.setCursor(0,3);
lcd.print(" ");
}
void loop()
{
if (client.connect(server, 80))
{
// Call Wetter-API
// w: ID from your City
// http://weather.yahooapis.com/forecastrss?w=12893459&u=c
///
Serial.println("Connect to Yahoo Weather...");
client.println("GET /forecastrss?w=656958&u=c HTTP/1.0");
client.println("HOST:weather.yahooapis.com\n\n");
client.println();
Serial.println("Connected...");
lcd.setCursor(0,0);
if (Verbunden == 0) //Wenn er Keine Verbindung angezeigt hat, wird dies weg gemacht.
{
lcd.setCursor(0,0);
lcd.print(" ");
lcd.setCursor(0,3);
lcd.print(" ");
}
Verbunden = 1;
}
else
{
sensors.requestTemperatures(); //Sensorwerte abrufen
float tempC = sensors.getTempC(insideThermometer);
Serial.println("connection failed");
lcd.setCursor(0, 0);
lcd.print("Keine Verbindung ");
lcd.setCursor(0, 1);
lcd.print(" ");
lcd.setCursor(0, 2);
lcd.print(" ");
lcd.setCursor(0, 3);
lcd.print(" ");
lcd.print(tempC);
lcd.write(0xD0 + 15);
lcd.print("C");
}
if (client.connected())
{
// Humidity
if ( (finder.getString("<yweather:atmosphere humidity=\"", "\"",hum,4)!=0) )
{
Serial.print("Humidity: ");
Serial.println(hum);
lcd.setCursor(0, 2);
lcd.print("Luftfeuchte: ");
lcd.print(hum);
lcd.print("%");
}
else
{
Serial.print("No Humidity Data");
}
// Temperature
if(finder.find("temp=") )
{
int temperature = finder.getValue();
Serial.print("Temp C: ");
Serial.println(temperature);
lcd.setCursor(0, 0);
lcd.print("Temp.: ");
lcd.print(temperature);
lcd.write(0xD0 + 15);
lcd.print("C ");
sensors.requestTemperatures();
float tempC = sensors.getTempC(insideThermometer);
lcd.print(tempC);
lcd.write(0xD0 + 15);
lcd.print("C");
}
else
{
Serial.print("No Temperature Data");
}
// END XML
}
else
{
sensors.requestTemperatures();
float tempC = sensors.getTempC(insideThermometer);
Serial.println("Verbindung getrennt");
lcd.setCursor(0, 0);
lcd.print("Keine Verbindung ");
lcd.setCursor(0, 1);
lcd.print(" ");
lcd.setCursor(0, 2);
lcd.print(" ");
lcd.setCursor(0, 3);
lcd.print(" ");
lcd.print(tempC);
lcd.write(0xD0 + 15);
lcd.print("C");
Verbunden = 0;
}
client.stop();
client.flush();
if (Verbunden == 1)
{
delay(300000);
}
else
{
delay(10000);
}
}