DHT22 in Ethernet Sketch

sorry bin ganz neu mit dem Arduino und will einen DHT in den Scetch die Daten am Browser auslesen und ggf. auf die SD schreiben. Leider finde ich dazu nichts das ohne Fehler läuft.
Kann mir da Vielleicht jemand einen Tipp geben?
Danke

Hier der Sketch:

#include <SPI.h>

#include <Ethernet.h>

#include <DHT.h>

#define DHTPIN 2

#define DHTTYPE DHT22

float temp;

float hum;

float felt_temp;

char t_str[6];

char h_str[6];

char ft_str[6];

// Hier die MAC Adresse des Shields eingeben



byte mac[] = {

0x84, 0x00, 0x11, 0x22, 0x77, 0x55 };

// Eine IP im lokalen Netzwerk angeben. Dazu am besten die IP

// des PCs herausfinden (googlen!) und die letzte Zahl abändern

IPAddress ip(192,168,1,199);

// Ethernet Library als Server initialisieren

// Verwendet die obige IP, Port ist per default 80

EthernetServer server(80);

const int soilMoistPin1 = A3;

const int soilMoist1LevelLow = 789;

const int soilMoistL1evelHigh = 541;

const int soilMoistPin2 = A4;

const int soilMoist2LevelLow = 789;

const int soilMoist2LevelHigh = 541;

const int soilMoistPin3 = A5;

const int soilMoist3LevelLow = 789;

const int soilMoist3LevelHigh = 541;

void setup() {

// Serielle Kommunikation starten, damit wir auf dem Seriellen Monitor

// die Debug-Ausgaben mitlesen können.

Serial.begin(9600);

}

void loop()

{

// server.available() schaut, ob ein Client verfügbar ist und Daten

// an den Server schicken möchte. Gibt dann eine Client-Objekt zurück,

// sonst false

EthernetClient client = server.available();

// Wenn es einen Client gibt, dann...

if (client) {

Serial.println("Neuer Client");

// Jetzt solange Zeichen lesen, bis eine leere Zeile empfangen wurde

// HTTP Requests enden immer mit einer leeren Zeile

boolean currentLineIsBlank = true;

// Solange Client verbunden

while (client.connected()) {

// client.available() gibt die Anzahl der Zeichen zurück, die zum Lesen

// verfügbar sind

if (client.available()) {

// Ein Zeichen lesen und am seriellen Monitor ausgeben

char c = client.read();

Serial.write(c);

// In currentLineIsBlank merken wir uns, ob diese Zeile bisher leer war.

// Wenn die Zeile leer ist und ein Zeilenwechsel (das \n) kommt,

// dann ist die Anfrage zu Ende und wir können antworten

if (c == '\n' && currentLineIsBlank) {

// HTTP Header 200 an den Browser schicken

client.println("HTTP/1.1 200 OK");

client.println("Content-Type: text/html");

client.println("Connection: close"); // Verbindung wird nach Antwort beendet

client.println("Refresh: 2"); // Seite alle 25 Sekunden neu abfragen

client.println();

// Ab hier berginnt der HTML-Code, der an den Browser geschickt wird

client.println("<!DOCTYPE HTML>");

client.println("<html>");

client.print("Topf 1: <b>");

client.print(analogRead(A3));

client.println("</b><br />");

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

client.println("<!DOCTYPE HTML>");

client.println("<html>");

client.print("Topf 2: <b>");

client.print(analogRead(A4));

client.println("</b><br />");

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

client.println("<!DOCTYPE HTML>");

client.println("<html>");

client.print("Topf 3: <b>");

client.print(analogRead(A5));

client.println("</b><br />");

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

break;

}

if (c == '\n') {

// Zeilenwechsel, also currentLineIsBlack erstmal auf True setzen

currentLineIsBlank = true;

}

else if (c != '\r') {

// Zeile enthält Zeichen, also currentLineIsBlack auf False setzen

currentLineIsBlank = false;

}

}

}

// Kleine Pause

delay(1);

// Verbindung schliessen

client.stop();

Serial.println("Verbindung mit Client beendet.");

Serial.println("");

}

}

dann beschreibe mal was dieser Sketch genau bei dir macht.
Was daran falsch ist und
Was er anders machen soll.
Und was auf der Seriellen Schnittstelle ausgegeben wird,

Welche IP hat dein PC?

Was aber offensichtlich ist:
Im Setup fehlen viele Sachen ... hast du da möglicherweise was vergessen?

Aktuell hab ich 3 bodensensoren die auch funktionieren den dht22 bekomm ich auf den seriellen Monitor auch soweit das er mir die Daten schreibt aber das problem ist wie ich ihn dazu bringe mir auf die Website zu schreiben.
Hatte schon versucht ein anderen scetch rein zu kopieren, dass funktionierte aber nicht. (Deswegen stehen auch die restlichen Zeilen noch drin die hatte ich vergessen zu löschen)

Im Setup fehlen viele Sachen ... hast du da möglicherweise was vergessen?

Ich hab die dazugehörigen aus der setup und aus dem Loop wieder gelöscht da es nicht funktionierte.

Nimm das webserver beispiel aus der IDE
Passe die IP Adresse an
Gib bescheid wenn das läuft.

Also ich hab es jetzt nochmals versucht das Beispiel auf meine Bedürfnisse anzupassen ohne Erfolg. jetzt gibt der Seriele Monitor die Werte richtig aus aber ich bekomm mit dem Browser keiner Verbindung zu stande.

Der Sketch:

/*
 Web Server

 A simple web server that shows the value of the analog input pins.
 using an Arduino WIZnet Ethernet shield.

 Circuit:
 * Ethernet shield attached to pins 10, 11, 12, 13
 * Analog inputs attached to pins A0 through A5 (optional)

 created 18 Dec 2009
 by David A. Mellis
 modified 9 Apr 2012
 by Tom Igoe
 modified 02 Sept 2015
 by Arturo Guadalupi
 
 */

#include <SPI.h>
#include <Ethernet.h>
#include <DHT.h>
#include <Adafruit_Sensor.h>
// Enter a MAC address and IP address for your controller below.
// The IP address will be dependent on your local network:
byte mac[] = { 0x84, 0xE3, 0x42, 0x74, 0xB3, 0xBB
};



// Initialize the Ethernet server library
// with the IP address and port you want to use
// (port 80 is default for HTTP):
EthernetServer server(80);
IPAddress ip(192, 168, 178, 99);

DHT dht(3,DHT22);
const int soilMoistPin = A5;
const int soilMoistLevelLow = 789;
const int soilMoistLevelHigh = 541;


void setup() {
  // You can use Ethernet.init(pin) to configure the CS pin
  //Ethernet.init(10);  // Most Arduino shields
  //Ethernet.init(5);   // MKR ETH Shield
  //Ethernet.init(0);   // Teensy 2.0
  //Ethernet.init(20);  // Teensy++ 2.0
  //Ethernet.init(15);  // ESP8266 with Adafruit FeatherWing Ethernet
  //Ethernet.init(33);  // ESP32 with Adafruit FeatherWing Ethernet

  // Open serial communications and wait for port to open:
  Serial.begin(9600);
  while (!Serial) {
    ; // wait for serial port to connect. Needed for native USB port only
  }
  Serial.println("Ethernet WebServer Example");

  // start the Ethernet connection and the server:
  Ethernet.begin(mac, ip);

  // Check for Ethernet hardware present
  if (Ethernet.hardwareStatus() == EthernetNoHardware) {
    Serial.println("Ethernet shield was not found.  Sorry, can't run without hardware. :(");
    while (true) {
      delay(1); // do nothing, no point running without Ethernet hardware
    }
  }
  if (Ethernet.linkStatus() == LinkOFF) {
    Serial.println("Ethernet cable is not connected.");
  }

  // start the server
  server.begin();
  Serial.print("192, 168, 178, 99");
  Serial.println(Ethernet.localIP());
}


void loop() {

  delay(5000);
float t=dht.readTemperature();
float l=dht.readHumidity();
if(isnan(t)||isnan(l))
{
Serial.println("Die Werte konnten nicht ermittelt werden!");
}
 else
{

  //Temperatursensor
  Serial.print("Temperatur: ");
  Serial.print(t);
  Serial.print("°C");
  Serial.print("Luftfeuchtigkeit: ");
  Serial.print(l);
  Serial.println("%");
}
{
  //Bodensensor
  int soilMoist = analogRead(soilMoistPin);
  Serial.print("Analog Value Topf 1: ");
  Serial.print(soilMoist);
  int percentSoilMoist = map(soilMoist, soilMoistLevelHigh, soilMoistLevelLow, 100, 0);
  Serial.print("\t");
  Serial.print(percentSoilMoist);
  Serial.println("%");
  delay(5000);

  // listen for incoming clients
  EthernetClient client = server.available();
  if (client) {
    Serial.println("new client");
    // an HTTP request ends with a blank line
    bool 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) {
          // send a standard HTTP response 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();
          client.println("<!DOCTYPE HTML>");
          client.println("<html>");
          // output the value of each analog input pin
          for (int analogChannel = 0; analogChannel < 6; analogChannel++) {
            int sensorReading = analogRead(analogChannel);
            client.print("analog input ");
            client.print(analogChannel);
            client.print(" is ");
            client.print(sensorReading);
            client.println("<br />");
          }
          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();
    Serial.println("client disconnected");
  }
}}

Eins von den Ethernet.init musst Du aktivieren. Das, was zu Deinem Ethernet-Shield/-Modul passt, sonst funktioniert nichts.

Gruß Tommy

init

so meinst du?

Wenn Das zu Deinem Shield/Modul passt - ja.
Sonst musst Du die durchtesten.

Gruß Tommy

klappt leider immer noch nicht IP und MAC passen.

muus Pin 10 sein bei allen anderen kommt eine Fehlermeldung

Schau Dir mal von der Antwort den Seitenquelltext im Browser an. Da könntest Du etwas sehen.
Das, was Du ausgibst ist kein gültiges HTML.
Infos dazu auf Selfhtml und/oder w3schools

Gruß Tommy

ok langsam versteh ich nur noch Spanisch... Quelltext ist nicht aufrufbar.
eieiei hab mir das ganze doch deutlich einfacher vorgestellt als es in Wirklichkeit ist.

der erste Schritt ist, dass du das Beispiel zum laufen bringst.
Also

  • richtige IP Adresse setzen
  • richtiges Init aktivieren

Solange das nicht geht, sollst du keine weiteren Sensoren erweitern.
an der MAC Adresse brauchst du nichts ändern.
Fang noch mal von vorne an.

Bitte beantworte folgende Fragen:
Welche IP Adresse hat dein PC?
Welche IP Adresse verwendest du für den Arduino?

Wenn es nicht funktioniert: Zeige uns deinen Sketch und die Ausgabe vom Serial Monitor

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.