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