<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Pretzelboard on Elektronik Dachbude</title><link>https://neu.fkainka.de/tag/pretzelboard/</link><description>Recent content in Pretzelboard on Elektronik Dachbude</description><generator>Hugo</generator><language>de-DE</language><lastBuildDate>Wed, 23 Mar 2016 21:09:39 +0100</lastBuildDate><atom:link href="https://neu.fkainka.de/tag/pretzelboard/index.xml" rel="self" type="application/rss+xml"/><item><title>Livedaten vom NanoESP mit ServerSentEvents</title><link>https://neu.fkainka.de/livedaten-vom-nanoesp-mit-serversentevents/</link><pubDate>Thu, 31 Mar 2016 06:00:57 +0200</pubDate><guid>https://neu.fkainka.de/livedaten-vom-nanoesp-mit-serversentevents/</guid><description>&lt;p&gt;In vorangegangen Projekten mit dem NanoESP, z.B. dem &lt;a href="http://iot.fkainka.de/day-15"&gt;Lichtsensor Projekt vom Adventskalender&lt;/a&gt;, konnten im Browser neue Messwerte  nur durch neues Laden der kompletten, veränderten Webseite dargestellt werden. Dies ist logischerweise sehr ineffizient. Auf der Suche nach besseren Möglichkeiten bin ich schließlich auf eine HTML5-Funktion ServerSentEvents gestoßen. Kurz gesagt handelt es sich hierbei um eine sehr praktische Funktion um Daten von einem Webserver zu empfangen, auch wenn die Webseite schon komplett geladen ist  Und das Beste ist, wenn die Verbindung einmal steh, kann der Server jederzeit und kontinuierlich neue Daten senden.&lt;/p&gt;</description></item><item><title>Ausgelagerte Webseiten für den NanoESP</title><link>https://neu.fkainka.de/groessere-webseiten-auf-dem-nanoesp/</link><pubDate>Mon, 28 Mar 2016 06:00:02 +0200</pubDate><guid>https://neu.fkainka.de/groessere-webseiten-auf-dem-nanoesp/</guid><description>&lt;p&gt;Gerade im Kontext des Adventskalenders oder den anderen Lernpaketen habe ich einige HTML-Seiten für den NanoESP entworfen. Allerdings hat mich dabei immer gestört, dass zum einen der Speicherplatz ziemlich gering ist zum anderen die Übertragung etwas langsam sein kann, vor allem, wenn die Seite oft neu geladen werden muss. Deswegen habe ich mir eine neue Methode überlegt, bei der die dazustellenden Webseite auf einem anderen Webserver liegt und beim Verbinden mit dem TCP-Server des Boards einfach nachgeladen wird. Der Nachteil ist hier vor allem, dass der Client mit dem Internet verbunden sein muss. Das bedeutet auch, das ein privates Netzwerk mit dem NanoESP als AccesPoint nicht möglich ist. Die Vorteile sind aber komplexere Seiten und schnellere Ladezeiten sowie eine insgesamt Entlastung des Boards. Im Folgenden Stelle ich das System anhand des &lt;a href="http://iot.fkainka.de/day-14"&gt;RGB-LED-Beispiels&lt;/a&gt; vor.&lt;/p&gt;</description></item><item><title>Wettbewerbsbeitrag: Polarfuchs</title><link>https://neu.fkainka.de/wettbewerbsbeitrag-polarfuchs/</link><pubDate>Mon, 01 Feb 2016 12:22:14 +0100</pubDate><guid>https://neu.fkainka.de/wettbewerbsbeitrag-polarfuchs/</guid><description>&lt;h2 id="beitrag-zum-kalenderwettbewerb-2015-von-nicolaus-cüppers"&gt;Beitrag zum &lt;a href="https://neu.fkainka.de/der-kalender-wettbewerb-2015-sensoren-im-internet-of-things/"&gt;Kalenderwettbewerb&lt;/a&gt; 2015 von Nicolaus Cüppers&lt;/h2&gt;
&lt;p&gt;&lt;img loading="lazy" src="http://www.elektronik-labor.de/Lernpakete/Kalender15/Polar3.jpg"&gt;&lt;/p&gt;
&lt;p&gt;Der Conrad-Adventskalender „Internet of Things“ war für mich der Einstieg, mich einmal mit dem Thema Arduino zu befassen. Herausgekommen ist das Projekt „Polarfuchs“. Der Name ist angelehnt an das kleinste mir bekannte deutsche Forschungsschiff. Es handelt sich um einen Versuchsaufbau, der ein unbemanntes „Schiff“ nachbildet, was einige Umgebungsdaten erfasst und weiterleitet und parallel dazu seinen eigenen Zustand überwacht.&lt;/p&gt;
&lt;p&gt;&lt;img loading="lazy" src="http://www.elektronik-labor.de/Lernpakete/Kalender15/Polar1.jpg"&gt;&lt;/p&gt;
&lt;p&gt;Es wurde nur der Kalender und zusätzlich eine Stromquelle verwendet. Daher sind die Messmethoden auch nicht unbedingt praxisnahe. Normalerweise würde man für die einzelnen Werte passende Sensoren einsetzen.  Das war allerdings nicht die Aufgabe. Vielmehr ging es ja darum, aus einer Hand voll vorhandener Bauelemente das Maximale herauszuholen. Als Schiffsrumpf wird daher der Kalender selbst verwendet. Er bildet durch seinen Plastikkörper mit zahlreichen Einsenkungen eine ideale Schwimmplattform. Es wurden jedoch die üblichen konfektionierten Steckkabel verwendet. Das dem Kalender beiliegende Kabel hätte aber auch gereicht, um die Schaltung aufzubauen. Dann hätte man nur alles etwas enger am Board platzieren müssen.&lt;/p&gt;</description></item><item><title>Wettbewerbsbeitrag: Quadrocopter Landing Pad</title><link>https://neu.fkainka.de/wettbewerbsbeitrag-quadrocopter-landing-pad/</link><pubDate>Mon, 01 Feb 2016 11:47:29 +0100</pubDate><guid>https://neu.fkainka.de/wettbewerbsbeitrag-quadrocopter-landing-pad/</guid><description>&lt;h2 id="beitrag-zum-kalenderwettbewerb-2015-von-paul-kaczmarczyk"&gt;Beitrag zum &lt;a href="https://neu.fkainka.de/der-kalender-wettbewerb-2015-sensoren-im-internet-of-things/"&gt;Kalenderwettbewerb&lt;/a&gt; 2015 von Paul Kaczmarczyk&lt;/h2&gt;
&lt;h3 id="auszug-ausdem-pdf"&gt;&lt;em&gt;&lt;strong&gt;Auszug aus&lt;/strong&gt;&lt;/em&gt;&lt;em&gt;&lt;strong&gt;dem PDF:&lt;/strong&gt;&lt;/em&gt;&lt;/h3&gt;
&lt;h2 id="projektbeschreibung"&gt;Projektbeschreibung:&lt;/h2&gt;
&lt;p&gt;An Weihnachten erhielt ich einen Quadrocopter als Geschenk von meinem Opa. Ich hatte so viel Freude damit, dass ich mir gleich ein zweites Modell vom Typ Blade Inductrix zulegte. Das Fliegen mit dem Quadrocopter macht allerdings besonders viel Spaß, wenn man Aufgaben zu erfüllen hat.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://neu.fkainka.de/images/2016/02/Quadro2.jpg"&gt;&lt;img alt="Quadro2" loading="lazy" src="https://neu.fkainka.de/images/2016/02/Quadro2.jpg"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2 id="spielidee"&gt;Spielidee&lt;/h2&gt;
&lt;p&gt;Für die zu bewältigenden Aufgaben kam mir der Gedanke das Landing Pad zu bauen, bei dem die Aufgabe darin besteht durch einen Ring zu fliegen, ohne hängen zu bleiben und dann zu landen, sofern man eine Landefreigabe erhält. Wird die Landefreigabe vom Tower nicht gegeben, so muss man schweben, bis die Landefreigabe erteilt wird. Wird ohne Landefreigabe gelandet, erhält man als Strafe für die Landung einen Punktabzug. Landet man mit Freigabe erhält man Punkte auf sein Konto. Ein Hängenbleiben am Ring soll auch einen Punktabzug zur Folge haben. Um sich mit anderen zu messen, sollen die erreichten Punkte auch in einer Internet-weiten Highscore-Liste namentlich geführt werden. Dieses Geschicklichkeitsspiel soll rundenbasiert ablaufen, wobei die Rundenzeit 60 s beträgt. Läuft die Runde ab, werden die addierten Punkte in die Highscore-Liste eingetragen. Der Start einer neuen Runde soll durch Druck auf einen Taster ermöglicht werden. [&amp;hellip;]&lt;/p&gt;</description></item><item><title>Wettbewerbsbeitrag: Neigungssensor – auslesen per IoT- Board, übertragen per WLAN</title><link>https://neu.fkainka.de/wettbewerbsbeitrag-neigungssensor-auslesen-per-iot-board-uebertragen-per-wlan/</link><pubDate>Wed, 27 Jan 2016 15:17:24 +0100</pubDate><guid>https://neu.fkainka.de/wettbewerbsbeitrag-neigungssensor-auslesen-per-iot-board-uebertragen-per-wlan/</guid><description>&lt;h2 id="beitrag-zum-kalenderwettbewerb-2015-vonholger-fritzsch"&gt;Beitrag zum &lt;a href="https://neu.fkainka.de/der-kalender-wettbewerb-2015-sensoren-im-internet-of-things/"&gt;Kalenderwettbewerb&lt;/a&gt; 2015 von Holger Fritzsch&lt;/h2&gt;
&lt;p&gt;Mit einer einfachen Zusatzschaltung läßt sich mit dem IoT- Board eine Erschütterung oder Lageänderung von Gegenständen oder Türen detektieren.&lt;br&gt;
Zur Anwendung kommt hier ein RS- Flip Flop bestehend aus 2 Transistoren vom Typ BC547.&lt;/p&gt;
&lt;p&gt;Ob man nun eine Tür , Fenster oder Fahrrad überwachen oder Teile vor unbefugter Entnahme sichern will,der kompakte Aufbau des Moduls machts möglich.&lt;br&gt;
Die Schaltung kennt zwei stabile Zustände, nämlich Bereitschaft- und Alarmzustand.&lt;br&gt;
Technisch gesehen entsprechend dem Set- und Reset- Zustand.&lt;/p&gt;</description></item><item><title>Wettbewerbsbeitrag: Wassermelder mit Twitter-Alarmmeldung</title><link>https://neu.fkainka.de/wettbewerbsbeitrag-wassermelder/</link><pubDate>Wed, 27 Jan 2016 12:57:19 +0100</pubDate><guid>https://neu.fkainka.de/wettbewerbsbeitrag-wassermelder/</guid><description>&lt;h2 id="beitrag-zum-kalenderwettbewerb-2015-vonbernhard-kaiser-michael-gaus"&gt;Beitrag zum &lt;a href="https://neu.fkainka.de/der-kalender-wettbewerb-2015-sensoren-im-internet-of-things/"&gt;Kalenderwettbewerb&lt;/a&gt; 2015 von Bernhard Kaiser &amp;amp; Michael Gaus&lt;/h2&gt;
&lt;p&gt;Bei diesem Projekt handelt es sich um einen Wassermelder, der optisch, akustisch und per Twitter-Meldung Alarm gibt, sobald an den Sensorkontakten Wasser detektiert wird. Er kann z.B. zur Überwachung auf austretendes Wasser aus Waschmaschine oder Spülmaschine dienen und helfen, rechtzeitig vor größeren Überschwemmungen eingreifen zu können. Als Sensorkontakt können einfach 2 Drähte mit abisolierten Enden genommen werden, so wie es auch auf dem Foto zu sehen ist. Verwendet wurden ausschließlich die Bauteile der beiden Adventskalender.&lt;/p&gt;</description></item><item><title>Wettbewerbsbeitrag: Blumenwächter</title><link>https://neu.fkainka.de/wettbewerbsbeitrag-blumenwaechter/</link><pubDate>Mon, 25 Jan 2016 19:29:19 +0100</pubDate><guid>https://neu.fkainka.de/wettbewerbsbeitrag-blumenwaechter/</guid><description>&lt;h2 id="beitrag-zum-kalenderwettbewerb-2015-von-leander-hackmann"&gt;Beitrag zum &lt;a href="https://neu.fkainka.de/der-kalender-wettbewerb-2015-sensoren-im-internet-of-things/"&gt;Kalenderwettbewerb&lt;/a&gt; 2015 von Leander Hackmann:&lt;/h2&gt;
&lt;p&gt;Jeder hat Topfpflanzen. Sie verschönern unseren Alltag, benötigen jedoch auch häufig unsere Aufmerksamkeit in Form von Pflege. Um den besten Standort herauszufinden und das regelmäßige Giessen nicht zu vergessen, habe ich folgende Anwendung mit dem Iot-Board entworfen und umgesetzt: ein Datenlogger für Licht und Feuchtigkeit.&lt;/p&gt;
&lt;h3 id="download-des-programms"&gt;&lt;a href="https://neu.fkainka.de/images/2016/01/blumenwaechter-final-160125a.zip"&gt;Download des Programms&lt;/a&gt;&lt;/h3&gt;
&lt;details class="spoiler"&gt;
&lt;summary&gt;Das Programm&lt;/summary&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;//Blumenwaechter für das NanoESP-Board
//2016 von Leander H.
//Misst alle 30min. Feuchtigkeit und Helligkeit
//Mit Druck auf Taster kann ein Nullpunkt in der Messung als markanter Punkt gesetzt werden#
//Es werden zwei Channels auf Thingspeak.com verwendet (API-Keys in &amp;#34;LightKEY und &amp;#34;MoistureKEY&amp;#34;)
//Über &amp;#34;threshold&amp;#34; kann der Pegel zur Warnung eingestellt werden
//Code und Idee von Leander H. -- Funktionen von Fabian Kainka
#include SoftwareSerial.h&amp;gt;
#include Time.h&amp;gt;
//Setup-Bereich
#define SSID &amp;#34;[SSID]&amp;#34;
#define PASSWORD &amp;#34;[Passwort]&amp;#34;
#define LightKEY &amp;#34;[API-KEY]&amp;#34;
#define MoistureKEY &amp;#34;[API-KEY]&amp;#34;
#define threshold 400 //
#define DEBUG true
#define LED_WLAN 13
SoftwareSerial esp8266(11, 12); // RX, TX
int ledGreen = 5;
int ledYellow = 4;
int ledRed = 3;
int sensorPower = 2;
int moistSensor = 2;
String lastminute;
 
const byte thingPost[] PROGMEM = {
 80, 79, 83, 84, 32, 42, 85, 82, 76, 42, 32, 72, 84, 84, 80, 47, 49, 46, 49, 10, 72, 111, 115, 116, 58, 32, 97, 112, 105, 46, 116, 104, 105, 110, 103, 115, 112, 101, 97, 107, 46, 99, 111, 109, 10, 67, 111, 110, 110, 101, 99, 116, 105, 111, 110, 58, 32, 99, 108, 111, 115, 101, 10, 67, 111, 110, 116, 101, 110, 116, 45, 84, 121, 112, 101, 58, 32, 97, 112, 112, 108, 105, 99, 97, 116, 105, 111, 110, 47, 120, 45, 119, 119, 119, 45, 102, 111, 114, 109, 45, 117, 114, 108, 101, 110, 99, 111, 100, 101, 100, 10, 67, 111, 110, 116, 101, 110, 116, 45, 76, 101, 110, 103, 116, 104, 58, 32, 42, 76, 69, 78, 42, 10, 10, 42, 65, 80, 80, 69, 78, 68, 42, 10
};
void setup() {
 pinMode(ledGreen, OUTPUT);
 pinMode(ledYellow, OUTPUT);
 pinMode(ledRed, OUTPUT);
 pinMode(sensorPower, OUTPUT);
 
 Serial.begin(19200);
 esp8266.begin(19200);
 while(!espConfig()){ //Failsafe für WLAN
   delay(200);
 }
 digitalWrite(LED_WLAN, HIGH);
 while(!getTime(&amp;#34;chronic.herokuapp.com&amp;#34;, &amp;#34;/utc/in+one+hours&amp;#34;) == false){ //Failsafe für Zeitsynchro
   delay(200);
 }
 
 sendThingPost(LightKEY, analogRead(A0)); //Erste Übermittlung
 digitalWrite(sensorPower, HIGH);
 delay(200);
 int tmp = analogRead(A2);
 sendThingPost(MoistureKEY, tmp);
 digitalWrite(sensorPower, LOW);
 if(tmp threshold){
    digitalWrite(ledRed, HIGH);
    digitalWrite(ledGreen, LOW);
 }else{
    digitalWrite(ledRed, LOW);
    digitalWrite(ledGreen, HIGH);
 }
}
void loop() {
 String shour, sminute, ssecond;
 if (hour() 9) shour = &amp;#34;0&amp;#34; + String(hour()); else shour = String(hour()); // adjust for 0-9
 if (minute() 9) sminute = &amp;#34;0&amp;#34; + String(minute());  else sminute = String(minute());
 if (second() 9) ssecond = &amp;#34;0&amp;#34; + String(second());  else ssecond = String(second());
 //debug(shour + &amp;#34;:&amp;#34; + sminute + &amp;#34;:&amp;#34; + ssecond);
 
 if(sminute == &amp;#34;0&amp;#34; || sminute == &amp;#34;30&amp;#34;){ //Wird zur halben und vollen Stunde ausgeführt
   if(sminute != lastminute){
         digitalWrite(ledYellow, HIGH);
         if(sendThingPost(LightKEY, analogRead(A0) == false)){
           while(sendThingPost(LightKEY, analogRead(A0) == false)){
             sendThingPost(LightKEY, analogRead(A0));
             delay(200);
           }
         }
         digitalWrite(ledYellow, LOW);
         delay(500);
         digitalWrite(ledYellow, HIGH);
         digitalWrite(sensorPower, HIGH);
         delay(100);
         if(sendThingPost(MoistureKEY, analogRead(A2) == false)){
           while(sendThingPost(MoistureKEY, analogRead(A2) == false)){
             sendThingPost(MoistureKEY, analogRead(A2));
             delay(200);
           }
         }
         digitalWrite(sensorPower, LOW);
         digitalWrite(ledYellow, LOW);
         
         digitalWrite(sensorPower, HIGH);
         delay(100);
         int tmp = analogRead(A2);
         digitalWrite(sensorPower, LOW);
         
         if(tmp threshold){
           digitalWrite(ledRed, HIGH);
           digitalWrite(ledGreen, LOW);
         }else{
           digitalWrite(ledRed, LOW);
           digitalWrite(ledGreen, HIGH);
         }
         
         lastminute = sminute;
   }
 }
 
 if(analogRead(A1) &amp;gt; 500){ //Button zum Setzen eines Nullpunktes
   digitalWrite(ledYellow, HIGH);
   sendThingPost(LightKEY, 0);
   digitalWrite(ledYellow, LOW);
   delay(500);
   digitalWrite(ledYellow, HIGH);
   sendThingPost(MoistureKEY, 0);
   digitalWrite(ledYellow, LOW);
   delay(1000);
 }
}
//Verwendete Funktionen von Fabian Kainka folgen ab hier:
//-----------------------------------------ThingsSpeak Functions------------------------------------
boolean sendThingPost(String key, int value)
{
 boolean succes = true;
 String  Host = &amp;#34;api.thingspeak.com&amp;#34;;
 String msg = &amp;#34;field1=&amp;#34; + String(value);
 succes &amp;amp;= sendCom(&amp;#34;AT+CIPSTART=\&amp;#34;TCP\&amp;#34;,\&amp;#34;&amp;#34; + Host + &amp;#34;\&amp;#34;,80&amp;#34;, &amp;#34;OK&amp;#34;);
 String postRequest = createThingPost(&amp;#34;/update&amp;#34;, key, msg);
 if (sendCom(&amp;#34;AT+CIPSEND=&amp;#34; + String(postRequest.length()), &amp;#34;&amp;gt;&amp;#34;))
 {
   esp8266.print(postRequest);
   esp8266.find(&amp;#34;SEND OK&amp;#34;);
   if (!esp8266.find(&amp;#34;CLOSED&amp;#34;)) succes &amp;amp;= sendCom(&amp;#34;AT+CIPCLOSE&amp;#34;, &amp;#34;OK&amp;#34;);
 }
 else
 {
   succes = false;
 }
 return succes;
}  
String createThingPost(String url, String key, String msg)
{
 String xBuffer;
 for (int i = 0; i sizeof(thingPost); i++)
 {
   char myChar = pgm_read_byte_near(thingPost + i);
   xBuffer += myChar;
 }
 String append = &amp;#34;api_key=&amp;#34; + key + &amp;#34;&amp;amp;&amp;#34; + msg;
 xBuffer.replace(&amp;#34;*URL*&amp;#34;, url);
 xBuffer.replace(&amp;#34;*LEN*&amp;#34;, String( append.length()));
 xBuffer.replace(&amp;#34;*APPEND*&amp;#34;, append);
 return xBuffer;
}
String createThingGet(String url, String key)
{
 String xBuffer;
 for (int i = 0; i sizeof(thingPost); i++)
 {
   char myChar = pgm_read_byte_near(thingPost + i);
   xBuffer += myChar;
 }
 String append = &amp;#34;api_key=&amp;#34; + key;
 xBuffer.replace(&amp;#34;POST&amp;#34;, &amp;#34;GET&amp;#34;);
 xBuffer.replace(&amp;#34;*URL*&amp;#34;, url);
 xBuffer.replace(&amp;#34;*LEN*&amp;#34;, String( append.length()));
 xBuffer.replace(&amp;#34;*APPEND*&amp;#34;, append);
 return xBuffer;
}
String createThingGet(String url, String key, String msg)
{
 String xBuffer;
 for (int i = 0; i sizeof(thingPost); i++)
 {
   char myChar = pgm_read_byte_near(thingPost + i);
   xBuffer += myChar;
 }
 String append = &amp;#34;api_key=&amp;#34; + key + &amp;#34;&amp;amp;&amp;#34; + msg;
 xBuffer.replace(&amp;#34;POST&amp;#34;, &amp;#34;GET&amp;#34;);
 xBuffer.replace(&amp;#34;*URL*&amp;#34;, url);
 xBuffer.replace(&amp;#34;*LEN*&amp;#34;, String( append.length()));
 xBuffer.replace(&amp;#34;*APPEND*&amp;#34;, append);
 return xBuffer;
}
String getTCP(String Host, String Subpage)
{
 boolean succes = true;
 succes &amp;amp;= sendCom(&amp;#34;AT+CIPSTART=\&amp;#34;TCP\&amp;#34;,\&amp;#34;&amp;#34; + Host + &amp;#34;\&amp;#34;,80&amp;#34;, &amp;#34;OK&amp;#34;);
 String getRequest = &amp;#34;GET &amp;#34; + Subpage + &amp;#34; HTTP/1.1\r\nHost:&amp;#34; + Host + &amp;#34;\r\n\r\n&amp;#34;;
 succes &amp;amp;= sendCom(&amp;#34;AT+CIPSEND=&amp;#34; + String(getRequest.length() + 2), &amp;#34;&amp;gt;&amp;#34;);
 return sendCom(getRequest);
}
boolean getTime(String Host, String Subpage)
{
 boolean succes = true;
 int xyear, xmonth, xday, xhour, xminute, xsecond;  //lokal variables
 succes &amp;amp;= sendCom(&amp;#34;AT+CIPSTART=\&amp;#34;TCP\&amp;#34;,\&amp;#34;&amp;#34; + Host + &amp;#34;\&amp;#34;,80&amp;#34;, &amp;#34;OK&amp;#34;);
 String getRequest = &amp;#34;GET &amp;#34; + Subpage + &amp;#34; HTTP/1.1\r\nHost:&amp;#34; + Host + &amp;#34;\r\n&amp;#34;;
 succes &amp;amp;= sendCom(&amp;#34;AT+CIPSEND=&amp;#34; + String(getRequest.length() + 2), &amp;#34;&amp;gt;&amp;#34;);
 esp8266.println(getRequest);
 if (esp8266.find(&amp;#34;+IPD&amp;#34;))
 {
   if (esp8266.find(&amp;#34;\r\n\r\n&amp;#34;))
   {
     xyear = esp8266.parseInt();
     xmonth = esp8266.parseInt();
     xday = esp8266.parseInt();
     xhour = esp8266.parseInt();
     xminute = esp8266.parseInt();
     xsecond = esp8266.parseInt();
     if (xday 0) xday *= -1;          //Because of date seperator - parseInt detects negativ integer
     if (xmonth 0) xmonth *= -1;    //Because of date seperator - parseInt detects negativ integer
     setTime(xhour, xminute, xsecond, xday, xmonth, xyear);
     sendCom(&amp;#34;AT+CIPCLOSE&amp;#34;, &amp;#34;OK&amp;#34;);
     return true;
   }
   else return false;
 }
 else return false;
}
//-----------------------------------------Config ESP8266------------------------------------
boolean espConfig()
{
 boolean succes = true;
 esp8266.setTimeout(5000);
 succes &amp;amp;= sendCom(&amp;#34;AT+RST&amp;#34;, &amp;#34;ready&amp;#34;);
 esp8266.setTimeout(1000);
 if (configStation(SSID, PASSWORD)) {
   succes &amp;amp;= true;
   debug(&amp;#34;WLAN Connected&amp;#34;);
   debug(&amp;#34;My IP is:&amp;#34;);
   debug(sendCom(&amp;#34;AT+CIFSR&amp;#34;));
 }
 else
 {
   succes &amp;amp;= false;
 }
 //shorter Timeout for faster wrong UPD-Comands handling
 succes &amp;amp;= sendCom(&amp;#34;AT+CIPMODE=0&amp;#34;, &amp;#34;OK&amp;#34;);  //So rum scheit wichtig!
 succes &amp;amp;= sendCom(&amp;#34;AT+CIPMUX=0&amp;#34;, &amp;#34;OK&amp;#34;);
 return succes;
}
boolean configTCPServer()
{
 boolean succes = true;
 succes &amp;amp;= (sendCom(&amp;#34;AT+CIPMUX=1&amp;#34;, &amp;#34;OK&amp;#34;));
 succes &amp;amp;= (sendCom(&amp;#34;AT+CIPSERVER=1,80&amp;#34;, &amp;#34;OK&amp;#34;));
 return succes;
}
boolean configTCPClient()
{
 boolean succes = true;
 succes &amp;amp;= (sendCom(&amp;#34;AT+CIPMUX=0&amp;#34;, &amp;#34;OK&amp;#34;));
 //succes &amp;amp;= (sendCom(&amp;#34;AT+CIPSERVER=1,80&amp;#34;, &amp;#34;OK&amp;#34;));
 return succes;
}
boolean configStation(String vSSID, String vPASSWORT)
{
 boolean succes = true;
 succes &amp;amp;= (sendCom(&amp;#34;AT+CWMODE=1&amp;#34;, &amp;#34;OK&amp;#34;));
 esp8266.setTimeout(20000);
 succes &amp;amp;= (sendCom(&amp;#34;AT+CWJAP=\&amp;#34;&amp;#34; + String(vSSID) + &amp;#34;\&amp;#34;,\&amp;#34;&amp;#34; + String(vPASSWORT) + &amp;#34;\&amp;#34;&amp;#34;, &amp;#34;OK&amp;#34;));
 esp8266.setTimeout(1000);
 return succes;
}
boolean configAP()
{
 boolean succes = true;
 succes &amp;amp;= (sendCom(&amp;#34;AT+CWMODE=2&amp;#34;, &amp;#34;OK&amp;#34;));
 succes &amp;amp;= (sendCom(&amp;#34;AT+CWSAP=\&amp;#34;NanoESP\&amp;#34;,\&amp;#34;\&amp;#34;,5,0&amp;#34;, &amp;#34;OK&amp;#34;));
 return succes;
}
boolean configUDP()
{
 boolean succes = true;
 succes &amp;amp;= (sendCom(&amp;#34;AT+CIPMODE=0&amp;#34;, &amp;#34;OK&amp;#34;));
 succes &amp;amp;= (sendCom(&amp;#34;AT+CIPMUX=0&amp;#34;, &amp;#34;OK&amp;#34;));
 succes &amp;amp;= sendCom(&amp;#34;AT+CIPSTART=\&amp;#34;UDP\&amp;#34;,\&amp;#34;192.168.255.255\&amp;#34;,90,91,2&amp;#34;, &amp;#34;OK&amp;#34;); //Importand Boradcast...Reconnect IP
 return succes;
}
//-----------------------------------------------Controll ESP-----------------------------------------------------
boolean sendUDP(String Msg)
{
 boolean succes = true;
 succes &amp;amp;= sendCom(&amp;#34;AT+CIPSEND=&amp;#34; + String(Msg.length() + 2), &amp;#34;&amp;gt;&amp;#34;);    //+&amp;#34;,\&amp;#34;192.168.4.2\&amp;#34;,90&amp;#34;, &amp;#34;&amp;gt;&amp;#34;);
 if (succes)
 {
   succes &amp;amp;= sendCom(Msg, &amp;#34;OK&amp;#34;);
 }
 return succes;
}
boolean sendCom(String command, char respond[])
{
 esp8266.println(command);
 if (esp8266.findUntil(respond, &amp;#34;ERROR&amp;#34;))
 {
   return true;
 }
 else
 {
   debug(&amp;#34;ESP SEND ERROR: &amp;#34; + command);
   return false;
 }
}
String sendCom(String command)
{
 esp8266.println(command);
 return esp8266.readString();
}
//-------------------------------------------------Debug Functions------------------------------------------------------
void serialDebug() {
 while (true)
 {
   if (esp8266.available())
     Serial.write(esp8266.read());
   if (Serial.available())
     esp8266.write(Serial.read());
 }
}
void debug(String Msg)
{
 if (DEBUG)
 {
   Serial.println(Msg);
 }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;/details&gt;
&lt;p&gt;Das Programm misst zur vollen und halben Stunde (Zeit wird aus dem Internet bezogen) Helligkeit und Feuchtigkeit, um diese dann in zwei Graphen auf Thingspeak.com zu schreiben. Bei zu trockener Erde (der Wert „threshold“ muss individuell angepasst werden, bei mir lag der Wert für feuchte Erde bei rund 400) leuchtet dann eine rote LED und ansonsten eine grüne. Die Stromzufuhr für den Feuchtigkeitssensor (ein Spannungsteiler), wird nur periodisch eingeschaltet, um Elektrolyse in der Erde zu vermeiden. Außerdem müssen Graphitelektroden (z.B. Bleistiftminen) verwendet werden, um die Pflanze nicht durch Ionen einer Elektrolyse zu vergiften (besonders bei Kupfer besteht Gefahr).&lt;/p&gt;</description></item></channel></rss>