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
Hilfe gesucht. Webserver Statsiche und Dynamische HTMl Seite
19.08.2016, 15:23
Beitrag #1
Hilfe gesucht. Webserver Statsiche und Dynamische HTMl Seite
Hallo Leute,

hab da mal wieder eine kleine Blockade. Habe mir das Ethernet Shield geholt was auch läuft.

Habe jetzt zwei Beispielcodes versucht die auch laufen.

1. Womit ich Ausgänge über die Browser Seite schalten kann. Mit .htm Seite auf SD Karte. (nenne sie mal statisch)

2. Wo mir DHT22 werte direkt auf der Browser Seite mit html geschickt werden.
(nenne sie mal Dynamisch)

Code 1:
Code:
#if ARDUINO > 18
#include <SPI.h> // Für Arduino Version größer als 0018
#endif
#include <Ethernet.h>
#include <TextFinder.h>
#include <SD.h>

byte mac[] = { 0x5A, 0xA2, 0xDA, 0x0D, 0x56, 0x7A }; // MAC-Adresse des Ethernet-Shield
byte ip[]  = { 192, 168, 2, 102 };                   // IP zum aufrufen des Webservers
byte sdPin = 4;                                      // Pin der SD-Karte

EthernetServer server(80);                           // Server port

File webFile;

void setup()
{  
  Ethernet.begin(mac, ip); // Client starten
  server.begin();          // Server starten
  Serial.begin(9600);
  Serial.println("ARDUINO - STEUERUNG");

  Serial.println("Initialisiere SD-Karte...");
  if (!SD.begin(sdPin))
  {
    Serial.println(" - Initialisierung der SD-Karte fehlgeschlagen!");
    return;
  }
  Serial.println(" - SD-Karte erfolgreich initialisiert.");

  if (!SD.exists("index.htm"))
  {
    Serial.println(" - Datei (index.htm) wurde nicht gefunden!");
    return;
  }
  Serial.println(" - Datei (index.htm) wurde gefunden.");

  Serial.println();
  Serial.println("Verbraucher schalten");
}

void loop()
{
  EthernetClient client = server.available(); // Auf Anfrage warten

  if(client)
  {
    /*****************************************
      Ausgänge über das Webformular steuern  *
    *****************************************/
    TextFinder finder(client);

    if(finder.find("GET"))
    {
      while(finder.findUntil("pin", "\n\r"))
      {
        char typ = client.read();
        int  pin = finder.getValue();
        int  val = finder.getValue();

        if(typ == 'D')
        {
          pinMode(pin, OUTPUT);
          digitalWrite(pin, val);
          Serial.print(" - D"+String(pin));
        }
        else if(typ == 'A')
        {
          analogWrite(pin, val);
          Serial.print(" - A"+String(pin));
        }
        else Serial.print(" - Falscher Typ");

        if(val==1) Serial.println(" ein"); else Serial.println(" aus");
      }
    }

    /************************
      Webformular anzeigen  *
    ************************/
    boolean current_line_is_blank = true;       // eine HTTP-Anfrage endet mit einer Leerzeile und einer neuen Zeile

    while (client.connected())
    {
      if (client.available())                   // Wenn Daten vom Server empfangen werden
      {
        char c = client.read();                 // empfangene Zeichen einlesen
        if (c == '\n' && current_line_is_blank) // wenn neue Zeile und Leerzeile empfangen
        { // Standard HTTP Header senden
          client.println("HTTP/1.1 200 OK");
          client.println("Content-Type: text/html");
          client.println("Connection: close");
          client.println();

          // Website von SD-Karte laden
          webFile = SD.open("index.htm");  // Website laden
          if (webFile)
          {
            while(webFile.available())
            {
              client.write(webFile.read()); // Website an Client schicken
            }
            webFile.close();
          }
          break;
        }
        if (c == '\n')
        {
          current_line_is_blank = true;
        }
        else if (c != '\r')
        {
          current_line_is_blank = false;
        }
      }
    }
    delay(1);
    client.stop();
  }
}

Code 1 .htm
Code:
<!DOCTYPE html>
<html>
<head>
  <title>Arduino Steuerung</title>
  <style type="text/css">
    h2 { margin-bottom:5px; }
  </style>
</head>
<body>

  <h1>Heizungssteuerung</h1>

  <h2>Digital Pin3:</h2>
  <a href="/?pinD3=1" target="ifr">Ein</a>
  <a href="/?pinD3=0" target="ifr">Aus</a>
  
          
  <h2>Digital Pin6:</h2>
  <a href="/?pinD6=1" target="ifr">Ein</a>
  <a href="/?pinD6=0" target="ifr">Aus</a>

  <iframe name="ifr" style="display:none;" width="0" height="0"></iframe>
</body>
</html>

Code 2.
Code:
#include <DHT.h>

#define DHTPIN 2     // what pin we're connected to

// Uncomment whatever type you're using!
//#define DHTTYPE DHT11   // DHT 11
#define DHTTYPE DHT22   // DHT 22  (AM2302)
//#define DHTTYPE DHT21   // DHT 21 (AM2301)

// Connect pin 1 (on the left) of the sensor to +5V
// Connect pin 2 of the sensor to whatever your DHTPIN is
// Connect pin 4 (on the right) of the sensor to GROUND
// Connect a 10K resistor from pin 2 (data) to pin 1 (power) of the sensor

DHT dht(DHTPIN, DHTTYPE);

#include <SPI.h>
#include <Ethernet.h>

// Enter a MAC address and IP address for your controller below.
// The IP address will be dependent on your local network:
byte mac[] = {
  0x90, 0xA2, 0xDA, 0x00, 0x23, 0x36 }; //MAC address found on the back of your ethernet shield.
IPAddress ip(192,168,2,199); // IP address dependent upon your network addresses.

// Initialize the Ethernet server library
// with the IP address and port you want to use
// (port 80 is default for HTTP):
EthernetServer server(80);

void setup() {
// Open serial communications and wait for port to open:
  Serial.begin(9600);
   while (!Serial) {
    ; // wait for serial port to connect. Needed for Leonardo only
  }

  dht.begin();

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


void loop() {

  // Reading temperature or humidity takes about 250 milliseconds!
  // Sensor readings may also be up to 2 seconds 'old' (its a very slow sensor)
  float h = dht.readHumidity();
  float t = dht.readTemperature();

  // check if returns are valid, if they are NaN (not a number) then something went wrong!
  if (isnan(t) || isnan(h)) {
    Serial.println("Failed to read from DHT");
  } else {
    Serial.print("Humidity: ");
    Serial.print(h);
    Serial.print(" %\t");
    Serial.print("Temperature: ");
    Serial.print(t);
    Serial.println(" *C");
  }

  // 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) {
          // 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 the DHT-11
         //client.println("<H2>");
            client.print("Luftfeuchtigkeit: ");
            //client.println("</H2>");
            //client.println("<p />");
            //client.println("<H1>");
            client.print(h);
            client.print(" %\t");
            //client.println("</H1>");
            client.println("<p />");
            //client.println("<H2>");
            client.print("Temperatur: ");
            //client.println("</H2>");
            //client.println("<H1>");
            client.println(t);
            client.println(" °");
            client.println("C");
           // client.println("</H1>");
          
          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 disonnected");
  }
}

Aber wie kann ich es hinbekommen das er mir die DHT werte auch auf einer Statischen .htm Seite anzeigt.
So das ich mir in html eine Seite entwerfe und sagen kann das der wert auch an einer bestimmten stelle erscheint.

hoffe ist relativ verständlich.....

MFG B3ta
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
19.08.2016, 17:22
Beitrag #2
RE: Hilfe gesucht. Webserver Statsiche und Dynamische HTMl Seite
Hi,
dein Problem ist erkannt, aber das kannst dir in den Beispielen der IDE unter Beispiele - Ethernet - Webserver anschauen wie das geht. Das ist dort eindeutig herauszulesen.
lgbk

1+1 = 10 Angel ...und ich bin hier nicht der Suchmaschinen-Ersatz Dodgy...nur mal so als genereller Tipp..
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
19.08.2016, 17:55 (Dieser Beitrag wurde zuletzt bearbeitet: 19.08.2016 19:05 von b3ta.)
Beitrag #3
RE: Hilfe gesucht. Webserver Statsiche und Dynamische HTMl Seite
Der erste Code ist aus den Beispielen der ide. Und das sehe ich nicht wie ich den Wert an einer bestimmten stelle in der html einsetzen kann.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
21.08.2016, 15:38 (Dieser Beitrag wurde zuletzt bearbeitet: 21.08.2016 16:02 von rkuehle.)
Beitrag #4
RE: Hilfe gesucht. Webserver Statsiche und Dynamische HTMl Seite
Moin,
Zitat:Und das sehe ich nicht wie ich den Wert an einer bestimmten stelle in der html einsetzen kann.
Tja, das ist schwierig, da die Seite ja auf der SD-Karte liegt.Theoretisch könnte man die htmll-datei fortlaufend "patchen" und dann mit client.print() ausgeben, ist aber doof.
Als Alternative gehe ich immer so vor:
- HTML Text in statische Anteile zerlegen zwischen denen dynamisch Werte ausgegeben werden sollen und in Variablen ablegen
- damit der Speicher nicht zu eng wird werden diese Variablen mittels PROGMEM in den Flash - Speicher verschoben
- dann client.print(Anteil1), client.print(dyn. Wert), client.print(Anteil2) usw.
Das sieht etwa so aus (Pseudo):
Code:
// F-Macro für Variablen
#define P(x) (__FlashStringHelper*)(x)
const char Anteil1[] PROGMEM = {"das ist HTML-Text für Anteil1"};
const char Anteil2[] PROGMEM = {"das ist HTML-Text für Anteil2"};
//...irgendwelcher Code, dann Ausgabe
client.print(P(Anteil1));
client.print(dyn. Wert);
client.print(P(Anteil2));
Der Uno hat etwa 27 KByte minus Sketchgröße und der Mega etwa 248 KByte minus Sketchgröße an freien Flash - Speicher
(der Rest geht jeweils für den Bootloader drauf).
So kann man etliches an HTML-Code dort reinpacken und gleichzeitig dyn. Werte darstellen. Gleichzeitig spart man sich die SD-Karte, eine Menge Code und es dürfte schneller ablaufen.
Das P - Makro ist erforderlich um die Variablen ausgeben zu können. Strings werden über das F - Makro aus gegeben -> client.print(F("Das ist ein String"));
Auf client.println() sollte man verzichten und lieber im HTML-Text mit "\n" den Zeilenwechsel einbringen.
Hope it helps!
Grüße Ricardo

Nüchtern betrachtet...ist besoffen besser Big Grin
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
21.08.2016, 17:35
Beitrag #5
RE: Hilfe gesucht. Webserver Statsiche und Dynamische HTMl Seite
Hallo,
soll die Webseite öffentlich über WWW erreichbar sein oder nur im lokalen Netz?
Wenn nur im lokalen Netz, dann hätte ich evtl. einen weiteren Lösungsvorschlag.

Gruß
Arne

ExclamationMit zunehmender Anzahl qualifizierter Informationen bei einer Problemstellung, erhöht sich zwangsläufig die Gefahr auf eine zielführende Antwort.Exclamation
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
21.08.2016, 17:46 (Dieser Beitrag wurde zuletzt bearbeitet: 21.08.2016 18:18 von Corvus.)
Beitrag #6
RE: Hilfe gesucht. Webserver Statsiche und Dynamische HTMl Seite
Das Thema hatten wir hier bereits: Link
Da werden Variablen in den html-Dateien beim Ausliefern an den Client durch Strings ersetzt.

Gruß lorenz
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
21.08.2016, 18:18
Beitrag #7
RE: Hilfe gesucht. Webserver Statsiche und Dynamische HTMl Seite
Nur im lokalen netzwerk.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
21.08.2016, 18:20
Beitrag #8
RE: Hilfe gesucht. Webserver Statsiche und Dynamische HTMl Seite
Hast du dir meinen Link mal angesehen?
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Möglicherweise verwandte Themen...
Thema: Verfasser Antworten: Ansichten: Letzter Beitrag
  ESP8266 ESP12-E Webserver-Frage Claus_M 8 261 14.11.2016 22:02
Letzter Beitrag: Claus_M
  Hilfe: IR Remote Steuerung, MSGEQ7 + RGB-LED Streifen dastob 1 123 14.10.2016 21:40
Letzter Beitrag: hotsystems
  Webserver + Bild als Hintergrund ?! Marc2014 8 246 11.10.2016 21:39
Letzter Beitrag: Bitklopfer
Sad Ich brauche Hilfe Prosac 4 237 09.10.2016 18:39
Letzter Beitrag: Prosac
  Bluetooth refresh der Seite kaimaik 7 220 01.10.2016 22:05
Letzter Beitrag: kaimaik
  at24c256 Hilfe Gandalf 6 249 29.08.2016 18:59
Letzter Beitrag: MKc
Smile Progammier Neuling Codeschloss bittet um Hilfe Donalonso 2 287 27.08.2016 18:23
Letzter Beitrag: Binatone
  ESP8266 Webserver Programmieren HDT 11 774 23.08.2016 13:28
Letzter Beitrag: HDT
  Programmierer gesucht (einfaches Uni-Projekt) grt35a 2 275 12.08.2016 11:36
Letzter Beitrag: grt35a
  ESP8266 Webserver Marc2014 0 348 30.07.2016 20:15
Letzter Beitrag: Marc2014

Gehe zu:


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