INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.

Antwort schreiben 
 
Themabewertung:
  • 0 Bewertungen - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
Problem mit Displayanzeige LCD2004 bzw. nicht Richtig
15.12.2018, 16:29
Beitrag #33
RE: Problem mit Displayanzeige LCD2004 bzw. nicht Richtig
Hallo magnum1795,

du versuchst mit dem Kopf durch die Wand zu kommen.
Das geht immer schief. Wir kennen deine Vorkenntnisse nicht, aber die scheinen nicht sehr groß zu sein.

Warum versuchst du es nicht so wie wir es alle (fast) gemacht haben und startest mit einem einfachen Projekt und mit dem Uno. An dem kannst du auch dein Display direkt anschließen, ohne einen Levelshifter.

Wenn du dann genug Erfahrungen gesammelt hast, kannst du immer noch auf andere Kontroller umsteigen.
All deine Sensoren laufen auch mit dem Uno zusammen und du kannst diese nach und nach zum Laufen bringen, auch mit Display.
Der jetzige Weg ist für dich einfach eine (eher mehr) Nummer zu groß.
Und nebenbei lernst du die notwendigen Grundlagen, die dir scheinbar noch fehlen.

Gruß Dieter

I2C = weniger ist mehr: weniger Kabel, mehr Probleme. Cool
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
17.12.2018, 13:18 (Dieser Beitrag wurde zuletzt bearbeitet: 17.12.2018 14:53 von magnum1795.)
Beitrag #34
RE: Problem mit Displayanzeige LCD2004 bzw. nicht Richtig
So, nachdem ich nun fast 2 Tage gelegen habe (sehr starke Erkältung) habe ich mich heute nochmal ran gesetzt. Es funktioniert nun alles.

@ Tommy56

aber der Reihe nach.Du hattest natürlich vollkommen Recht, das Problem saß vor dem Rechner (ESP8266). Nachdem ich nun den Kopf wieder etwas freier habe und ich mir die Sache in Ruhe angeschaut hatte, habe ich es getestet so wie du beschrieben hattest (mit den Level Konverter). Auch der Anschluss war mir nun klar gewesen. Keine Ahnung was am Samstag los war, hatte komplette Blockade im Kopf. Aber auch damit funktionierte es nicht und es war kein Pegelproblem, wie von dir vermutet. Nein, das Problem war wiedermal ich selbst, hatte deinen Rat nicht richtig umgesetzt (verstanden). Das Display ist ja über den I2C Bus angeschlossen an D1 und D2 des ESP8266. Den BME280 hatte ich aber an D3 und D4 (also an die Digitalpins) angeschlossen und auch so deklariert im Sketch. Das heißt er wurde erkannt und lieferte über den Serialmonitor auch Daten, nur eben nicht an das Display. Nachdem ich nun den Sensor auch an den I2C Bus (D1 und D2 über das Steckbrett) mit angeschlossen habe, funktioniert nun das Display und die Werte werden alle richtig angezeigt. Der Sketch war also soweit richtig und an diesen lag es nicht, nur eben war der BME280 falsch bzw. nicht am I2C Bus angeschlossen. Macht man es gleich richtig, geht es auch. Auch Daten an Thingspeak senden und der zweite Sensor DS18B20 sind mit drin und funktioniert auch.

Ich hänge hier mal den Sketch mit an. Dieser hat einige Kommentare zum besseren Verständnis auch zum anschließen an den ESP8266 Node MCU 12E.

@hotsystems
dein Kommentar ist nicht Hilfreich und vermutlich auch Fehl am Platz. Hättest du den ganzen Beitrag gelesen (und nicht nur die letzten paar Beiträge) so hättest du gewusst das ich schon mit Arduino getestet hatte und es dort ging. Und ja es stimmt, du kennst mein Vorkenntnisse nicht und kannst dir deshalb auch kein Urteil erlauben. Manchmal ist es dann besser nichts zu schreiben oder aber eben Hilfe zu geben. Sorry.

Code:
/*
ESP8266 Node MCU 12E, Display LCD 20x4, BME280, DS18B20, Thingspeak

DS18B20 kommt Gelb an D6, Schwarz an GND, Rot an 3,3 Volt

BME280 > GND an GND, VCC an VCC (3,3 Volt), SDL an D1, SDA an D2  / I2C Bus

Display > GND an GND, VCC an 5 Volt (VU 3 pin oben rechts), SDL an D1, SDA an D2  / I2C Bus

Library für Display > https://github.com/fdebrabander/Arduino-LiquidCrystal-I2C-library
*/
#include <ESP8266WiFi.h>          // For Wifi
#include <Adafruit_Sensor.h>      // librarie Adafruit_Unified_Sensor
#include <Adafruit_BME280.h>      // librarie Adafruit_BME280_Library
#include "Wire.h"                 // Library required for I2C connection
#include <LiquidCrystal_I2C.h>    // Library found here: https://github.com/fdebrabander/Arduino-LiquidCrystal-I2C-library
#include <OneWire.h>
#include <DallasTemperature.h>
#define ONE_WIRE_BUS D6
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
Adafruit_BME280 bme; // I2C

int lcdConnectWlan = 0; // Optional usage, just for design to delay the connected msg
const char* server = "api.thingspeak.com";
String apiKey ="xxxxxxxxxx";
const char* ssid = "xxxxxxxxxx";
const char* password = "xxxxxxxxxx";
int sent = 0;
LiquidCrystal_I2C lcd(0x27,20,4);  // Set the LCD I2C address, in this case 0x3F - If you don`t know it, use the I2C scanning script, don`t forget to set I/O Pins after Wire.begin (x, y);

  float h, t, p, pin, dp;
  float prevTemp = 0;
  char temperatureFString[6];
  char dpString[6];
  char humidityString[6];
  char pressureString[7];
  char pressureInchString[6];
  
void setup()
{
  Serial.begin(115200);   //Setup Serial Com
  Wire.begin(4, 5);       //Setup I2C connection on GPIO 4 and 5, which is D2 and D1 at the NodeMCU. GPIO5 (D1) is SCL and GPIO4 (D2) is SDA
  delay(20);              //20ms delay to intialize
     lcd.begin();     //initialize the display, 16 chars @ 2 rows.
     lcd.begin();
     lcd.setCursor(1,0);
     lcd.print("Wetterstation V1.0");
     lcd.setCursor(0,1);
     lcd.print("Temp. Luftf. Luftd.");
     lcd.setCursor(4,2);
     lcd.print("im Saunaraum");
     lcd.setCursor(1,3);
     lcd.print("Lese Sensoren aus");
    
     lcd.backlight();
     delay(5000);
    
     lcd.noBacklight();
     delay(1000);

     lcd.backlight();
     // finish with backlight on
    
     Serial.begin(115200);
     delay [10];
     sensors.begin();
    
    Serial.println(F("BME280 test"));
    delay(10);
    
    if (!bme.begin()) {
    Serial.println("Es konnte kein gültiger BME280-Sensor gefunden werden, Verdrahtung prüfen!");
    while (1);
  }
}

void loop(){

    float temp;

    sensors.requestTemperatures();
    temp = sensors.getTempCByIndex(0);
    sendTeperatureTS(temp);

}
  void sendTeperatureTS(float temp)
{  
    h = bme.readHumidity();
    t = bme.readTemperature();
   // t = t*1.8+32.0;
    dp = t-19,4*(100,0-h);
    p = bme.readPressure()/100.0F;
    pin = 0.225*p;
//    dtostrf(temp, 0, 1, prevTemp = 0) ;   //handled in sendTemp()
    dtostrf(t, 5, 1, temperatureFString);
    dtostrf(h, 5, 1, humidityString);
    dtostrf(p, 6, 1, pressureString);
    dtostrf(pin, 5, 2, pressureInchString);
    dtostrf(dp, 5, 1, dpString);
    delay(10);


    float Wassertemperatur = sensors.getTempCByIndex(0);
    float Luftdruck = p;
    
     Serial.print("Wassertemperatur =    ");
     Serial.print(sensors.getTempCByIndex(0),1);  
     Serial.println ("  °C");
     Serial.print("Temperatur       =   ");
     Serial.print(temperatureFString);
     Serial.println ("  °C");
     Serial.print("Luftfeuchtigkeit =   ");
     Serial.print(humidityString);
     Serial.println ("   %");
    
     Serial.print("Luftdruck        =   ");
     Serial.print(p,1);
     Serial.println (" hPA");
     Serial.print("Höhe             =   ");
     Serial.print(pressureInchString);
     Serial.println ("  m");
     Serial.print("Taupunkt         =   ");
     Serial.print(dpString);
     Serial.println ("  °C");
    
     lcd.setCursor(0, 0);                       // Anfang auf Stelle 0, Zeile 0 setzen
     lcd.print("Temperatur");                   // Temperatur  auf LCD ausgeben
     lcd.setCursor(11, 0);                      // Anfang auf Stelle 11, Zeile 0 setzen
     lcd.print(temperatureFString);             // Wert aus "t" ausgeben (Temperatur)
     lcd.setCursor(17, 0);                      // Anfang auf Stelle 17, Zeile 0 setzen
     lcd.print("\337C");                        // °C (mit"\337" wird das Gradzeichen dargestellt)auf LCD ausgeben
    
     lcd.setCursor(0, 1);                       // Anfang auf Stelle 0, Zeile 1 setzen
     lcd.print("Luftfeuchte");                  // Luftfeuchte auf LCD ausgeben
     lcd.setCursor(11, 1);                      // Anfang auf Stelle 11, Zeile 1 setzen
     lcd.print(humidityString);                 // Wert aus "h" ausgeben (Luftfeuchtigkeit)
     lcd.setCursor(18, 1);                      // Anfang auf Stelle 18, Zeile 1 setzen
     lcd.print("%");                            // % auf LCD ausgeben

     lcd.setCursor(0, 2);                       // Anfang auf Stelle 0, Zeile 2 setzen
     lcd.print("Luftdruck");                    // Luftdruck auf LCD ausgeben
     lcd.setCursor(11, 2);                      // Anfang auf Stelle 11, Zeile 2 setzen
     lcd.print(p,1);                            // Wert aus "p" ausgeben (Luftdruck)(p,1 ist eine Stelle hinter den ","
     lcd.setCursor(17, 2);                      // Anfang auf Stelle 17, Zeile 2 setzen
     lcd.print("hPa");                          // hPa auf LCD ausgeben
    
     lcd.setCursor(0, 3);                       // Anfang auf Stelle 0, Zeile 3 setzen
     lcd.print("Wassertemp.");                  // Wassertemp. auf LCD ausgeben
     lcd.setCursor(12, 3);                      // Anfang auf Stelle 12, Zeile 3 setzen
     lcd.print(sensors.getTempCByIndex(0),1);   // Wert aus "DS18B20" Wassertemperatur (sensors.getTempCByIndex(0),1
     lcd.setCursor(17, 3);                      // Anfang auf Stelle 17, Zeile 3 setzen
     lcd.print("\337C");                        // °C (mit"\337" wird das Gradzeichen dargestellt)auf LCD ausgeben  
     delay(120000);                             // Wartezeit einstellen
     lcd.clear();                               // Display löschen

    WiFiClient client;
  
    if (client.connect(server, 80)) { // use ip 184.106.153.149 or api.thingspeak.com
      
    String postStr = apiKey;
    postStr +="&field1=";
    postStr += String(temperatureFString);
    postStr +="&field2=";
    postStr += String(humidityString);
    postStr +="&field3=";
    postStr += String(pressureString);
    postStr +="&field4=";
    postStr += String(dpString);
    postStr +="&field5=";
    postStr += String(sensors.getTempCByIndex(0));
    postStr += "\r\n\r\n";
        
    client.print("POST /update HTTP/1.1\n");
    client.print("Host: api.thingspeak.com\n");
    client.print("Connection: close\n");
    client.print("X-THINGSPEAKAPIKEY: "+apiKey+"\n");
    client.print("Content-Type: application/x-www-form-urlencoded\n");
    client.print("Content-Length: ");
    client.print(postStr.length());
    client.print("\n\n");
    client.print(postStr);
    }
    sent++;
    client.stop();
}


Angehängte Datei(en) Thumbnail(s)
   
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
17.12.2018, 14:20
Beitrag #35
RE: Problem mit Displayanzeige LCD2004 bzw. nicht Richtig
Gut, dass es jetzt geht. Mit Deiner konfusen Beschreibung am Levelshifter hast Du mich ziemlich verwirrt. Nutzt Du ihn trotzdem?

Da es verschiedene I2C-LCD-Libs gibt, wäre für die Nachwelt noch inteessant, welche davon Du für den ESP8266 benutzt (Link bitte)

Gruß Tommy

"Wer den schnellen Erfolg sucht, sollte nicht programmieren, sondern Holz hacken." (Quelle unbekannt)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
17.12.2018, 14:52 (Dieser Beitrag wurde zuletzt bearbeitet: 17.12.2018 15:01 von magnum1795.)
Beitrag #36
RE: Problem mit Displayanzeige LCD2004 bzw. nicht Richtig
@ Tommy56

nein, ich brauche den Level Konverter nicht, geht auch so bestens. Und was die lib betrifft, hast du dir denn mal den sketch angeschaut? Vermutlich nicht. Hier habe ich es nämlich hinterlegt, damit man auch gleich die "Richtigen" libs mit hat und bei Bedarf auch gleich mit runterladen kann. Der Downloadlink ist dort ebenfalls drin. Smile

> LCD2004 Librarie

Übrigens der ESP8266 verträgt laut Aussage eines anderen User die 5 Volt auch auf Dauer Problemlos. Ich werde aber dennoch einen eigenen 5 Volt Anschluss legen. Da ich ja sowieso ein 5 Volt Netzteil einsetze, kommt eben einmal die 5 Volt über microUSB an den ESP8266 und einmal direkt an das LCD Display, somit wird der ESP entlastet und sollte daher keine Probleme machen.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
17.12.2018, 15:19
Beitrag #37
RE: Problem mit Displayanzeige LCD2004 bzw. nicht Richtig
Den Link im Sketch habe ich übersehen. Ich würde mich aber lieber auf das Datenblatt des ESP8266 verlassen, als auf die Aussage von Forenusern.

Aber es ist Dein ESP und Deine Entscheidung.

Gruß Tommy

"Wer den schnellen Erfolg sucht, sollte nicht programmieren, sondern Holz hacken." (Quelle unbekannt)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
17.12.2018, 16:41 (Dieser Beitrag wurde zuletzt bearbeitet: 17.12.2018 16:53 von magnum1795.)
Beitrag #38
RE: Problem mit Displayanzeige LCD2004 bzw. nicht Richtig
ja, da hast du wohl Recht, deshalb versorge ich ja das Display nun extern mit 5 Volt.

Eine Frage hätte ich aber noch. Ist zwar Jammern auf sehr hohen Niveau, aber man möchte es ja Perfekt haben. Im Display hatte ich beim Luftdruck die Werteanzeige an Stelle 11 gesetzt. Wenn der Luftdruck z.B. 3 stellig, also etwa 998,. oder 999,. klappt das alles gut. Steigt aber der Luftdruck auf 4 stellig, also 1000,. an, so rutscht die Anzeige eins nach rechts. Normal sieht es etwa so aus bei 3 stellig 998,0 hPa, bei 4 stellig aber so 1000,0hPa. Sprich die Dezimalstelle rutscht dann eine Stelle an hPa ran. In meinen Fall dann eben direkt an das kleine h, ohne Leerzeichen.

Kann man das irgendwie verhindern das die Werteangabe dann nach rechts rutscht? Möchte das die Dezimalstellen von allen 4 Werten in einer Reihe untereinander angezeigt wird.

Ja ich weiß es selbst, stört normalerweise niemanden, aber rein Interessehalber. Es würde ja nur den Luftdruck betreffen, die anderen Werte steigen nie so hoch.Blush

Vielleicht (bestimmt) hast du dafür auch eine Lösung. Danke schon mal.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
17.12.2018, 17:46 (Dieser Beitrag wurde zuletzt bearbeitet: 17.12.2018 17:47 von Tommy56.)
Beitrag #39
RE: Problem mit Displayanzeige LCD2004 bzw. nicht Richtig
(17.12.2018 16:41)magnum1795 schrieb:  ja, da hast du wohl Recht, deshalb versorge ich ja das Display nun extern mit 5 Volt.
Was soll das damit zu tun haben, dass die Eingänge des ESP8266 nicht 5V tolerant sind (zumindest nicht ewig)? Mit den Pullup-Widerständen auf dem Display ziehst Du die SDA und SCL auf 5V.

Dann musst Du 4 Zeichen vor dem Komma einplanen:
Code:
lcd.setCursor(10, 2);                      // Anfang auf Stelle 10, Zeile 2 setzen
     if (p < 1000) lcd.print(" "); // ein Leerzeichen ausgeben
     lcd.print(p,1);                            // Wert aus "p" ausgeben (Luftdruck)(p,1 ist eine Stelle hinter den ","

Gruß Tommy

"Wer den schnellen Erfolg sucht, sollte nicht programmieren, sondern Holz hacken." (Quelle unbekannt)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
18.12.2018, 08:15 (Dieser Beitrag wurde zuletzt bearbeitet: 18.12.2018 09:16 von magnum1795.)
Beitrag #40
RE: Problem mit Displayanzeige LCD2004 bzw. nicht Richtig [gelöst]
@ Tommy56

danke dir. Das Leben kann (manchmal) so einfach sein. Wenn es nur in allen Bereichen so wäre. Wünsche noch eine schöne Advents und Weihnachtszeit.

PS: hier noch mal der "Finale" Sketch mit paar kleinen Veränderungen.
Ist für einen ESP8266 Node MCU 12E, BME280, DS18B20, Display LCD2004 und Daten an Thingspeak senden. Vielleicht kann es ja jemand gebrauchen. Mit einer Handyapp (Thingview) kann/werden die Daten dann abgerufen.

Gerade für "Anfänger" sollte es doch einiges Erleichtern.
ACHTUNG!! Die Werte auf den Bild unten wurden im Zimmer gemessen und entsprechen daher nicht den tatsächlichen Werten am Pool. Shy

Code:
/*
ESP8266 Node MCU 12E, Display LCD 20x4, BME280, DS18B20, Thingspeak

DS18B20 kommt Gelb an D6, Schwarz an GND, Rot an 3,3 Volt

BME280 > GND an GND, VCC an VCC (3,3 Volt), SDL an D1, SDA an D2  / I2C Bus

Display > GND an GND, VCC an 5 Volt (VU 3 pin oben rechts), SDL an D1, SDA an D2  / I2C Bus

Library für Display > https://github.com/fdebrabander/Arduino-LiquidCrystal-I2C-library

Sonderzeichen kann man auch darstellen lassen.

Ich habe mir mal die Mühe gemacht und im Internet die Codes für die Darstellung
von einigen Sonderzeichen auf HD44780-kompatiblen-LCD-Displays wie z.B. das LCD2004
zu suchen. Umlaute kann man damit wie folgt darstellen:

lcd.print("\337C");            //wird dargestellt als"°C"

\40  !
\41  "
\42  #
\43  $
\44  %
\45  &
\50  (
\51  )
\52  *
\53  Plus-Zeichen
\54  Komma
\55  Minus-Zeichen
\56  Punkt
\57  Schrägstrich
\72  Doppelpunkt
\73  Semikolon
\74  <
\75  Gleichheitszeichen
\76  >
\77  ?
\100  @
\134  eckige Klammer links
\136  eckige Klammer rechts
\137  accent circonflexe
\138  Unterstrich
\140  accent grave
\173  geschweifte Klammer links
\174  senkrechter Strich
\175  geschweifte Klammer rechts
\176  Pfeil nach rechts
\177  Pfeil nach links
\260  Minuszeichen
\333  Kastenrahmen
\337  hochgestellter Kastenrahmen(wie Potenz)
\340  gr. alpha
\341  ä
\342  ß
\343  klein epsilon
\344  µ
\350  Wurzelzeichen
\351  hoch minus 1
\353  hoch x
\356  n mit Oberstrich ( spanisch )
\357  ö
\363  Zeichen unendlich
\364  Ohm
\365  ü
\366  gr.Summe
\367  pi ( klein )
\371  u mit strich rechts unten
\375  geteilt durch
\377  alle Leuchtpunkte eingeschaltet

erstellt von magnum1795 @12/2018
*/
#include <ESP8266WiFi.h>          // Für Wifi
#include <Adafruit_Sensor.h>      // librarie Adafruit_Unified_Sensor
#include <Adafruit_BME280.h>      // librarie Adafruit_BME280_Library
#include "Wire.h"                 // Library erforderlich für I2C connection
#include <LiquidCrystal_I2C.h>    // Library kann man hier herunterladen: https://bitbucket.org/fmalpartida/new-liquidcrystal/downloads - Bitte unbedingt diese verwenden. Danke
#include <OneWire.h>
#include <DallasTemperature.h>    // über > Sketch > Bibliothek einbinden > Bibliotheken verwalten  einbinden
#define ONE_WIRE_BUS D6
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
Adafruit_BME280 bme; // I2C

int lcdConnectWlan = 0;             // Optionale Verwendung, nur um die verbundene Nachricht zu verzögern
const char* server = "api.thingspeak.com";
String apiKey ="xxxxxxxxxx";
const char* ssid = "xxxxxxxxx";
const char* password = "xxxxxxxxxx";
int sent = 0;
LiquidCrystal_I2C lcd(0x27,20,4);  // Setze die LCD I2C Addresse, in diesen Fall 0x27 und stelle Display (20,4) bzw. je nach verwendeten Display (16,2)ein.  
//Wenn Sie es nicht wissen, verwenden Sie das I2C-Scanskript (https://gist.github.com/tfeldmann/5411375).
//Vergessen Sie nicht,  I/O Pins nach Wire.begin zu setzen (in diesen Fall 4 und 5);

  float h, t, p, pin, dp;
  float prevTemp = 0;
  char temperatureFString[6];
  char dpString[6];
  char humidityString[6];
  char pressureString[7];
  char pressureInchString[6];
  
void setup()
{
  Serial.begin(115200);   //Beginne die Serial Ausgabe
  Wire.begin(4, 5);       //Beginne I2C Verbindung von GPIO 4 und 5, welche sich an Pin D1 und D2 befinden. GPIO5 (D1) ist SCL und GPIO4 (D2) ist SDA
  delay(20);              //20ms Wartezeit
     lcd.begin();         //initializiere das Display, 20 Zeichen, 4 Reihen
     lcd.begin();
     lcd.setCursor(1,0);                        // setze Cursor an erste Stelle (1) und Reihe 1 (erste Reihe beginnt immer mit 0)
     lcd.print("Wetterstation V1.0");           // hier kann man einen beliebigen Namen (max.20 Zeichen inkl.Leerstellen) vergeben
     lcd.setCursor(0,1);
     lcd.print("Temp. Luftf. Luftd.");
     lcd.setCursor(4,2);
     lcd.print("im Saunaraum");
     lcd.setCursor(1,3);
     lcd.print("Lese Sensoren aus");
    
     lcd.backlight();                           // schalte Hintergrundbeleuchtung des Display ein
     delay(5000);
    
     lcd.noBacklight();                         // schalte Hintergrundbeleuchtung des Display aus
     delay(1000);

     lcd.backlight();
    
    
     Serial.begin(115200);                     // Beginne Aufzeichnung des Seriellen Monitors
     delay [10];
     sensors.begin();                          // Schalte Sensor (in diesen fall DS18B20) ein
    
    Serial.println(F("BME280 test"));
    delay(10);
    
    if (!bme.begin())                          // Schalte Sensor (in diesen Fall BME280) ein
  {
    Serial.println("Es konnte kein gültiger BME280-Sensor gefunden werden, Verdrahtung prüfen!");
    while (1);
  }
}

void loop(){

    float temp;

    sensors.requestTemperatures();
    temp = sensors.getTempCByIndex(0);
    sendTeperatureTS(temp);

}
  void sendTeperatureTS(float temp)
{  
    h = bme.readHumidity();                        // lese Luftfeuchte aus
    t = bme.readTemperature();                     // Lese Temperatur aus
   // t = t*1.8+32.0;                              // wenn Anzeige in °F gewünscht, dann // entfernen
    dp = t-19,4*(100,0-h);                         // Einstellung des Taupunktes
    p = bme.readPressure()/100.0F;                 // Einstellung des Luftdruckes in hPa
    pin = 0.225*p;                                 // Einstellung der Höhe des Standortes
    dtostrf(t, 5, 1, temperatureFString);
    dtostrf(h, 5, 1, humidityString);
    dtostrf(p, 6, 1, pressureString);
    dtostrf(pin, 5, 2, pressureInchString);
    dtostrf(dp, 5, 1, dpString);
    delay(10);


    float Wassertemperatur = sensors.getTempCByIndex(0);    
    float Luftdruck = p;                       // durch festgelegte floatwerte lassen sich die Dezimalstellen hinter dem "," ändern.z.B."p,1" eine Stelle, "p,2" zwei stellen.
    
     Serial.print("Wassertemperatur =    ");       // zwischen den " " kann ein beliebiger Name verwendet werden
     Serial.print(sensors.getTempCByIndex(0),1);   // auslesen der Sensordaten. Wenn °C hinter der Temperatur stehen soll, dann muss "print" verwendet werden
     Serial.println ("  °C");
     Serial.print("Temperatur       =   ");
     Serial.print(temperatureFString);             // auslesen der Temperatur (in diesen Fall vom BME280) "temperatureFString" wurde oben bei "char" festgelegt
     Serial.println ("  °C");                      // zwischen " " kann man Leerzeichen mit einfügen
     Serial.print("Luftfeuchtigkeit =   ");
     Serial.print(humidityString);
     Serial.println ("   %");
    
     Serial.print("Luftdruck        =   ");
     Serial.print(p,1);
     Serial.println (" hPA");
     Serial.print("Höhe             =   ");
     Serial.print(pressureInchString);
     Serial.println ("  m");
     Serial.print("Taupunkt         =   ");
     Serial.print(dpString);
     Serial.println ("  °C");
    
     lcd.clear();                               // Displayanzeige löschen
     delay (500);                               // Wartezeit einstellen
     lcd.setCursor(0, 0);                       // Anfang auf Stelle 0, Zeile 3 setzen
     lcd.print("Wassertemp.");                  // Wassertemp. auf LCD ausgeben
     lcd.setCursor(12, 0);                      // Anfang auf Stelle 12, Zeile 3 setzen
     lcd.print(sensors.getTempCByIndex(0),1);   // Wert aus "DS18B20" Wassertemperatur (sensors.getTempCByIndex(0),1
     lcd.setCursor(17, 0);                      // Anfang auf Stelle 17, Zeile 3 setzen
     lcd.print("\337C");                        // °C (mit"\337" wird das Gradzeichen dargestellt)auf LCD ausgeben
    
     lcd.setCursor(0, 1);                       // Anfang auf Stelle 0, Zeile 0 setzen
     lcd.print("Temperatur");                   // Temperatur  auf LCD ausgeben
     lcd.setCursor(11, 1);                      // Anfang auf Stelle 11, Zeile 0 setzen
     lcd.print(temperatureFString);             // Wert aus "t" ausgeben (Temperatur)
     lcd.setCursor(17, 1);                      // Anfang auf Stelle 17, Zeile 0 setzen
     lcd.print("\337C");                        // °C (mit"\337" wird das Gradzeichen dargestellt)auf LCD ausgeben
    
     lcd.setCursor(0, 2);                       // Anfang auf Stelle 0, Zeile 1 setzen
     lcd.print("Luftfeuchte");                  // Luftfeuchte auf LCD ausgeben
     lcd.setCursor(11, 2);                      // Anfang auf Stelle 11, Zeile 1 setzen
     lcd.print(humidityString);                 // Wert aus "h" ausgeben (Luftfeuchtigkeit)
     lcd.setCursor(18, 2);                      // Anfang auf Stelle 18, Zeile 1 setzen
     lcd.print("%");                            // % auf LCD ausgeben

     lcd.setCursor(0, 3);                       // Anfang auf Stelle 0, Zeile 2 setzen
     lcd.print("Luftdruck");                    // Luftdruck auf LCD ausgeben
     lcd.setCursor(10, 3);                      // Anfang auf Stelle 10, Zeile 2 setzen
     if (p < 1000) lcd.print(" ");              // ein Leerzeichen ausgeben
     lcd.print(p,1);                            // Wert aus "p" ausgeben (Luftdruck)(p,1 ist eine Stelle hinter den ","
     lcd.setCursor(17, 3);                      // Anfang auf Stelle 17, Zeile 2 setzen
     lcd.print("hPa");                          // hPa auf LCD ausgeben
    
     delay(120000);                             // Wartezeit einstellen
     lcd.clear();                               // Display löschen

    WiFiClient client;
  
// hier beginnen die Daten um die ausgelesenen Werte an  Thingspeak zu senden
// Benutze IP 184.106.153.149 oder api.thingspeak.com  
    if (client.connect(server, 80)) {
      
    String postStr = apiKey;
    postStr +="&field1=";
    postStr += String(temperatureFString);
    postStr +="&field2=";
    postStr += String(humidityString);
    postStr +="&field3=";
    postStr += String(pressureString);
    postStr +="&field4=";
    postStr += String(dpString);
    postStr +="&field5=";
    postStr += String(sensors.getTempCByIndex(0));
    postStr += "\r\n\r\n";
        
    client.print("POST /update HTTP/1.1\n");
    client.print("Host: api.thingspeak.com\n");
    client.print("Connection: close\n");
    client.print("X-THINGSPEAKAPIKEY: "+apiKey+"\n");
    client.print("Content-Type: application/x-www-form-urlencoded\n");
    client.print("Content-Length: ");
    client.print(postStr.length());
    client.print("\n\n");
    client.print(postStr);
    }
    sent++;
    client.stop();
}


Angehängte Datei(en) Thumbnail(s)
       
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Möglicherweise verwandte Themen...
Thema: Verfasser Antworten: Ansichten: Letzter Beitrag
  [Anfänger] Char Array Problem fp.blues2013 1 149 07.01.2019 13:06
Letzter Beitrag: Tommy56
  Problem beim Hochladen flint74 8 351 26.12.2018 19:26
Letzter Beitrag: Tommy56
  Elegoo Mega 2560 R3 lässt sich nicht programieren Union1925 6 338 03.12.2018 21:21
Letzter Beitrag: Tommy56
  Anfänger mit Problem/Gärtenbewässerungsprojekt Bommes 13 974 13.11.2018 20:17
Letzter Beitrag: fraju
Rainbow Sketch lässt sich nicht editieren HKestermann 3 334 03.11.2018 11:23
Letzter Beitrag: Hilgi
  Befehl wird nicht ausgeführt renesworld 15 691 19.10.2018 12:37
Letzter Beitrag: hotsystems
  Anfänger bekommt den Sketch nicht zum Laufen Maschinenbauer 6 736 06.10.2018 21:01
Letzter Beitrag: Tommy56
  Problem beim Kompilieren Mega2560 und Dallastemp sepp01 2 427 24.09.2018 11:33
Letzter Beitrag: sepp01
  Messwert auf OLED 0,96" SSD1306 darstellen geht nicht alpenpower 8 1.262 17.09.2018 10:56
Letzter Beitrag: alpenpower
  Problem mit Pointer GuaAck 6 651 02.09.2018 18:34
Letzter Beitrag: Tommy56

Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste