Day 18: Weather monitoring

Behind today’s door is a very special component, namely a humidity sensor. Together with the phototransistor and the NTC, it creates a weather station for at-home use. The following layout is necessary for this purpose:

Der Aufbau mit allen Sensoren

The layout with all sensors (resistors 1 kohm)

Today’s layout is a bit fiddly. Especially at the point where the potentiometer on the right of the image sits, it touches the NanoESP. But that’s not really a problem as long as the contact on the left of the image is plugged firmly into the board.

Die aktuellen Klimadaten im Browser

The current climate data in the browser


After you upload the programme, you can now open the website. You see three values that are represented as text and as bars. You can now calibrate the values somewhat with the potentiometers. The temperature value, especially, should be compared to a thermometer and adjusted. That’s the only way to ensure that the information on the website is more or less accurate.

87 Comments

  1. RivaDynamite

    Ich finde das Projekt ebenfalls hochinteressant, jedoch ist das ganze alles andere als funktionsfähig aktuell… Ich habe folgende Probleme (verwende den Sketch von Gerald!):

    1. Internet Explorer sowie Safari funktionieren garnicht, auf dem iphone funktioniert nichtmal Chrome.

    2. Erst nach einigen Minuten Wartezeit werden Daten angezeigt.

    3. (das schlimmste!): Wenn ich das Browserfenster schließe, ist die Seite danach garnicht mehr erreichbar. Erst ein Neustart des Arduino bringt abhilfe…

    Da ich das ganze gerne praktisch einsetzen würde, mir aber jegliche Erfahrung im Bereich Arduino-Programmierung fehlt, wäre ich über Hilfe sehr dankbar ;-)

    Reply
    1. Hermann

      Hallo,
      bei mir lief das Ganze erst nach einigen Änderungen.

      1. Im Original-Code fehlt in Zeile 69 ein Ausrufezeichen vor “http….”
      falsch: “if (http.sendStreamHeader(id)) {”
      richtig: “if (!http.sendStreamHeader(id)) {”

      2. Die Browserseite muss man nach dem abgeschlossenen Arduino-Start nochmal aktualisieren, wenn man nicht lange warten will.

      3. Zur Kalibrierung der Temperatur musste ich noch zwei 1 kOhm Widerstände in Reihe zum Poti schalten.

      4. Für die Lichtmessung habe ich zur Optimierung der Empfindlichkeit analog zum Tag 12 einen 10 kOhm Widerstand in Reihe zum Poti geschaltet. Außerdem darf das zweit Bein des Fototransistors natürlich nicht ins Leere zeigen, sondern muss einen Kontakt weiter rechts zu den Drahtbrücken gesteckt werden.

      Reply
      1. Dimitri

        Hallo Hermann,

        vielen Dank für den Tip! Genau jetzt funktioniert auch bei mir!
        Das Projet ist leider gar nicht getestet.

        Reply
  2. Bernd Biber

    Hallo,
    habe das Projekt total vergewaltigt.
    An A0 bis A5 habe ich zum Test Potis und möchte Smartphone bzw. Tablet als seriellen Monitor via Internet nutzen.
    Bis 5 Analogeingänge kriege ich problemlos übertragen, beim 6. geht nichts mehr, obwohl bis auf die letzte Erweiterung alles identisch ist.
    Hat jemand Lust und Zeit mir zu helfen ???

    Reply
    1. Bernd Biber

      Upps!
      In der Vorschau stand das Bild senkrecht.

      Reply
      1. Bernd Biber

        Der Arduino-Sketch isses nicht, da laufen alle 6 abgefragten Analogeingänge.
        Sobald ich auf der vom NanoESP generierten Webseite den 6. Analogeingang “scharf” mache, ist Feierabend.
        Kann ja nur noch mit diesen beiden Zeilen in website.h zusammenhängen:

        var source = new EventSource(“/eventclimate”);

        Da sind garantiert die Balken und sowas hinterlegt…

        Muss ich kapitulieren, soweit reicht mein Gehirnschmalz nicht

        :-(

        Reply
  3. Bernd Hartwig

    ich habe dieses Türchen mal etwas “aufgebohrt”. Mit einem externen Client-Rechner (VB.net 2015) habe ich eine Streamverbindung aufgebaut. Geht prinzipiell ganz gut!

    Daten von dem Server (WiFi-Board) werden klaglos übertragen. Nur vom Client auf das WiFi-Board sehe ich höchstens die Anzahl der empfangenen Daten. Die Anzahl ist korrekt. Aber wie komme ich an die Daten ran?

    Ganz, ganz vielen Dank, wenn jemand helfen kann!!!

    Hier der Code:

    if (streamId > -1) { //there is a stream client

    if (Serial.available() > 0) { //Bytes da?
    text= Serial.readString(); //hol sie ab
    if (text != “”) nanoesp.sendData(streamId, text); //und raus
    text=””; //buffer löschen
    } //if (s
    }//if streamId

    nanoesp.recvData(streamId,len); //wieviele Daten sind da?

    if (lenalt != len) { //Änderung anzeigen!
    Serial.println(“len = ” + String(len) + “lenalt= ” + String(lenalt));
    lenalt = len;

    //!!!!!Daten holen!!!!!!! ???????
    // ????
    // Aber wie”
    Serial.println(“intext = ” + intext);
    }

    }//loop

    Reply
    1. khayanna

      Falls hier noch jemand liest…

      Diese Frage wurde leider noch nicht beantwortet…

      Wie kommt man (über TCP/UDP) an empfangene Daten ran?

      nanoesp.recvData(streamId,len) schön…

      Wo ist die Lesefunktion, mit der man die Daten in einen Buffer schreiben kann?

      Bitte um Hilfe, falls das jemand schon mal gemacht hat – ist ja eigentlich logisch, dass man nicht nur Daten senden will.

      Reply
      1. Klaus

        Das ist doch die Lesefunktion. Danach hast Du die Daten in streamId

        Reply
        1. khayanna

          Habe es leider noch immer nicht verstanden.

          streamID enthält nur eine “ID”-0,1,2,3 usw. und keine Daten.

          Habe inzwischen herausgefunden, dass z.B. “nanoesp.readStringUntil(13)”
          mir die empfangenen Zeichen liefert, das ist aber eine andere Funktion, evtl. geht es noch besser.

          Ein kleines Beispiel, wie das richtig geht wäre nett.

          Reply
  4. Enno Klatt

    Jetzt geht es. Danke Bernd…
    Das Bild enthält die Lösung!

    Reply
  5. Burkhard

    Heute geht das Programmchen bei mir nicht zu kompilieren, wie bei einem anderen Kommentar…
    Die Fehlermeldung endet:
    C:\ed\Arduino\libraries\NanoESP-1.1\NanoESP_MQTT.cpp:429:37: warning: deprecated conversion from string constant to ‘char*’ [-Wwrite-strings]

    collect2.exe: error: ld returned 5 exit status

    exit status 1
    Fehler beim Kompilieren für das Board Arduino Nano.

    Dieser Bericht wäre detaillierter, wenn die Option
    “Ausführliche Ausgabe während der Kompilierung”
    in Datei -> Voreinstellungen aktiviert wäre.

    Reply
    1. hallo

      ich habe das leider auch so

      Reply
    2. Burkhard

      Der Fehler beim Kompilieren trat unter XP auf, jetzt unter Windows 10 funktioniert es.

      Reply
  6. Michel2016

    Ich fand es schöner das ganze als Langzeitdiagramm wie an Tag 14 zu haben. Ich habe das Sketch nach einigen Probieren angepasst, geht bestimmt auch einfacher, aber da ich keine Ahnung von der Programmierung in C++ und Adruino habe :-) musste ich ein bisschen rumprobieren bis es klappte, aber jetzt läuft es :-) Dafür musste ich aber ein bisschen Energie bei Blynk kaufen.

    Reply
    1. Daniel

      kannste ja mal teilen dein sketch :)

      Reply
  7. HPRS

    Bei mir funktioniert schon das Kompilieren nicht. Ich erhalte die Fehlermeldung

    collect2.exe: error: ld returned 5 exit status

    und kann leider gar nichts damit anfangen.
    Gibt es jemand, der mir helfen kann?

    Reply
    1. Burkhard

      Ich habe auch diese Fehlermeldung (und bin spät dran…) Gibt es eine Lösung für diese Aufgabe?

      Reply
      1. Burkhard

        Der Fehler beim Kompilieren trat unter XP auf, jetzt unter Windows 10 funktioniert es.

        Reply
  8. Detlef Redante

    bleibt beim TCP Server Error. So schade, dass mir keiner hilft.

    Reply
  9. Stefan

    Ich habe die Berechnung der Luftfeuchte gegen die angegebene Quelle geprüft, da ich zu hohe Werte bekomme.

    Der Widerstand wird falsch berechnet.
    Quelle: R = 35000 * U;
    hier: R = 3500 * U;

    Nach der Korrektur auf 35000 werden die korrekten 33% Luftfeuchte ausgegeben, anstatt 50%.

    Reply
    1. paulaner

      Danke!

      Kein Hinweis in der PDF und im Begleitheft, schade.

      Was wohl richtig ist? (Quelle)

      Reply
      1. paulaner

        Quelle Kommentar im Skript

        //R=35k*(U/1023-U)

        ist nicht 3500 sondern 35000

        Reply
  10. Leon

    Hallo zusammen
    mit den 3-Zusatzzeilen von Basti hat es bei mir dann endlich mit Chrome geklappt, musste aber bisschen warten…
    Hoffe bei euch funktioniert es auch mit den 3-Zeilen, vielen dank an Basti!!!

    Reply
    1. Leon

      Schade, das ganze lässt sich nicht wiederholen… )-:

      Reply
    2. Daniel

      wenn man in Zeile 38-40 noch folgende Änderungen vornimmt scheint es immer zu funktionieren… auch nach einem Reboot.
      (WifiMode von DUAL auf STATION)

      //Dual Mode
      nanoesp.configWifiMode(STATION);
      delay(1000);

      Reply
      1. Leon

        Wow,danke!!!

        Reply
  11. Philipp

    Hallo,
    seit dem diese Website.h datei eingebunden wird erscheint bei mir immer folgender Fehler Text:

    Arduino: 1.6.13 (Windows 10), Board: “Arduino Nano, ATmega328”

    C:\Users\Philipp\AppData\Local\Temp\Temp1_A16_P18_Climate.zip\A16_P18_Climate\A16_P18_Climate.ino:9:22: fatal error: Websites.h: No such file or directory

    #include “Websites.h”

    ^

    compilation terminated.

    exit status 1
    Fehler beim Kompilieren für das Board Arduino Nano.

    Und wie schon glaube ich angemerkt sind die Aufbauten im Heft und der Website unterschiedlich.
    Ich hoffe mir kann jemand helfen.

    Reply
    1. ...

      Würde den Zip-Ordner extrahieren…

      Bei Mir funktionierte es so.

      Reply
  12. Gaby

    Hallo,

    bis jetzt habe ich alles hinbekommen. Aber heute geht gar nichts.
    Auch ich habe nur einen halben Balken bei der Temperatur, keinerlei Werte. Wenn ich Änderungen des Skripts vornehme, wie oben vorgeschlagen, bekomme ich stets die Fehlermeldung

    “exit status 1
    stray ‚\342‘ in program”

    und es wird nicht weiter hochgeladen.

    Wäre es möglich, den korrigierten Sketch hier als Download zu veröffentlichen?

    Und ich verstehe schon mal gar nicht, wie der Aufbau heute ist: von H2 nach H11: da steckt bei mir der Nano-ESP.

    Schade, bis heute konnte ich gut mithalten.

    Reply
    1. paulaner

      Ja ich würde mir auch wünschen der Autor (Verursacher) macht mal ein Update (Fritzing + Sketch).
      Aber es ist Advent und sicher hat jeder Familie etc..

      Reply
    2. paulaner

      hier mal zum Kalender ein pdf.
      In diesem sind die richtigen Fritzing Bilder drin.

      https://www.conrad.de/de/adventskalender-conrad-components-adventskalender-internet-of-things-ab-14-jahre-1435475.html

      Reply
      1. paulaner

        im Begleitheft aber auch.

        Reply
  13. paulaner

    nach einfügen der 3 Zeilen, danke Ralf, basti sehe ich ‘Werte’ im Monitor nach einer Aktualierung der Browser.

    von links nach rechts.
    Chrome, Firefox, IE 11

    Reply
    1. paulaner

      Foto

      Reply
    2. paulaner

      weitere 5 Minuten gewartet und er zeigte ‘Chrome’ etwas an.

      Reply
    3. paulaner

      noch ein Foto: Chrome
      Light -> denke mal die Photodiode ist defekt

      Reply
      1. basti

        ich denke bei mir ist diese Diode auch defekt. Sie zeigt bei mir gar nichts an.

        Reply
        1. paulaner

          Diode mal gesteckt. Anode, Kathode getauscht.
          Dann mit dem Trimmer jeder Wert einstellbar.

          Ich denke aber der ESP8266 ist nicht zuverlässig um eine unterbrechungsfreie Verbindung zu gewährleisten.

          Reply
          1. basti

            Diode mal so und mal so gesteckt (aber immer Y5-J6). Aber auch beim ersten Einsatz der Diode mit der Blynk App hat das schon nicht funktioniert…

      2. basti

        Ach so: Was hast du gemacht, dass die “richtige” Temperatur angezeigt wird. Bei mir wird immernoch -273 Grad angezeigt…

        Reply
        1. paulaner

          es richtig verdrahtet.

          NTC gegen Plus und nicht GND.
          Ich benutze ein größeres Steckboard mit Plus, GND oben wie unten, da kam es zur Verwechslung, ohne Schaden.

          Reply
          1. basti

            Danke für die Antwort. Könntest du mir das bitte verständlicher (für mich) erklären? Mein Board ist so aufgebaut wie im beiligenden Heft…

            Danke

      3. Yusuf

        Schema ist falsch. Phototransistor an 6. Spalte einstecken anstelle von 5!

        Reply
  14. Mormox82

    Bei mir gehts nicht, alles probiert.
    Vieleicht kann ein neues sketch helfen,….

    Reply
    1. Mormox82

      oh jetzt, über Handybrowser.
      aber 327C kann nicht stimmen.

      Reply
      1. Mormox82

        lag am poti, wackeln hat geholfen

        Reply
  15. prisma01

    mit dem Skript von Gerald funktionierts. Allerdings sehe ich auf iOS Chrome und anderen Browsern keine Werte, nur die Überschriften und die leere Textbox, auf Android Browsern tuts wieder so wie in W10

    Reply
  16. prisma01

    Da tut sich nix:

    Reply
    1. prisma01

      3 Balken, aber ohne Inhalt. Aufbau der Platine erfolgte nach Handbuch, nicht nach day18 im web

      Reply
      1. basti

        Bis jetzt habe ich dieses Problem im Firefox auch…
        Habe folgendes ab Zeile 62 eingetragen (ein Hinweis von unten):
        Serial.println(String(getTemp()));
        Serial.println(String(getRF()));
        Serial.println(String(getLight()));
        wobei dann folgende Werte ausgegeben werden:
        -273.20
        65
        0
        Die Messungen schlagen wohl trotzdem fehl :-

        Reply
    2. gerald

      Siehe mein Kommentar

      Reply
  17. gerald

    Der Aufruf http.sendStreamHeader(id) gibt immer false zurück auch wenn der HTTP request erfolgreich war, da ja nur der Header übertragen wurde aber die Verbindung noch offen für die Daten bleibt.

    Reply
  18. gerald

    Der folgende Sketch funktioniert:

    /*
    TCP-Server Climate with server send events
    Change SSID and PASSWORD.
    */

    #include
    #include
    #include
    #include “Websites.h”

    #include

    //#define SSID “Lechner LAN”
    //#define PASSWORD “Guadalquivir2711”

    #define LED_WLAN 13

    #define TEMP A0
    #define LIGHT A1
    #define HUMIDITY A4
    #define GND A5

    #define DEBUG true

    NanoESP nanoesp = NanoESP();
    NanoESP_HTTP http = NanoESP_HTTP(nanoesp);

    void setup() {
    Serial.begin(19200);
    nanoesp.init();

    //! Only if you want to change the ACCESPOINT configuration
    //nanoesp.configWifi(ACCESSPOINT, “NanoESP”, “”);

    //! Only if you use a new Network
    // nanoesp.configWifi(DUAL, SSID, PASSWORD);

    //Dual Mode
    nanoesp.configWifiMode(DUAL);
    //delay(1000);

    // Wait till Connected to WiFi
    if (nanoesp.wifiConnected())digitalWrite(LED_WLAN, HIGH); else Serial.println(F(“Error WLAN Connect”));

    //Start TCP Server
    if (nanoesp.startTcpServer(80)) Serial.println(F(“TCP Server Activ”)); else Serial.println(F(“TCP Server Error”));

    //Print IP in Terminal
    Serial.println(nanoesp.getIp());
    }

    int streamId = -1;
    byte errorCount;

    void loop() {
    String method, ressource, parameter;
    int id ;

    if (http.recvRequest(id, method, ressource, parameter)) {

    Serial.println(“New Request from id :” + String(id) + “, method: ” + method + “, ressource: ” + ressource + ” parameter: ” + parameter);

    if (ressource == “/”) {
    http.sendFromFlash(id, index, sizeof(index));
    nanoesp.closeConnection(id);
    }

    else if (ressource == “/eventclimate”) {
    //Serial.println(“Send stream header”);
    //new server send events connection
    http.sendStreamHeader(id); //send stream header as response
    streamId = id; //this id belongs to the sse-client
    //Serial.println(“Got stream id ” + streamId);
    sendStreamData(streamId,”msg”, “Connection established”); //send first message

    }

    else {
    http.sendFromFlash(id, error404, sizeof(error404));
    nanoesp.closeConnection(id);
    }
    }

    if (streamId > -1) { //there is a stream client
    //Serial.println(“Send results”);
    if (!sendStreamData(streamId, “hum”, String(getRF()))) errorCount++; else errorCount = 0; //send server send event data
    if (!sendStreamData(streamId, “light”, String(getLight()))) errorCount++;else errorCount = 0; //send server send event data
    if (!sendStreamDataClose(streamId, “temp”, String(getTemp()))) errorCount++;else errorCount = 0; //send server send event data

    if (errorCount > 6){ //client is disconnected if more than 6 transmissions were faulty
    nanoesp.closeConnection(streamId);
    streamId = -1;
    errorCount = 0;
    }
    }

    }
    boolean sendStreamDataClose(int connectionId, String event, String data) {
    //Serial.println(String (connectionId) + ” – ” + event + ” – ” + data);
    return nanoesp.sendDataClose(connectionId, “event: ” + event + “\n” + “data: ” + data + “\n\n”);
    }
    boolean sendStreamData(int connectionId, String event, String data) {
    //Serial.println(String (connectionId) + ” – ” + event + ” – ” + data);
    return nanoesp.sendData(connectionId, “event: ” + event + “\n” + “data: ” + data + “\n\n”);
    }

    int getRF() { //get Humidity, source: http://www.elektronik-labor.de/AVR/Rmessung.html#rx2
    long U, R;
    double F;

    pinMode(HUMIDITY, INPUT); // Ddrb.3 = 0 ‘Eingang
    digitalWrite(HUMIDITY, HIGH); // Portb.3 = 1 ‘Pullup ein
    U = analogRead(HUMIDITY); // U = Getadc(3)
    digitalWrite(HUMIDITY, LOW); // Portb.3 = 0 ‘Pullup Aus
    pinMode(HUMIDITY, OUTPUT); // Ddrb.3 = 1 ‘Nierohmig

    pinMode(GND, INPUT); // Ddrb.4 = 0 ‘Eingang
    digitalWrite(GND, HIGH); // Portb.4 = 1 ‘Pullup ein
    U += analogRead(GND); // U = U + Getadc(2)
    digitalWrite(GND, LOW); // Portb.4 = 0 ‘Pullup Aus
    pinMode(GND, OUTPUT); // Ddrb.4 = 1 ‘Nierohmig. entladen

    U = U / 2;
    R = 3500 * U; //’R=35k*(U/1023-U)
    U = 1023 – U;
    R = (U > 0) ? R / U : 999999; //alternativ writing to: if(U>0) R = R/U; else R=999999;
    R = R – 450; //- interner Bahnwiderstand 0,45 k

    //Calculate Humidity
    F = R / 280;
    F = log(F); //ln f !!!
    F = F * 8.9;
    F = 100 – F;
    F = round(F);

    //Serial.println(String(R) + “Ohm ” + String(F) + “%”);
    //delay(500);
    return F;
    }

    double getTemp() {
    //Source: http://playground.arduino.cc/ComponentLib/Thermistor2
    double Temp;
    int RawADC = analogRead(TEMP);
    Temp = log(10000.0 * ((1024.0 / RawADC – 1)));
    // =log(10000.0/(1024.0/RawADC-1)) // for pull-up configuration
    Temp = 1 / (0.001129148 + (0.000234125 + (0.0000000876741 * Temp * Temp )) * Temp );
    Temp = Temp – 273.15; // Convert Kelvin to Celcius
    // Temp = (Temp * 9.0)/ 4.7 + 32.0; // Convert Celcius to Fahrenheit

    Temp = round(Temp*10);
    Temp = Temp/ 10;
    return Temp;
    }

    int getLight() {
    int vLight = analogRead(LIGHT);
    return vLight;
    }

    Reply
    1. Klaus

      Erstmal danke, werds ausprobieren.

      Aber vielleicht solltest du vorsichtshalber dein Wlan-Passwort ändern ;)

      Reply
    2. basti

      “leere” Einträge bei #include funktioniert aber nicht bzw es gibt dann eine fehlermeldung…

      Reply
  19. A.H.

    Bei mir zeigt der Feuchtigkeitssensor *grob* andere Werte an als andere Hygrometer im Raum: Sensor: 60%, zwei Hygrometer: 41% und 44%

    Wie kalibiert man den Sensor verünftig?

    Reply
    1. A.H.

      Kennt jemand den genauen Typ des Feuchtesensors bzw. hat ein Datenblatt dazu? Dann könnte ich z.B. mal die Formel prüfen.

      Reply
      1. Hansi

        Wenn Du die Webadresse:
        http://www.elektronik-labor.de/AVR/Rmessung.html#rx2 aufrufst, kannst Du eine Menge vom “Ur-Entwicckler” über diese Implementierung erfahren.
        Der Autor schreibt aber ganz klar: auch alle anderen “Haushalts-Messgeräte” liefern nur Größenordnungen.
        Ich habe ein wenig mit der Zeile:
        F = F * 8.9; -> F = F * 8.0;
        experimentiert. Das Ändern, Kompilieren, Hochladen, Warten, Testen ist aber doch recht mühsam (zumal das bei mir auch nicht immer gleich mit dem Browser zusammen spielt). Eventuell ist es leichter die Anzeige im Browser per Javascript zu korrigieren…

        Reply
  20. Thomas

    Sollten bei euch keine Werte im Browser angezeigt werden, könnte das an einem Fehler in der NanoESP_HTTP Lib liegen. Die schnellste Variante hierfür ist, die Zeilen 68 bis 74 wie folgt zu ändern:

    else if (ressource == “/eventclimate”) { //new server send events connection
    /*if(*/http.sendStreamHeader(id); /*) {*/ //send stream header as response
    streamId = id; //this id belongs to the sse-client
    Serial.println(String(streamId) + ” Stream ID”);
    sendStreamData(streamId,”msg”, “Connection established”); //send first message
    /*}*/
    }

    Reply
    1. Bernd

      gibt mir fehlermeldung für Deine Zeile 72: “Arduino:1.6.13 (Windows 10), Kort:”Arduino Nano, ATmega328”

      A16_P18_Climate:68: error: stray ‘\342’ in program

      else if (ressource == “/eventclimate�) { //new server send events connection

      ^

      A16_P18_Climate:68: error: stray ‘\200’ in program

      A16_P18_Climate:68: error: stray ‘\234’ in program

      A16_P18_Climate:68: error: stray ‘\342’ in program

      A16_P18_Climate:68: error: stray ‘\200’ in program

      A16_P18_Climate:68: error: stray ‘\235’ in program

      A16_P18_Climate:71: error: stray ‘\342’ in program

      Serial.println(String(streamId) + � Stream ID�);

      ^

      A16_P18_Climate:71: error: stray ‘\200’ in program

      A16_P18_Climate:71: error: stray ‘\235’ in program

      A16_P18_Climate:71: error: stray ‘\342’ in program

      A16_P18_Climate:71: error: stray ‘\200’ in program

      A16_P18_Climate:71: error: stray ‘\235’ in program

      A16_P18_Climate:72: error: stray ‘\342’ in program

      sendStreamData(streamId,�msg�, “Connection established�); //send first message

      ^

      A16_P18_Climate:72: error: stray ‘\200’ in program

      A16_P18_Climate:72: error: stray ‘\235’ in program

      A16_P18_Climate:72: error: stray ‘\342’ in program

      A16_P18_Climate:72: error: stray ‘\200’ in program

      A16_P18_Climate:72: error: stray ‘\235’ in program

      A16_P18_Climate:72: error: stray ‘\342’ in program

      A16_P18_Climate:72: error: stray ‘\200’ in program

      A16_P18_Climate:72: error: stray ‘\234’ in program

      A16_P18_Climate:72: error: stray ‘\342’ in program

      A16_P18_Climate:72: error: stray ‘\200’ in program

      A16_P18_Climate:72: error: stray ‘\235’ in program

      C:\Users\Bernd\Documents\Arduino\A16_P18_Climate\A16_P18_Climate.ino: In function ‘void loop()’:

      A16_P18_Climate:68: error: expected primary-expression before ‘/’ token

      else if (ressource == “/eventclimate�) { //new server send events connection

      ^

      A16_P18_Climate:68: error: ‘eventclimate’ was not declared in this scope

      else if (ressource == “/eventclimate�) { //new server send events connection

      ^

      A16_P18_Climate:71: error: expected primary-expression before ‘ID’

      Serial.println(String(streamId) + � Stream ID�);

      ^

      A16_P18_Climate:72: error: ‘msg’ was not declared in this scope

      sendStreamData(streamId,�msg�, “Connection established�); //send first message

      ^

      A16_P18_Climate:72: error: ‘Connection’ was not declared in this scope

      sendStreamData(streamId,�msg�, “Connection established�); //send first message

      ^

      exit status 1
      stray ‘\342’ in program

      This report would have more information with
      “Show verbose output during compilation”
      option enabled in File -> Preferences.

      Reply
      1. Thomas

        Hallo Bernd,

        da hat es leider Unicode Anführungsstriche etc. übernommen und Kommentare lassen sich hier nicht editieren :-(

        Die Zeile 69 darf keine if-Abfrage enthalten, da die aufgerufene Funktion nie “wahr” liefert. Also einfach den Methodenaufruf einbauen: http.sendStreamHeader(id);

        Dafür muss Zeile 72 angepasst werden, da dann natürlich auch keine schließende Klammer vorkommen darf. 72 also löschen.

        Viel Erfolg
        Thomas

        Reply
        1. Thomas

          Hier ein Arduino Sketchbook-Sketch:

          Reply
          1. Ralf

            Hi Thomas,

            vielen Dank, der Austausch der Zeilen ab 69 hat geholfen.

            Geschafft. Funktioniert.

          2. Plutonium

            Danke Thomas, jetzt klappts auch bei mir ;-)

          3. Philipp

            Klappt leider bei mir nur beim ersten mal nach aktualisierung im Browser wieder das gleiche Bild (ohne Werte bzw. halber Balken :/ )

          4. Maximilian

            Vielen Dank!
            Funktioniert jetzt

        2. bernd

          Danke,
          aber ich habe es dann mit der von mOeps vorgestellten Änderung hingekriegt. läuft einwandfrei selbst nach umstart.

          Reply
  21. m0ep

    Zwei Probleme sind mir am heutigen Experiment aufgefallen:

    1) Ich glaube im Schaltbild ist ein kleiner Fehler. Der Phototransistors ist überhaupt nicht mit den Pin A1 verbunden. Entweder muss der Phototransistors eins Steckplatz vor oder die Kabel eins zurück.

    2) Der Aufruf “http.sendStreamHeader(id)” gibt immer false zurück. Deshalb wird die streamId nie gespeichert. Setzt man die Zuweisung “streamId = id;” außerhalb des If-Blocks gehts wunderbar.

    Reply
    1. Daniel

      Danke für den tipp ! ;) hab jetzt die Schaltung wie im Heft und das Programm in Zeile 62/63 ergänzt mit deiner Änderung. Nach einen reboot des Nano ging es dann auch bei mir.

      Reply
      1. Daniel

        aber leider nur 1x
        nach einen weiteren neustart ging nix mehr.

        Reply
    2. Jürgen

      Hallo m0ep,
      die Zeichnung im Begleitheft ist korrekt, der Fehler betreffs der Verkabelung ist nur auf dem Bild der Web-site.
      Deine Software-Änderung habe ich ausprobiert und seither bekomme ich auch Werte angezeigt. Aber … nur wenn ich mein tablet mit dem Wifi des Arduino verbinde und die Seite 192.168.4.1 aufrufe. Auf der Seite in meinem Wifi passiert nichts. Das Grundbild wird aufgebaut , aber keine Werte werden angezeigt.
      Leider verstehe ich die Programmierung mangels Kenntnissen nicht, um nach dem Fehler zu suchen. Eine ausführlicher Kommentierung des programmcodes hätte ich mir eh von Anfang an gewünscht.

      Gruß
      Jürgen

      Reply
      1. m0ep

        Stimmt, im Begleitheft sieht die Schaltung OK aus (Ich mach das erste mal was mit Elektrotechnik, bin eigentlich Android-Entwickler). Ich guck in der Regel nur hier auf der Webseite, weil ich mich dann doch lieber überraschen lasse ;)

        Das Programm benutzt zum Senden der Werte Server Side Events. Eventuell funktionieren die im Stationsbetrieb nicht richtig. Hab das Experiment selbst nur direkt mit dem NanoESP als Accesspoint ausprobiert.

        Reply
    3. sumero

      jap, es muss wie in Tag 12 eine Spannungteilerschaltung sein. Der 10k Wiederstand von Tag 12 ist durch den 10k Poti enthalten

      Reply
      1. m0ep

        Danke für das Wort “Spannungteilerschaltung”, jetzt weiß ich auch was da genau passiert :D

        Reply
    4. Bernd

      Ja, danke. Das hats gebracht:
      else if (ressource == “/eventclimate”) { //new server send events connection
      streamId = id; //this id belongs to the sse-client
      if (http.sendStreamHeader(id)) { //send stream header as response

      sendStreamData(streamId,”msg”, “Connection established”); //send first message
      }
      }

      Reply
  22. paulaner

    Bild

    Reply
    1. Thomas

      Hallo Paulaner,
      bist Du im Internet Explorer oder Edge unterwegs? Dort wird das verwendete -Tag nicht unterstützt. Chrome und Firefox zeigen die Balken hingegen an.

      Viele Grüße
      Thomas

      Reply
      1. Ralf

        Hi, ich habe es mit Firefox und Chrome probiert. Ich bekommen Balken, aber keine Werte. Die Balken Humidity und Light sind grau.

        Ich habe mir in Zeile 63 noch eine Ausgabe eingebaut, um die Werte im seriellen Monitor zu sehen.
        Serial.println(String(getRF()));
        Serial.println(String(getLight()));
        Serial.println(String(getTemp()));
        Das funktioniert.

        Der Seitenquelltext der Webseite scheint auch ok.
        Der Balken wird mit “Tempertur:
        ” aufgebaut.

        Das Javaskript soll die Balken und die Werte befüllen.
        Das scheint nicht zu funktionieren.

        Wo ist der Fehler?

        PS: “Webseite.h”: NanoESP CLimate ändern in NanoESP CLimate und Current climate values from NanoESP: in Current climate values from NanoESP:

        Reply
        1. Ralf

          Mist, der Chat verschluckt Zeichen.

          Zur Ergänzung: Balken werden mit dem Tag meter erzeugt.
          In der Datei website.h ist der Tag title als tilte geschrieben. Dazu sollte der Text NanoESP Climate mit dem Tag für eine große Überschrift h1 eingefasst werden.

          Reply
          1. clembe

            bei mir kommen die wete nach etwa 5 minuten

  23. paulaner

    TCP Server Activ
    AT+CIFSR

    +CIFSR:APIP,”192.168.4.1″
    +CIFSR:APMAC,”x:x:x:x:x:x”
    +CIFSR:STAIP,”192.168.0.152″
    +CIFSR:STAMAC,”x:x:x:x:x:x”

    OK

    New Request from id :0, method: GET, ressource: / parameter:
    New Request from id :0, method: GET, ressource: /browserconfig.xml parameter:
    New Request from id :0, method: GET, ressource: / parameter:
    New Request from id :0, method: GET, ressource: / parameter:

    Verbindung ist da, Anfragen im Monitor auch, aber die Seite zeigt keine Werte

    Reply
    1. htaz

      Bei mir siehts geauso aus -leider fehlt eine Erklärung was der sketch macht im Detail ;-(

      Reply
      1. Thomas

        Hallo htaz,

        siehe mein Kommentar ganz oben, das Programm ist u.U. fehlerhaft im Zusammenspiel mit der Library NanoESP-1.1. Außerdem funktioniert das HTML-Tag im Internet Explorer und Edge nicht. Dazu den Chrome oder Firefox nutzen.

        Viele Grüße und viel Erfolg
        Thomas

        Reply
      2. htaz

        Nachtrag egal welcher Browser verwendet wird bzw welches wlan.

        Reply
    2. clembe

      bei mir gehts nur mit firefox bei internet exporer gibts bei mir auch keine werte aufbau in der beschreibung ist auch fahlsch zumindest vom fototranistor

      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.