Wehr genießen

Home
Interessantes
Arduino
Wehr

 Bild Dietmar Bild Ida
Ida und Dietmar nach 22 Jahren auf Teneriffa

nun - WOHLFÜHLEN - in Wehr

Letzte HP Änderung:
21.08.2020

 

Es gibt viele Dinge zwischen Himmel und Erde, die man nicht kaufen kann,

 aber wir genießen sie!

 

-*-

bestes aktuelles Wetter  von Wehr hier

-*-

und noch interessante Wetterdaten von Wehr von M. Bader hier

-*-

auch interessantes Kachelmann-Wetter von Wehr

-*-

Hier meine aktuellen Balkon-Temperaturen "79664 Wehr"

sie werden über Internet of Things (IoT) laufend aktualisiert.

 Über IoT und den Chip ESP8266 aktualisiere ich laufend die  Balkon-Temperaturen von Ida und Dietmar in Wehr über die letzen 3 Tage auf meiner Homepage.

(Mit der Maus über die Temperaturlinie fahren, um für jede vergangene halbe Stunde die Temperatur abrufen zu können)

 

 

 << Testaufbau

mit NanoESP (PretzelBoard) um eine Verbindung mit WLAN herzustellen und mit Arduino-Sketch die

gewünschten, aktuellen Nussbaumer-Temperaturen ins Internet aufzuspielen. (über Thingspeak.com)

 

                                    ^^  Hier oben ist die momentane  Balkon Temperatur

(alle 5 Minuten aktualisiert). Eventuell die Homepage noch einmal neu laden um die letzte aktualisierte Temperatur zu  sehen (-4 Grad ist nicht korrekt geladen).

-----------------------

Hier unten, das eingebaute, fertige IoT Temperaturmodul.

Erste Internet-Übertragung am 7. Juni 2019.

Funktioniert ohne Computer, wird nur mit 5 V Speisespannung versorgt. Das kleine Pretzel Board von Franzis leistet hier volle Arbeit. Die über das Internet geholten Wehr -Temperaturen von openweather.com sind über unsere Balkontemperaturen korrigiert. 

 

Hier der erstellte Sketch (Programm) für das Pretzel Board (NanoESP (hier mit unsichtbaren xxxx  SSID und Passwortnamen unseres WLANs)) - für diejenigen, die es nachbauen wollen.

Ich hatte damit schon ziemliche Mühe ;-))) und gebe auch keinerlei Garantie für den Nachbau.

Stand 21.08.2020:

String file1="P23_Thingspeak"; //openweather.com Wehr,DE 20.8.2019

String file2="_37";//  neu 21.08.2020

// hochladen mit Arduino nano; Prozessor: ATmega328P(Old Boatloader), PROGRAMMER. AVrISP mkll

#define SSID "xxxxxxxx"

#define PASSWORD "xxxxxxxxxx"

#define CITY "Wehr,DE"

#define DEBUG true

#define LED_WLAN 13

#define RED 3

#define GREEN 5

#define BLUE 6

#define GND 4

#define ThingSpeakKEY "IT2M4D4XDVPIXB6U"

#define SENSOR A6

#define LED_WLAN 13

#define DEBUG true

#include <SoftwareSerial.h>

#include<LiquidCrystal.h>

// RS, E, D4, D5, D6, D7

LiquidCrystal lcd(A0, A1, A2, A3, A4, A5);

SoftwareSerial esp8266(11, 12); // RX, TX

const char thingPost[] PROGMEM = {

  "POST *URL* HTTP/1.1\nHost: api.thingspeak.com\nConnection: close\nContent-Type: application/x-www-form-urlencoded\nContent-Length: *LEN*\n\n*APPEND*\n\0"

};

int diff=1;// korrigiert und angepasst nach ca. 4 Monaten Testvergleich

void setup() {

  Serial.begin(19200);

  esp8266.begin(19200);

    Serial.print (file1);  Serial.println (file2);

    Serial.print("diff= +");Serial.println(diff);

    Serial.println ();

  lcd.begin(16, 2);

  lcd.setCursor(0, 0);

  lcd.print(file1);lcd.setCursor(0, 1); lcd.print(file2);

  lcd.print("  diff: +");lcd.print(diff);lcd.print (char(223));

  delay(3000);

  lcd.setCursor(0, 0);

  lcd.print("openweathermap");lcd.setCursor(0, 1); lcd.print(".com"); 

  delay(2000);

  if (!espConfig()) serialDebug();

  else digitalWrite(LED_WLAN, HIGH);

  lcd.setCursor(0, 1);

  lcd.print("WLAN CONNECTED");

delay(4000);

  pinMode(RED, OUTPUT);

  pinMode(GREEN, OUTPUT);

  pinMode(BLUE, OUTPUT);

  pinMode(GND, OUTPUT);

  digitalWrite(GND, LOW);

  lcd.clear();

  lcd.print("Aktuell: ");lcd.print(CITY);

//

  Serial.println("LED-Test");

  analogWrite(RED,255);delay (1000);analogWrite(RED,LOW);delay (1000);

  analogWrite(GREEN,255); delay (1000);analogWrite(GREEN,LOW); delay (1000);

  analogWrite(BLUE,255);delay (1000);analogWrite(BLUE,LOW);delay (1000);

// 

}

void loop() {

  int temp  = getWeatherTemp(CITY);

  Serial.print ("Temp openweathermap: ");Serial.print(temp);// OpenWeatherMap

  temp=temp+diff;

  lcd.setCursor(0, 1);

  lcd.print("    "+String(temp)); lcd.print (char(223));lcd.print("C");

  Serial.print("   IoT korrigiert: ");Serial.println (temp);

  rgbTemp(temp);

  delay(15000);

    if (sendThingPost(ThingSpeakKEY, temp))

  delay(300000);//delay(300000)

}

void rgbTemp(int val)

{

  int green, blue , red ;

 

  if (val <= 10 & val >= -20)

    blue = map(val, -20, 10, 255, 0);

  else blue = 0;

  if (val >= 10 & val <= 40)

    green = map(val, 10, 40, 0, 255);

  else if (val >= -20 & val < 10)  green = map(val, -20, 10, 0, 255);

  else green = 0;

  if (val > 10 & val <= 40) red = map(val, 10, 40, 0, 255);

  else red = 0;

   green=green/30; red=red+50;// rot hervorheben

   Serial.print("Grün ");Serial.print(green);

   Serial.print("  Rot ");Serial.println(red);

  analogWrite(  RED, red);

  analogWrite(GREEN, green);

  analogWrite(BLUE, blue);

}

 

float getWeatherTemp(String city)

{

  float temp;

  int humidity, clouds;

 

  String  Host = "temp.fkainka.de";

  String  Subpage = "/?city="+city;

 

  if (sendCom("AT+CIPSTART=\"TCP\",\"" + Host + "\",80", "OK"))

  {

    String getRequest = "GET " + Subpage + " HTTP/1.1\r\nHost:" + Host + "\r\n";

    if (sendCom("AT+CIPSEND=" + String(getRequest.length() + 2), ">"))

    {

      esp8266.println(getRequest);

      if (esp8266.find("+IPD"))

      {

        if (esp8266.find("\r\n\r\n"))

        {

          if (esp8266.find("Temp:"))

          {

            int vTemp = esp8266.parseInt();

            //String vTemp = esp8266.readStringUntil('\"');

            debug("Temp: " + String(vTemp) + "C ");

            temp = vTemp;//.toFloat();

          }

          sendCom("AT+CIPCLOSE", "OK");

          return temp;

        }

      }

    }

 

  }

}

 

String getTCP(String Host, String Subpage)

{

  boolean success = true;

 

  success &= sendCom("AT+CIPSTART=\"TCP\",\"" + Host + "\",80", "OK");

  String getRequest = "GET " + Subpage + " HTTP/1.1\r\nHost:" + Host + "\r\n\r\n";

  success &= sendCom("AT+CIPSEND=" + String(getRequest.length() + 2), ">");

 

  return sendCom(getRequest);

}

//-----------------------------ThingsSpeak Functions------

 

boolean sendThingPost(String key, int value)

{

  boolean success = true;

  String  Host = "api.thingspeak.com";

  String msg = "field1=" + String(value);

  success &= sendCom("AT+CIPSTART=\"TCP\",\"" + Host + "\",80", "OK");

 

  String postRequest = createThingPost("/update", key, msg);

 

  if (sendCom("AT+CIPSEND=" + String(postRequest.length()), ">"))

  {

    esp8266.print(postRequest);

    esp8266.find("SEND OK");

    if (!esp8266.find("CLOSED")) success &= sendCom("AT+CIPCLOSE", "OK");

  }

  else

  {

    success = false;

  }

  return success;

}

 

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 = "api_key=" + key + "&" + msg;

  xBuffer.replace("*URL*", url);

  xBuffer.replace("*LEN*", String( append.length()));

  xBuffer.replace("*APPEND*", 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 = "api_key=" + key;

  xBuffer.replace("POST", "GET");

  xBuffer.replace("*URL*", url);

  xBuffer.replace("*LEN*", String( append.length()));

  xBuffer.replace("*APPEND*", 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 = "api_key=" + key + "&" + msg;

 

  xBuffer.replace("POST", "GET");

  xBuffer.replace("*URL*", url);

  xBuffer.replace("*LEN*", String( append.length()));

  xBuffer.replace("*APPEND*", append);

 

  return xBuffer;

}

 

//-----------------------------------------Config ESP8266-

 

boolean espConfig()

{

  boolean success = true;

  esp8266.setTimeout(5000);

  success &= sendCom("AT+RST", "ready");

  esp8266.setTimeout(1000);

 

  if (configStation(SSID, PASSWORD)) {

    success &= true;

    debug("WLAN Connected");

    debug("My IP is:");

    debug(sendCom("AT+CIFSR"));

  }

  else

  {

    success &= false;

  }

  //shorter Timeout for faster wrong UPD-Comands handling

  success &= sendCom("AT+CIPMUX=0", "OK");

  success &= sendCom("AT+CIPMODE=0", "OK");

 

  return success;

}

 

boolean configTCPServer()

{

  boolean success = true;

 

  success &= (sendCom("AT+CIPMUX=1", "OK"));

  success &= (sendCom("AT+CIPSERVER=1,80", "OK"));

 

  return success;

 

}

 

boolean configTCPClient()

{

  boolean success = true;

 

  success &= (sendCom("AT+CIPMUX=0", "OK"));

  //success &= (sendCom("AT+CIPSERVER=1,80", "OK"));

 

  return success;

 

}

 

 

boolean configStation(String vSSID, String vPASSWORT)

{

  boolean success = true;

  success &= (sendCom("AT+CWMODE=1", "OK"));

  esp8266.setTimeout(20000);

  success &= (sendCom("AT+CWJAP=\"" + String(vSSID) + "\",\"" + String(vPASSWORT) + "\"", "OK"));

  esp8266.setTimeout(1000);

  return success;

}

 

boolean configAP()

{

  boolean success = true;

 

  success &= (sendCom("AT+CWMODE=2", "OK"));

  success &= (sendCom("AT+CWSAP=\"NanoESP\",\"\",5,0", "OK"));

 

  return success;

}

 

boolean configUDP()

{

  boolean success = true;

 

  success &= (sendCom("AT+CIPMODE=0", "OK"));

  success &= (sendCom("AT+CIPMUX=0", "OK"));

  success &= sendCom("AT+CIPSTART=\"UDP\",\"192.168.255.255\",90,91,2", "OK"); //Importand Boradcast...Reconnect IP

  return success;

 

//----------------------------------------Controll ESP-------

}

boolean sendUDP(String Msg)

{

  boolean success = true;

 

  success &= sendCom("AT+CIPSEND=" + String(Msg.length() + 2), ">");    //+",\"192.168.4.2\",90", ">");

  if (success)

  {

    success &= sendCom(Msg, "OK");

  }

  return success;

}

 

 

boolean sendCom(String command, char respond[])

{

  esp8266.println(command);

  if (esp8266.findUntil(respond, "ERROR"))

  {

    return true;

  }

  else

  {

    debug("ESP SEND ERROR: " + 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);

  }

}

Ende des Sketches

 

Hier noch eine Übersicht der verschalteten Teile (mit Corel Draw erstellt):

Die Led zeigt übrigens noch an, wie warm oder kalt das Wetter momentan ist. Man kann aufgrund der Led-Farbe entscheiden, ob man sich warm anziehen muß oder ob eine leichte Jacke oder ein T-Shirt genügt. (kalt=blau, grün=normal, rot=heiß, und das in unzähligen Farbvariationen (255x255x255 Farb-Variationen und Übergängen).

------------

 

 
 

    

 

 

 

 

 Campari-Kühler mit Arduino und Peltier-Modul

Die "Kreativ mit Technik-Zeitschrift"   hat meinen Campari Kühler in der Ausgabe 5/2016 2-seitig vorgestellt.

 

 

 

bearbeitet: 30.12.17