Tag 10: Temperaturanzeige

Bei dem heutigen Projekt handelt es sich um eine intuitive Anzeige der aktuellen Temperatur. Mit nur einem Blick kann man abschätzen, ob es sinnvoll ist, eine warme Jacke mitzunehmen.

Hinter dem heutigen Türchen befindet sich eine weitere LED, allerdings keine gewöhnliche. Es handelt sich um eine RGB-LED. RGB steht für Red, Green, Blue oder Rot, Grün, Blau denn die LED besteht eigentlich aus mehreren LEDs mit einem gemeinsamen Kathodenanschluss. Durch eine Kombination der verschiedenen Farben mit unterschiedlichen  Helligkeiten, ist es möglich fast jede Farbe darzustellen. Die LED kann, wie im Bild gezeigt, mit Vorwiderständen an die PWM Ausgänge D3, D5, D6 des Controllers angeschlossen werden.

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

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

Das Programm: Day10_TCPWeatherUpdate

In dem heutigen Sketch geht es erneut um eine Abfrage einer Internetseite, diesmal aber einem speziell für dieses Projekt programmierten Seite, die Daten von der Wetterseite http://www.openweathermap.com/ bezieht. Auf dieser Seite kann man durch Variation der URL Informationen zum Wetter in seiner Stadt bekommen. Die Stadt, die Sie abfragen wollen, können Sie im Quelltext einfach hinter CITY eintragen. Als Beispiel verwende ich meine Heimatstadt Essen: www.temp.fkainka.de/?city=Essen

Das Programm liest nun aus dieser Seite die Temperatur aus und stellt das Ergebnis farblich über die RGB-LED da. Gleichzeitig wird der Wert auch über den Seriellen Monitor ausgegeben. Der im Beispielprogramm verwendete Temperaturbereich für die Darstellung an der LED beträgt -20°C bis +40°C.

Temperaturausgabe über den Seriellen Monitor

Temperaturausgabe über den Seriellen Monitor

62 Kommentare

  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.

  2. Andreas

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

  3. Andreas

    Und jetzt hat es das „“ nicht mitgeschrieben

  4. Andreas

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

  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

    1. fk (Beitrag Autor)

      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?

      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!

  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 ?

    1. fk (Beitrag Autor)

      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.

  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……..

  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?

    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

    2. amseld

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

      Tippe auf defekte Hardware

  9. Klaus

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

    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

  10. Jakob

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

  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?

    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

      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?

      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?

    2. fk (Beitrag Autor)

      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?

      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

        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.

          1. Schlork

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

        2. fk (Beitrag Autor)

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

  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

    1. LustigePerson

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

    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

      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

  13. Ralph

    Wer mal bisschen die Extreme testen will:

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

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

  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“

  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?

    1. Huetta

      wLAN Verbindung?

    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? :-)

      1. Klaus

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

  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.

  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!

    1. Jonathan

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

      1. Klaus

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

        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.

          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);
    }

    1. Marcus

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

      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

        1. fk (Beitrag Autor)

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

          1. klaus

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

        2. Jonathan

          Danke Test OK ;-)

          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?

    1. Hartmut

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

    2. fk (Beitrag Autor)

      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.

      1. Bernd

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

  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?

    1. fk (Beitrag Autor)

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

      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.

    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.

  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

    1. Sören

      Probier mal die Led andersherum einzusetzen ;)

    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.

    3. fk (Beitrag Autor)

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

    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…;)

  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.

Schreiben Sie einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.