Day 10: Temperature display

Today’s project is an intuitive display of the current temperature. With a single look, you can guess at whether it is sensible to take along a warm jacket.

Anschluss der RGB LED an die Pins D3, D5 und D6

The RGB-LED on Pins D3, D5 and D6

Behind today’s door, there is another LED. This is a special one. It is an RGB-LED. RGB means Red, Green, Blue, the LED actually is made up of several LEDs with a shared cathode connection. A combination of the different colours with different brightnesses permits presenting almost any colour. The LED can be connected to the PWM outputs D3, D5, D6 of the controller with dropping resistors.

The program: Day10_TCPWeatherUpdate

Today’s sketch is about querying a website again, but this time a weather site. Formerly the website was the well known site www.openweathermap.org, but due to changes in their API i had to create an other webservice, from which you can get the current temperatur. But this webservices source is still openweathermap.com. So the new weblink is:

www.temp.fkainka.de

On this page, you can get information on the weather in your town by varying the URL. In the program just enter the city you want to query in the source text behind CITY. As an example, I am using my home town Essen.

The link to the webservice would be:

http://temp.fkainka.de/?city=essen

The programme now reads the temperature from this page and shows the result in colour via the RGB-LED. At the same time, the value is output via the serial monitor. The temperature range used in the example program for display on the LED is -20°C to +40°C.

Temperaturausgabe über den Seriellen Monitor

The temperature in the Serial Monitor

62 Comments

  1. RICI

    Danke für die Cityvorschläge. Ich habe mal ein paar warme Städte und den Südpol eingetragen. Ganz schoen warm dort. ( Ich werde das Programm am 15 Juli ausprobieren, mal sehen wie kalt es ist.)

    Und damit man alle Städte gleichzeitig abfragen kann , ein kleiner “switch in the loop”.

    Änderungen:

    1===

    // 2 gobal vabiable
    int lauf = 0; // lauf variable fuer switch
    String cityo = “Essen” ; // inti

    2=== da der switch

    void loop() {
    //getTCP(“temp.fkainka.de”,”/”);

    switch (lauf) {
    case 0:
    cityo = “Miami”;
    break;
    case 1:
    cityo = “Moskau”;
    break;
    case 2:
    cityo = “Kathmandu” ;
    break;
    case 3:
    cityo = “Honolulu”;
    break;
    case 4:
    cityo = “Hammerfest”;
    break;
    case 5:
    cityo = “Sheya”;
    break;
    case 6:
    cityo = “Canberra” ;
    break;
    case 7:
    cityo = “Rom”;
    break;
    case 8:
    cityo = “Wellington”;
    break;
    case 9:
    cityo = “Berlin”;
    break;
    case 10:
    cityo = “Kairo” ;
    break;
    case 11:
    cityo = “Kindu”;
    break;
    case 12:
    cityo = “Oimjakon”;
    break;
    case 13:
    cityo = “Hamburg” ;
    break;
    case 14:
    cityo = “Roebourne”; // Australia
    break;
    case 15:
    cityo = “Recife”;
    break;
    case 16:
    cityo = “Manaus”;
    break;
    case 17:
    cityo = “Kuqa”; //china
    break;
    case 18:
    cityo = “SCRM”; // Antarktis (king Gorge)
    break;
    case 19:
    cityo = “NZSP”; // Antarktis Jack F Paulus Skiway
    break;

    }

    lauf = lauf + 1;

    if (lauf > 20)
    { lauf = 0 ;
    cityo = “Essen”;
    }

    //int temp = getWeatherTemp(CITY);
    int temp = getWeatherTemp(cityo);
    rgbTemp(temp);
    delay(2000); //orginal 600000 mit mehr speed
    }

    3=====
    Und dann noch die Ausgabe abändern , dass die city gedruckt wird.

    debug(“Temp: ” + String(vTemp) + “C ” + city);

    4======
    Das ist schon der Output.
    Und wie herrlich die LED leuchtet. (alle Farben)

    Ich bin heute vom day_10 richtig begeistert.

    Reply
  2. Andreas

    Noch ein Versuch:
    – Die Es und der Bindestrich steht nicht dort!
    Wenns jetzt wieder nicht funktioniert geb’ ichs auf!

    Reply
  3. Andreas

    Und jetzt hat es das “” nicht mitgeschrieben

    Reply
  4. Andreas

    Ergänzend: vor Debug steht noch ein – das hat es nicht mitkopiert

    Reply
  5. Andreas

    Aus unerklärlichen Gründen funktioniert heute die Temperaturabfrage – dafür leuchtet die LED aber nicht mehr – Ausserdem steht bei mir im Monitor mehr drin als nur die Temperatur. Nach der Mac Adresse und OK steht folgendes:

    Temp: -2.98 Debug: Found Set

    +IPD,5:0

    C

    Nach den Änderungen die mir Martin angegeben hat, funktioniert es genauso – auch ohne LED-Anzeige.

    Kann mir wer sagen, warum die LED nicht leuchtet (sie ist in Ordnung und richtig angeschlossen)

    Grüsse Andreas

    Reply
    1. fk (Post author)

      Hi,
      das Problem ist, dass der Controller die Temperatur nicht mittels parseInt() erkennt. Hast du etwas an der Zeile geändert? Und welche Aduino Version benutzt du?

      Und benutzt du das Programm, das hier zu sehen ist? oder eine ältere Version?

      Reply
      1. Andreas

        Danke! Jetzt funktioniert es! Habe die Änderungen von Martin gemacht – eigentlich unter anderem Namen abgespeichert – aber irrtümlich offensichtlich doch auch unter dem ursprünglichen Namen gespeichert.
        Danke jedenfalls nocheinmal!

        Reply
  6. Michael061

    Leider will es heute einfach nicht laufen.
    Die Anzeige im seriellen Monitor geht nur bis
    +CIFSR:STAMAC,”18:fe:3
    Die LED schein zu funtionieren.
    Warum ist die Anzeige nicht komplett ?

    Reply
    1. fk (Post author)

      Hi,
      das hört sich nach einem Problem mit der SoftwareSeriellen an. Welche Arduino-Version benutzt du? Ím zweifel mal updaten.

      Ansonsten kann es auch sein, dass du nicht das aktuelle Programm von genau dieser Seite hast? Es gab eine Änderung im Programm.

      Reply
  7. Andreas

    Es funktioniert, leider ist die LED rot und ich muss zeitiger aufstehen und Scheiben kratzen gehen :-( . In Australien könnte ich noch 10 Minuten länger….. da ist die LED grün. Ok ich hab ein wenig am Code geschraubt, aber den gibt es nicht, der ist so Grotten schlecht. Morgen Früh soll es hier wärmer sein als jetzt……..

    Reply
  8. Thommy

    Ich hab ein Problem,

    Das Ding startet und die LED 13 beginnt zu leuchten, die RGB Led bleibt aber dunkel. Ebenfalls wird in der Konsole nur die halbe MAC Adresse angezeigt. Ich benutze Arduino IDE 1.6.4.

    WLAN Connected
    My IP is:

    AT+CIFSR

    +CIFSR:STAIP,”192.168.1.61″
    +CIFSR:STAMAC,”18:fe:34:

    hat jemand eine Idde an was das liegt?

    Reply
    1. Martin

      Klingt ähnlich wie mein anfängliches Problem. Kann es sein, dass du noch die Seite http://www.openweathermap.org probierst? Die hat bei mir nicht funktioniert. Ich habs dann auf das hier genannte http://www.temp.fkainka.de/?city= CITY umgeändert (siehe mein Kommentar weiter unten).

      Hoffe das hilft.
      Lg Martin

      Reply
    2. amseld

      Hab das gleiche Problem mit Linux Mint und der IDE in 1.0.irgndwas.

      Tippe auf defekte Hardware

      Reply
  9. Klaus

    Im Forum gibt es von mir eine neue Version, bei der man die Stadt über die Tastatur eingeben kann.

    Reply
    1. BravoSierra

      Servus

      Danke Super gelöst.
      Habe geich mal einige Orte ausprobiert.

      Oimjakon Russland -49°C (LED ist aus)
      Roebourne Australien 30°C (Grün-Orange)

      Grüssle

      Reply
  10. Jakob

    Bei mit leuchtet die LED nur sehr schwach. Woran liegt das?

    Reply
  11. Schlork

    Mist, vorhin hat der Sketch noch geklappt, aber nun bekomme ich beim Hochladen folgende Fehlermweldung:

    avrdude: stk500_recv(): programmer is not responding

    Gegoogelt habe ich schon, verschiedene Treiber neu installiert, aber nichts klappt. Im Geräte-Manager taucht der ArduinoClon nicht auf, sondern nur USBSerial XY. Ich habe vorher aber auch nie rein geschaut, ob er dort auftaucht.

    Ideen?

    Reply
    1. Frank

      Versuche mal den Arduino vom PC zu trennen und die Aduino-IDE neu zu starten.
      Wenn du es dann nochmal versuchst, müsste es klappen

      Reply
      1. Schlork

        Oh, das habe ich schon unzählige Male, inklusive Reboots, leider ohne Erfolg. Ich habe die Vermutung, dass das Gerät nicht mehr erkannt wird. Was steht bei Euch im Geräte-Manager für eine Bezeichnung?

        Reply
      2. Schlork

        Habe nun meinen echten Arduino Uno angeschlossen, der hat keine Probleme am USB-Port. Hat der Nano-Clone womöglich schon seinen Geist aufgegeben? Wie kann ich das herausfinden?

        Reply
    2. fk (Post author)

      Hi, steht im GeräteManger USBSerial CH340G? das ist nämlich der USB-to-Serial Chip und wäre in Ordnung.

      Und hast du etwas an Pin0/1 angeschlossen?

      Reply
      1. Schlork

        Hallo.

        Ja, das steht da. Es ist nichts angeschlossen, das Board ist völlig nackt, nur das USB-Kabel hängt dran.

        Habe es heute mal mit zur Arbeit genommen, um es auf einem anderen Rechner zu probieren. Dort habe ich leider das gleiche Problem. Ich denke nicht, dass ich in der IDE was aus versehen geändert habe.

        Board: Arduino Nano
        Prozessor: ATmega328
        Programmer: AVRISP mkll

        Reply
        1. Klaus

          Über welchen Menüpunkt versuchst Du das Board zu programmieren? Ich glaube da liegt das Problem. Die Meldung stk500 lässt auf die Programmierung mit einem Programmer schließen. Damit wird aber nur der Bootloader gebrannt, das Programm kommt über den COM-Port rein.

          Reply
          1. Schlork

            Ganz normal über Sketch -> Upload (Ctrl+U).

        2. fk (Post author)

          Hi,
          das Thema scheint schwieriger zu sein. Am Besten ins Forum posten, damit man auch mehr als 5 Antworten geben kann.

          Reply
  12. Andreas

    Also ich bekomm’ heute schon wieder so eine ESP SEND ERROR Fehlermeldung und weiss nicht warum – dafür leuchtet meine Led blaugrün ;-)
    Der serielle Monitor sieht bei mir so aus:
    WLAN Connected
    My IP is:

    AT+CIFSR

    +CIFSR:STAIP,”192.168.0.114″
    +CIFSR:STAMAC,”18:fe:34:a4:67:0d”

    OK

    ESP SEND ERROR: AT+CIPSTART=”TCP”,”temp.fkainka.de”,80

    kann mir irgendwer weiterhelfen?

    Danke im Voraus

    Andreas

    Reply
    1. LustigePerson

      Ich habe ebenfalls dieses Problem.
      Anfangs ging es, nun nicht mehr.
      Serverprobleme kann man bei dieser Seite wohl ausschließen, oder?

      Reply
    2. Andreas

      Zur Ergänzung: wenn ich den Arduino nach der Fehlermeldung einfach weiterlaufen lasse, kommt nach so ca. 5 – 10 Minuten wieder die Fehlermeldung:

      ESP SEND ERROR: AT+CIPSEND=52

      – die ist gestern bei mir unmittelbar nach der ersten gekommen.
      Nach weiteren 5 – 10 Minuten kommt wieder die erste Fehlermeldung:

      ESP SEND ERROR: AT+CIPSTART=“TCP“,“temp.fkainka.de“,80

      Irgendwie komisch…

      Grüße Andreas

      Reply
      1. Martin

        Ich hatte zunächst Probleme mit der eigentlichen Seite “www.openweathermap.org”.

        Nach rumspielen und hier lesen funktioniert es mit folgenden Modifikationen:

        int getWeatherTemp(String city)
        {
        int temp, humidity, clouds;
        String Host = “www.temp.fkainka.de”;
        String Subpage = “/?city=” + city;
        if (sendCom(“AT+CIPSTART=\”TCP\”,\”” + Host + “\”,80″, “OK”))
        {
        String getRequest = “GET ” + Subpage + ” HTTP/1.1\r\nHost:” + Host + “\r\n”;
        if (sendCom(“AT+CIPSEND=” + String(getRequest.length() + 2), “>”))
        {
        esp8266.println(getRequest);
        if (esp8266.find(“+IPD”))
        {
        if (esp8266.find(“\r\n\r\n”))
        {
        if (esp8266.find(“Temp: “))
        {
        String vTemp = esp8266.readStringUntil(‘ ‘);
        debug(“Temp: ” + vTemp + “C”);
        temp = round(vTemp.toFloat());
        }
        sendCom(“AT+CIPCLOSE”, “OK”);
        }
        }
        }
        }
        }

        Ortsempfehlungen:
        #define CITY “Miami” //warm
        #define CITY “Moskau”
        #define CITY “Kathmandu”
        #define CITY “Honolulu” //warm
        #define CITY “Hammerfest” //kalt

        Reply
  13. Ralph

    Wer mal bisschen die Extreme testen will:

    Kalter Ort: Sheya (Russland ca -20°C)

    Warmer Ort: Kindu (Kongo ca. 24°C)

    Reply
  14. Markus

    Hast du deine WLAN-Daten im Programm angegeben, und die LED richtig verbunden:

    Change CITY, SSID and PASSWORD.
    */

    #define SSID “[Deine WLAN-Daten]”
    #define PASSWORD “[Dein Passwort]”

    #define CITY “Eine Stadt deiner Wahl”

    Reply
  15. Tanja

    LED bleibt dunkel, keine Temperaturangabe im Serial Monitor. Der LED-Test von Klaus funktioniert jedoch. Habe unter #define City Essen und Köln probiert. Was kann ich noch prüfen oder ändern?

    Reply
    1. Huetta

      wLAN Verbindung?

      Reply
    2. Tanja

      Habe den “Fehler” gefunden. Es muss der Sketch Day10_TCPWeatherUpdate von heute genommen werden. Der Sketch aus dem Sammelpack mit allen Tagen ist inzwischen überholt.

      Jetzt ist das Wetter für Köln grün! Grün = Hurrah, Ich brauch’ keine Jacke? :-)

      Reply
      1. Klaus

        Vielleicht hast Du einen zu alten Sammelpack. Ich hatte ihn Ende November herunter geladen und bisher passten alle darin enthaltenen Programme.

        Reply
  16. Tim

    Was macht das Board bei “esp8266.find(“\r\n\r\n”)”?
    Da kommt bei mir “false” zurück und die Schleife mit der Temparaturabfrage wird nicht ausgeführt.

    Reply
  17. Chris

    Schliesse mich Karsten an. Hab mir gleich beim 2. Tag eine Android app geschrieben und verknüpfe seither jeden neuen Tag damit. Für die Farbleds habe ich 3 Schieberegler. Da kann man schön sehen wie sich die Farbe in realtime ändert.
    Vielen Dank an den Autor!

    Reply
    1. Jonathan

      Hi, Chris kannst du was zu deiner App sagen? Klingt mir interessant.

      Reply
      1. Klaus

        Würde mich auch interessieren. Vor allem, womit wurde die geschrieben? Mit dem “hochkomplizierten” Adroid-Baukasten von Google, oder was einfacherem?

        Reply
        1. Chris

          Habe die App mit dem Android Studio geschrieben. Eclipse ADT läuft ja leider bald aus.
          Die IP habe ich der App bekannt gemacht und Android kann auch wunderbar mit UDP sowohl als Server als auch Client umgehen. Dh. die App schickt und empfängt UDP Befehle. Das Board wertet die empfangenen Daten dann entsprechend aus.
          Hätte anfangs gedacht das das Board mit dem Schieberegler und dem damit verbundenen hohen Datenaufkommen Probleme kriegt, da innerhalb kürzester Zeit sehr viele UDP Befehle einströmen. Aber das Board steckt das gut weg. Kein Ruckeln zu sehen.

          Reply
          1. Klaus

            Habe ich mir fast gedacht. Soweit ich gehört habe, ist das Android Studio sehr aufwändig. Hatte gehofft, dass es für einfache Apps auch was simples gibt.

  18. Klaus

    Ich habe mal die Möglichkeit eingebaut, die Helligkeit der LED einzustellen und wenn einer mag, mal den Farbverlauf zu testen (ob alles richtig angeschlossen ist). Einfach die Auskommentierung des Blocks raus nehmen und den normalen Teil auskommentieren:

    int i=-20;
    int richtung=1;
    void loop() {
    //getTCP(“temp.fkainka.de”,”/”);

    //Farbverlauf testen
    /*rgbTemp(i,100);
    i+=richtung;
    if (i==40) richtung=-1;
    if (i==-20) richtung=1;
    delay(50);*/

    int temp = getWeatherTemp(CITY);
    rgbTemp(temp,100);
    delay(600000); //600000
    }

    void rgbTemp(int val, byte bright) //Temparatur , Helligkeit
    {
    int green, blue , red ;

    if (val = -20)
    blue = map(val, -20, 10, bright, 0);
    else blue = 0;

    if (val >= 10 & val = -20 & val 10 & val <= 40) red = map(val, 10, 40, 0, bright);
    else red = 0;

    analogWrite(RED, red);
    analogWrite(GREEN, green);
    analogWrite(BLUE, blue);
    }

    Reply
    1. Marcus

      Wäre es möglich den gesamten Code für den LED Test bereitzustellen (z.B. per pastebin)?

      Reply
      1. Klaus

        Pastebin? Ich glaube das gibt es hier gar nicht.
        Ich habe mal eine ganz minimale Version nur zum LED testen gemacht:
        https://my.sofortcloud.com/public.php?service=files&t=f120f0f0a22d28787c00d7096bfb77a2

        Reply
        1. fk (Post author)

          Hi,
          es gibt jetzt auch die Möglichkeit die Programme über das Forum direkt hochzuladen :)

          Reply
          1. klaus

            Ja klar, über das Forum schon. Aber nicht hier. Oder hab ich was übersehen?

        2. Jonathan

          Danke Test OK ;-)

          Reply
          1. Marcus

            Vielen Dank Klaus.

  19. Bernd

    Sehr interessantes Beispiel heute, vielen Dank dafür.

    In dem gedruckten Handbuch zum Adventskalender wird das Wetter von einer anderen Seite abgefragt, gibt es einen Grund, warum das ganze von openweathermap weg ging?

    Reply
    1. Hartmut

      Da hat der Kollege Kainka am “Tag 0: Alle Projekte für Ungeduldige (Spoiler Alert)” etwas zu geschrieben.

      Reply
    2. fk (Post author)

      Hi,
      der Grund ist, dass OpenWeathermap die API geändert hat, als das Handbuch schon gedruckt war. Deswegen habe ich erst einen alternativen Dienst verwendet. Dieser hat aber kurz vor Dezember dicht gemacht.
      Deswegen musste eine eigene Lösung her. Der hier verlinkte Dienst arbeitet allerdings im Hintergrund wieder mit OpenWeathemap.

      Reply
      1. Bernd

        Alles klar, danke. Die Neugier ist nun auch gestillt.
        Jetzt schaue ich der LED beim freundlicher werden zu…

        Reply
  20. Klaus

    Welchem Zweck sollen diese Zeilen dienen?
    #define GND 4

    pinMode(GND, OUTPUT);
    digitalWrite(GND, LOW);

    Zum einen ist da eh nix angeschlossen und zum anderen gibt es doch einen extra GND-Pin. Wofür selbst einen machen?

    Reply
    1. fk (Post author)

      Hi,
      es gibt eine faule Möglichkeit die RGB-LED anzuschließen. Aus didaktischen Gründen wollte ich diese hier aber noch nicht vorstellen.

      Reply
      1. jz

        Aus didaktischen Gründen sollte man keine LEDs ohne Vorwiderstand betreiben. Der Strom durch die Pins ist zwar beschränkt, dafür muss aber dann der chip-interne Transistor den Spannungsabfall verheizen.

        Reply
    2. Hartmut

      Gute Frage, zumal an Pin D4 gar nichts angeschlossen ist.

      Vielleicht hatte der Kollege Kainka die gemeinsame Kathode der RGB LED dort früher einmal angeschlossen, um sie über diesen Pin an- und auszuschalten. Jetzt liegt sie jedenfalls direkn an Masse.

      Eventuell hatte er auch die RGB LED ohne Vorwiderstände direkt an 4 nebeneinanderliegende Anschlüsse der Boards angeschlossen, von denen dan einer natürlich an Masse liegen musste.

      Im Moment hat die Konfiguration des Pin 4 jedenfalls keine Funktion.

      Reply
  21. Daniel

    Bei mir funktioniert das Programm perfekt. Allerdings leuchtet die LED nicht. Es wäre toll wenn mir jemand helfen könnte.

    Danke, Daniel

    Reply
    1. Sören

      Probier mal die Led andersherum einzusetzen ;)

      Reply
    2. Karsten

      Bitte nicht einfach mal Bauelemente anders herum probieren, das führt gerne mal zu einem Feuerwerk… Kontrolliere genau den Aufbau. Ausgänge D3, D5, D6 jeweils auf einen Widerstand, dann weiter auf jeweils 1 Anode. Die Kathode der LED auf Masse. D4 liegt auf Masse, daher nicht als Ausgang verwenden.

      Reply
    3. fk (Post author)

      Hi,
      der “lange” Anschlussdraht ist die Kathode und muss mit GND verbunden werden (äußere Bahn). Ansonsten ist ein Wackelkontakt oft die Lösung.

      Reply
    4. Aironout

      Wenn sie gar nicht leuchtet, prüfe mal, ob die Verbindung GND mit der oberen Leitung richtig sitzt. Da hatte sich bei mir ein Fehler eingeschlichen…;)

      Reply
  22. Karsten

    Guten Morgen. Auch heute funktioniert das wieder perfekt. Ich möchte dem Autor mal Danke sagen für die Idee. Wenn man die Programme sich in Ruhe ansieht kann man schon eine Menge lernen ohne erst dicke Bücher zu wälzen. Und die regen auch zur Weiterentwicklung an. Das heutige Projekt kombiniert mit dem Analogeingang läßt sich problemlos als Innen/Aussentemperaturanzeige erweitern.

    Reply

Leave a Comment

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.