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
3 DHT22 Sensoren im WEB anzeigen
27.10.2017, 08:42
Beitrag #1
3 DHT22 Sensoren im WEB anzeigen
Mit einem DHT Sensor kann ich die 3 gleiche Werte auslesen und zum Webserver senden.
Code:
DHT dht(DHTPIN, DHTTYPE);
DHT dht1(DHTPIN, DHTTYPE);
DHT dht2(DHTPIN, DHTTYPE2);

Aber wenn ich mehrere DHT Sensoren auslesen möchte, wie hier unten,
dann geht der Webserver nicht mehr. Der Browser wartet auf 192.168.1.5.

Code:
DHT dht(DHTPIN, DHTTYPE);
DHT dht1(DHTPIN1, DHTTYPE);
DHT dht2(DHTPIN2, DHTTYPE2);

Warum?!?
Wie kann ich dieses Problem lösen?
Hier ist der ganze Code:
Code:
#include <SPI.h>
#include <Ethernet.h>
#include <DHT.h>

#define DHTPIN 9
#define DHTPIN1 10
#define DHTPIN2 6

#define DHTTYPE DHT22 // DHT 22 (AM2302)
#define DHTTYPE1 DHT22 // DHT 22 (AM2302)
#define DHTTYPE2 DHT11 // DHT 11 (AM2301)

DHT dht(DHTPIN, DHTTYPE);
DHT dht1(DHTPIN, DHTTYPE);
DHT dht2(DHTPIN, DHTTYPE2);

int i=0;
float h,t,h1,t1,h2,t2;
byte mac[] = {  
  0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
IPAddress ip(192,168,1,5);
byte gateway[] = {
  192, 168, 1, 1 };                  
byte subnet[] = {
  255, 255, 255, 0 };                  

EthernetServer server(80);

void setup() {
  Serial.begin(115200);
  // start the Ethernet connection and the server:
  Ethernet.begin(mac, ip, gateway, subnet);
  server.begin();
  Serial.print("server is at ");
  Serial.println(Ethernet.localIP());
  dht.begin();
  dht1.begin();
  dht2.begin();
}


void loop() {
  if (i==0)                              // einmal ausführen
{
  h = dht.readHumidity();
  t = dht.readTemperature();
  h1 = dht1.readHumidity();
  t1 = dht1.readTemperature();
  h2 = dht2.readHumidity();
  t2 = dht2.readTemperature();
  
  Serial.print("Sensor1: ");
  Serial.print(t);
  Serial.print(" *C --- ");
  Serial.print(h);
  Serial.print("% # ");

  Serial.print("Sensor2: ");
  Serial.print(t1);
  Serial.print(" *C --- ");
  Serial.print(h1);
  Serial.print("% # ");
  
  Serial.print("Sensor3: ");
  Serial.print(t2);
  Serial.print(" *C --- ");
  Serial.print(h2);
  Serial.println("% # ");
  i=i+1;
}

  // listen for incoming clients
  EthernetClient client = server.available();
  if (client) {
    Serial.println("new client");
    // an http request ends with a blank line
    boolean currentLineIsBlank = true;
    while (client.connected()) {
      if (client.available()) {
        char c = client.read();
        Serial.write(c);
        // if you've gotten to the end of the line (received a newline
        // character) and the line is blank, the http request has ended,
        // so you can send a reply
        if (c == '\n' && currentLineIsBlank) {
          // now output HTML data starting with standart header
          client.println("HTTP/1.1 200 OK");
          client.println("Content-Type: text/html");
          client.println("Connection: close");  // the connection will be closed after completion of the response
          client.println("Refresh: 5");  // refresh the page automatically every 5 sec
          client.println();
          //set background to yellow
          client.print("<body style=background-color:yellow>");


          //väljas
          client.println("<font color='green' size='12'>Sensor1");
          client.println("<br />");
          client.print(t);
          client.println(" &degC");
          client.println("&nbsp");
          client.println("&nbsp");
          client.print(h);
          client.print(" %\t");
          client.println("<br />");
          client.println("<hr />");
          //toas

          client.println("<font color='blue' size='12'>Sensor2");
          client.println("<br />");
          client.print(t1);
          client.println(" &degC");
          client.println("&nbsp");
          client.println("&nbsp");
          client.print(h1);
          client.print(" %\t");
          client.println("<br />");
          client.println("<hr />");
          //

          client.println("<font color='red' size='12'>Sensor3");
          client.println("<br />");
          client.print(t2);
          client.println(" &degC");
          client.println("&nbsp");
          client.println("&nbsp");
          client.print(h2);
          client.print(" %\t");
          client.println("<br />");
          client.println("<hr />");


          client.println("</html>");
          break;

        }
        if (c == '\n') {
          // you're starting a new line
          currentLineIsBlank = true;
        }

        else if (c != '\r') {
          // you've gotten a character on the current line
          currentLineIsBlank = false;
        }
      }
    }
    // give the web browser time to receive the data
    delay(1);
    // close the connection:
    client.stop();
    i=0;
    Serial.println("client disonnected");
  }
}
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
27.10.2017, 09:19
Beitrag #2
RE: 3 DHT22 Sensoren im WEB anzeigen
Du darfst die DHT nicht an das gleiche Pin legen. Schau mal hier.

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
27.10.2017, 10:53 (Dieser Beitrag wurde zuletzt bearbeitet: 27.10.2017 10:57 von Ziege777.)
Beitrag #3
RE: 3 DHT22 Sensoren im WEB anzeigen
Danke für die schnelle Antwort.
1. DHT Sensor ist an Pin 9, der 2. an Pin 10 und der 3. an Pin 6.
Mit ein Sensor funktioniert der WEB-Server, aber ab 2. und mehrere Sensoren geht der Web-Server nicht mehr. Warum?
....
DHT dht(DHTPIN, DHTTYPE);
DHT dht1(DHTPIN1, DHTTYPE);
DHT dht2(DHTPIN2, DHTTYPE2);
....
funktioniert der Webserver nicht!
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
27.10.2017, 11:40
Beitrag #4
RE: 3 DHT22 Sensoren im WEB anzeigen
(27.10.2017 10:53)Ziege777 schrieb:  Danke für die schnelle Antwort.
1. DHT Sensor ist an Pin 9, der 2. an Pin 10 und der 3. an Pin 6.
Mit ein Sensor funktioniert der WEB-Server, aber ab 2. und mehrere Sensoren geht der Web-Server nicht mehr. Warum?
....
DHT dht(DHTPIN, DHTTYPE);
DHT dht1(DHTPIN1, DHTTYPE);
DHT dht2(DHTPIN2, DHTTYPE2);
....
funktioniert der Webserver nicht!

Das liegt sicher nicht an den Sensoren.
Du verwendest in der Sketch-Definition nur den "DHTPIN".

Ich vermute, du hast Probleme mit dem Ram.
Wo liegt da die Speicherauslastung ?
Verwende für deine PrintAnweisungen das F-Macro.

Gruß Dieter

I2C = weniger ist mehr: weniger Kabel, mehr Probleme. Cool
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
27.10.2017, 13:35
Beitrag #5
RE: 3 DHT22 Sensoren im WEB anzeigen
(27.10.2017 10:53)Ziege777 schrieb:  DHT dht(DHTPIN, DHTTYPE);
DHT dht1(DHTPIN1, DHTTYPE);
DHT dht2(DHTPIN2, DHTTYPE2);
Wenn Du Dir das Beispiel in dem von mir angegebenen Link auch nur ansatzweise überflogen hättest, dann hättest Du festgestellt, dass Du bei der dortigen Lib nur 1 DHT-Objekt brauchst.

Mache es doch einfach so, wie dort angegeben.

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
30.10.2017, 10:29
Beitrag #6
RE: 3 DHT22 Sensoren im WEB anzeigen
Ich habe das Programm nach dem Link von Tommy56 abgeändert, aber es funktioniert leider auch nicht.
Wenn ich nur die Zeile 36: int chk = DHT.read22(DHT9_PIN); verwende, die Zeile 61: chk = DHT.read22(DHT10_PIN); und die Zeile 86: chk = DHT.read22(DHT6_PIN); weg lasse, dann funktioniert der Webserver!!!!
Hier sind die RAM INFO:
Der Sketch verwendet 13886 Bytes (43%) des Programmspeicherplatzes. Das Maximum sind 32256 Bytes.
Globale Variablen verwenden 966 Bytes (47%) des dynamischen Speichers, 1082 Bytes für lokale Variablen verbleiben
Nach dieser Serieller Monitor Ausgabe beibt der Webserver stehen:
server is at 192.168.1.5
1.DHT22 --> , OK, 33.0%, 26.7
2.DHT22 --> , OK, 34.0%, 26.8
3.DHT22 --> , OK, 33.0%, 26.5

Code:
.
#include <SPI.h>
#include <Ethernet.h>
#include <DHT.h>

dht DHT;

#define DHT9_PIN 9
#define DHT10_PIN 10
#define DHT6_PIN 6

int i=0;
float h,t,h1,t1,h2,t2;
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
IPAddress ip(192,168,1,5);
byte gateway[] = { 192, 168, 1, 1 };                  
byte subnet[] = { 255, 255, 255, 0 };                  

EthernetServer server(80);

void setup() {
  Serial.begin(115200);
  // start the Ethernet connection and the server:
  Ethernet.begin(mac, ip, gateway, subnet);
  server.begin();
  Serial.print("server is at ");
  Serial.println(Ethernet.localIP());
}


void loop()
{
  if (i==0)                              // einmal ausführen
{
  // **************** READ DATA ****************************
  Serial.print("1.DHT22 --> , \t");
  int chk = DHT.read22(DHT9_PIN);
  switch (chk)
  {
    case DHTLIB_OK:  
    Serial.print("OK,\t");
    break;
    case DHTLIB_ERROR_CHECKSUM:
    Serial.print("Checksum error,\t");
    break;
    case DHTLIB_ERROR_TIMEOUT:
    Serial.print("Time out error,\t");
    break;
    default:
    Serial.print("Unknown error,\t");
    break;
  }
  // **************** Display DATA ****************************
  Serial.print(DHT.humidity,1);
  Serial.print("%,\t");
  Serial.println(DHT.temperature,1);
  h = DHT.humidity;
  t = DHT.temperature;
  delay (250);
  // **************** READ DATA ****************************
  Serial.print("2.DHT22 --> , \t");
  chk = DHT.read22(DHT10_PIN);
  switch (chk)
  {
    case DHTLIB_OK:  
    Serial.print("OK,\t");
    break;
    case DHTLIB_ERROR_CHECKSUM:
    Serial.print("Checksum error,\t");
    break;
    case DHTLIB_ERROR_TIMEOUT:
    Serial.print("Time out error,\t");
    break;
    default:
    Serial.print("Unknown error,\t");
    break;
  }
  // **************** Display DATA ****************************
  Serial.print(DHT.humidity,1);
  Serial.print("%,\t");
  Serial.println(DHT.temperature,1);
  h1 = DHT.humidity;
  t1 = DHT.temperature;
  delay (250);
  // **************** READ DATA ****************************
  Serial.print("3.DHT22 --> , \t");
  chk = DHT.read22(DHT6_PIN);
  switch (chk)
  {
    case DHTLIB_OK:  
    Serial.print("OK,\t");
    break;
    case DHTLIB_ERROR_CHECKSUM:
    Serial.print("Checksum error,\t");
    break;
    case DHTLIB_ERROR_TIMEOUT:
    Serial.print("Time out error,\t");
    break;
    default:
    Serial.print("Unknown error,\t");
    break;
  }
  // **************** Display DATA ****************************
  Serial.print(DHT.humidity,1);
  Serial.print("%,\t");
  Serial.println(DHT.temperature,1);
  h2 = DHT.humidity;
  t2 = DHT.temperature;
  delay (250);
  // **********************************************************
  i=i+1;
}

  // listen for incoming clients
  EthernetClient client = server.available();
  if (client) {
    Serial.println("new client");
    // an http request ends with a blank line
    boolean currentLineIsBlank = true;
    while (client.connected()) {
      if (client.available()) {
        char c = client.read();
        Serial.write(c);
        // if you've gotten to the end of the line (received a newline
        // character) and the line is blank, the http request has ended,
        // so you can send a reply
        if (c == '\n' && currentLineIsBlank) {
          // now output HTML data starting with standart header
          client.println("HTTP/1.1 200 OK");
          client.println("Content-Type: text/html");
          client.println("Connection: close");  // the connection will be closed after completion of the response
          client.println("Refresh: 5");  // refresh the page automatically every 5 sec
          client.println();
          //set background to yellow
          client.print("<body style=background-color:yellow>");


          //väljas
          client.println("<font color='green' size='12'>Sensor1");
          client.println("<br />");
          client.print(t);
          client.println(" &degC");
          client.println("&nbsp");
          client.println("&nbsp");
          client.print(h);
          client.print(" %\t");
          client.println("<br />");
          client.println("<hr />");
          //toas

          client.println("<font color='blue' size='12'>Sensor2");
          client.println("<br />");
          client.print(t1);
          client.println(" &degC");
          client.println("&nbsp");
          client.println("&nbsp");
          client.print(h1);
          client.print(" %\t");
          client.println("<br />");
          client.println("<hr />");
          //

          client.println("<font color='red' size='12'>Sensor3");
          client.println("<br />");
          client.print(t2);
          client.println(" &degC");
          client.println("&nbsp");
          client.println("&nbsp");
          client.print(h2);
          client.print(" %\t");
          client.println("<br />");
          client.println("<hr />");


          client.println("</html>");
          break;

        }
        if (c == '\n') {
          // you're starting a new line
          currentLineIsBlank = true;
        }

        else if (c != '\r') {
          // you've gotten a character on the current line
          currentLineIsBlank = false;
        }
      }
    }
    // give the web browser time to receive the data
    delay(1);
    // close the connection:
    client.stop();
    i=0;
    Serial.println("client disonnected");
  }
}
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
30.10.2017, 11:18
Beitrag #7
RE: 3 DHT22 Sensoren im WEB anzeigen
Hast D Dir im Browser mal Den ankommenden Seitenquelltext angeschaut?
Wie rufst Du ihn denn auf?

Vorschläge:
1. die delay raus
2. Verwende das F-Makro für konstante Texte. Damit werden die im Flash abgelegt
Code:
// Du
Serial.print("server is at ");
// besser
Serial.print(F("server is at "));
client.print(F("<body style=background-color:yellow>"));

3. schreibe ordentliche HTML-Zeichen: " &degC;" "&nbsp;"
4. Ersetze die Zeilen 61 und 86 mal mit einfachen Zuweisungen chk = 0 oder so

Ansonsten kann ich Dir nicht weiter helfen, da ich keine DHT22 benutze.

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
Antwort schreiben 


Möglicherweise verwandte Themen...
Thema: Verfasser Antworten: Ansichten: Letzter Beitrag
  Arduino mit DFPlayer BMP-Dateien anzeigen daja64 4 254 06.02.2020 15:23
Letzter Beitrag: biologist
  SD-Karte Ersten und Letzten wert anzeigen Luis90 1 422 12.11.2019 12:23
Letzter Beitrag: Tommy56
  Zwei Sensoren für Zwei Relais Madflo 28 3.024 10.07.2019 13:13
Letzter Beitrag: Tommy56
  Zwei identische I2C sensoren an einem Bus Karli 19 4.292 02.04.2018 22:13
Letzter Beitrag: Harry
  Nextion+DHT22+Arduino Niklas 24 7.331 16.02.2018 22:35
Letzter Beitrag: Tommy56
  TFT dauerhaft anzeigen Samsuino 33 6.923 19.07.2017 10:18
Letzter Beitrag: rkuehle
  Motor Steuerung durch Sensoren Werte Zerebrator 14 3.635 12.06.2017 14:36
Letzter Beitrag: Franz54
  DHT22 min max Temperatur 7-Segmentanzeige bastelbert 50 11.169 14.01.2017 11:46
Letzter Beitrag: Tommy56
Question DUE I2C Sensoren ummappen Stephan_56 3 1.517 15.03.2016 22:52
Letzter Beitrag: hotsystems
  Problem bei Aktorpositionierung via Hall-Sensoren Corban 0 1.448 22.02.2016 14:39
Letzter Beitrag: Corban

Gehe zu:


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