Webserver mit Wifi-Shield

Hallo zusammen

Ich bin noch nicht lange in der Arduino welt, darum habe ich einige Fragen, ich hoffe es kann mir jemand helfen. Mein Projekt ist eine kleine Wetterstation.

Verwendete Komponenten:
-Arduino Uno
-Wifi-Shield
-Div Sensoren

Ich betreibe mit dem Arduino Wifi-Shield einen Webserver, es werden verschiedene Sensoren eingelesen und sollen auf dem Browser mit dem HTML Code ausgegeben werden.
Nun habe ich folgende Probleme:

  • Das Laden des Browserfensters (HTML Code) mit den verschiedenen Werten dauert sicher 1 Minute --> wie geht das schneller?
  • Wie kann ich diese Werte aktualisieren? Denn einfach die Seite laden dauert ja wieder ewig.
  • Habe einen Windmesser, welcher die Windgeschwindigkeit ausgeben soll, jedoch funktioniert der Code nicht (auskommentierter Teil). Wenn dieser Code alleine in einem Sketch ist, funktioniert es, also reine Ausgabe über Serial Monitor.

Ich hoffe es kann mir irgendwer weiterhelfen.
Dankeschön.

Gruss Chemeile

Code Webserver.txt (12 KB)

chemeile:
... Ich hoffe es kann mir irgendwer weiterhelfen.

Dein Code ist sehr schlecht lesbar. Ich habe ihn daher nur sehr oberflächlich quergelesen.

Vermutung: Die Abfragen der Sensoren dauern lange. Abhilfe könnte darin bestehen, dass Du die HTML-Seite regelmäßig (z. B. alle 300 Sekunden) vollständig zusammenschraubst. Dann musst Du bei Bedarf nur diese (fertige) Seite ausliefern.

HTH

Gregor

Bist du sicher das das so rum richtig ist?

      if (sensRead + readCylce <= curTime)
      {
        sensRead = curTime;

          DHTS();
          BMP180();
          Water();
          Luminosity();
//        Anemo();

      }

Und sollte das nicht direkt in der loop Stehen?
Schon mal was von INTERVAL.h gehört?

Nimm am besten anstatt dem UNO und Wifi-Shield den ESP8266. Der ESP hat um einiges mehr performace und RAM...

Werte aktualisieren kannst du über Websockets und ein bisschen Java-Script:
http://www.michaelreichart.de/websockets-mit-esp8266/
Ich habe den Beispielcode von einem RGB Fader als Grundlage verwendet, nach dem müsste ich aber suchen...

Hallo Chemeile,

ich bin hier an einem Projekt das evtl. vergleichbar ist. In Einsatz habe ich einen Arduino Mega, ein TFT 320 x 240 Px mit SD, eine Uhr, 3 ACS712 und einen ESP8266.

Ich messe für eine Solaranlage an 3 Stellen Spannung und Strom, errechne die Leistung bzw. Energie und Ladung der Akkus. Sind insgesamt 15 Messwerte. Diese werden zum einen auf einer SD-Card gespeichert, auf einem TFT Display angezeigt und können über WiFi abgerufen werden. Klappt recht gut, Übertragung geht recht schnell, nur das Zusammenspiel Arduino - ESP8266 durchblicke ich noch nicht so ganz.

Ablauf im Groben ist folgendermaßen:
Es gibt 2 maßgebliche Funktionen. Eine erfasst die Messwerte und berechnet die anderen Werte. Diese Werte werden in Variable eingelesen, in einen String als HTML-Text für eine Tabelle reingeschrieben, dann auf dem Display ausgegeben und aufaddiert im EEPROM gespeichert. EEPROM ist für die Berechnung der Durchschnittswerte um diese auf SD zu schreiben und falls mal die Spannung ausfällt. Diese Funktion wird alle Sekunde mit Alarm.timerepeat aufgerufen.
Die zweite Funktion errechnet aus diesen Werten die aktuellen Durchschnittswerte und schreibt sie auf die SD-Card. Diese wird alle 30 Minuten mit Alarm.timerepeat aufgerufen.
Dann habe ich 2 weitere Funktionen:
Eine gibt die Messwerte als HTML aus. Hierzu wird der Header mit dem obigem HTML-Text und noch ein paar Dingen ergänzt und zum ESP8266 geschickt. Diese Funktion wird aus der Loop() aufgerufen wenn eine HTML-Anfrage kommt.
Die andere Funktion gibt die auf SD gespeicherte Datei zum Download aus, auch diese wird aus der Loop() auf die entsprechende Anfrage hin ausgegeben.

Also alles schön trennen und erst oder nur dann aufrufen wenn es benötigt wird. Wenn ich bei mir die Meldungen am Monitor richtig beobachte geht die Übertragung ruck-zuck, momentan dauert die Abfrage des ESP8266 vom Arduino einige Sekunden, warum so lange weiß ich (noch) nicht.

Ich hoffe du kannst damit was anfangen, wenn noch mehr wissen möchtest gib Bescheid.

Gruß Uwe