Benutzer-Werkzeuge

Webseiten-Werkzeuge


projekte:homecomfort

Dies ist eine alte Version des Dokuments!


LED Uhr

—- datatemplateentry project —- template : templates:project # Kurzer Name des Projekts name : LED Uhr mit Wetter- und Towel Day Anzeige

# Bilddateiname relativ zum Ordner projekte: # Wenn (noch) kein Bild vorhanden, bitte none.png lassen imgname_img90 : none.png

# Links zu Seiten der Mitglieder, die am Projekt beteiligt sind, also intern:mitglieder:hubert (mehrere mit Komma getrennt) person_pages : mancas, marco

# Start- und Enddatum im Format JJJJ-MM-TT start_dt : 29.04.2020 end_dt :

# Aktueller Status des Projekts, z.B. fertig, in Arbeit, eingestellt, Idee, … status_ : in Arbeit


Marco hatte diese Uhr nach einer Idee von bastelgarage.ch Donnerstags zu unserem Linux Vereinstreffen mitgebracht. https://www.youtube.com/watch?v=BMY3TZdeMGw

Das machte Lust dieses Projekt nachzubauen, da es ein schönes Beispiel ist für:

Code schreiben für den ESP8266 Ansteuerung einer 8×8-LED Anzeige Text rollt über die Anzeige Einwählen ins WLAN Uhrzeit wird vom Zeitserver abgeholt Wetter kommt von openweathermap.org Variablen für den Programmcode werden aus einem Json-File aufbereitet Gut zum Lernen und ausbaufähig zum kreativen Umsetzen mit eigenen Ergänzungen im Code.

LED-Uhr-Orig

Macht sich gut in einem schönen Gehäuse! LED-Uhr-Zeit

LED-Uhr-Innen

So wird angepasst Die Wetteranzeige hatte bei mir leider nicht funktionniert. Daher wurde das Script auf die Library ESP8266HTTP umgestellt.

Modifiziertes Script von https://techtutorialsx.com/2016/07/17/esp8266-http-get-requests/ replaces getWeatherData()

added by mancas #include <ESP8266WiFi.h> #include <ESP8266HTTPClient.h> void getMetarData () { String line; if (WiFi.status() == WL_CONNECTED) { Check WiFi connection status

HTTPClient http; Declare an object of class HTTPClient http.begin(„http://api.openweathermap.org/data/2.5/weather?id=xxxx&units=metric&appid=xxxxxx&lang=de“); Specify request destination

int httpCode = http.GET(); Send the request Serial.print(„ - httpCode is “); Serial.println(httpCode); if (httpCode > 0) { Check the returning code

String payload = http.getString(); Get the request response payload Serial.print(„ - Response from Server “); Serial.println(payload); Print the response payload

line += payload; to let the rest of the script untouched Serial.println(line); http.end(); Close connection }

Allocate JsonBuffer Leh

// Use arduinojson.org/assistant to compute the capacity.
const size_t capacity = JSON_ARRAY_SIZE(2) + JSON_OBJECT_SIZE(1) + 2*JSON_OBJECT_SIZE(2) + 2*JSON_OBJECT_SIZE(4) + JSON_OBJECT_SIZE(5) + JSON_OBJECT_SIZE(6) + JSON_OBJECT_SIZE(12) + 420;
DynamicJsonBuffer jsonBuf(capacity);

DynamicJsonBuffer jsonBuf; JsonObject &root = jsonBuf.parseObject(line); if (!root.success()) { Serial.println(„parseObject() failed“); return; } weatherMain = root[„weather“][„main“].as<String>();

weatherDescription = root["weather"]["description"].as<String>();
weatherDescription.toLowerCase();
//  weatherLocation = root["name"].as<String>();
//  country = root["sys"]["country"].as<String>();
temp = root["main"]["temp"];
humidity = root["main"]["humidity"];
pressure = root["main"]["pressure"];
tempMin = root["main"]["temp_min"];
tempMax = root["main"]["temp_max"];
windSpeed = root["wind"]["speed"];
windDeg = root["wind"]["deg"];
clouds = root["clouds"]["all"];

getTimeLocal();

String windDirection = "N NOO SOS SWW NW";  // Windrichtungen N NO O SO S SW W NW immer 2 char lang
int wr = (windDeg+22)%360/45;

Serial.println(wr); String dayName[] = {„Err“, „Sonntag“, „Montag“, „Dienstag“, „Mittwoch“, „Donnerstag“, „Freitag“, „Samstag“}; For test purposes String(d) = „25“; String(m) = „5“; w = 2; was monday in year 2020

String deg = String(char('~' + 25));
String arrowUp = String(char('~' + 23));

if (String(d) == "25" and String(mo) == "5") {
  weatherString = "       " + dayName[w]  + "  " + String(d) + "." + String(mo) + ".  Towel Day!      ";
} else {
  weatherString = "       " + dayName[w]  + "  " + String(d) + "." + String(mo) + "." + String(ye) + "     ";
}
weatherString +=   String(temp, 1) + deg + "C ";
weatherString += "  Luftf.: " + String(humidity) + "%  ";  // Luftfeuchtigkeit
weatherString += "  Luftd: " + String(pressure) + "hPa  "; // Luftdruck
weatherString += "  Regenrisiko: " + String(clouds) + "%  "; // Regenrisiko

weatherString += „ Wind: “ + String(windSpeed, 1) + „m/s “; Windgeschwindigkeit

weatherString += "  Wind: " + String(windSpeed, 1) + "m/s  "; // Windgeschwindigkeit
weatherString += String(windDeg) + deg + "  ";
weatherString +=  arrowUp + "  " + windDirection.substring(2*wr,2*wr+2) + "    "; // Windgeschwindigkeit und Richtung
Serial.println(weatherString);  //Leh

}

} LED-Uhr-Wetter-mp4

Towel Day Die Uhr kann natürlich auch an Geburtstage und andere wichtige Termine erinnern. Eine einfache Abfrage im Script machts möglich. Das Beispiel für den Nerd: Towel Day am 25.05. ist in obigem Script eingebaut.

Live Anzeige vom Textserver Andere Variante für Live-Anzeige: In meinem Laptop habe ich einen Webserver aufgesetzt. Dieser wird abgefragt und der dort gepostete Satz angezeigt.

void getLocalWebData () {

String Line;

if (WiFi.status() == WL_CONNECTED) { Check WiFi connection status HTTPClient http; Declare an object of class HTTPClient

http.begin(„http://192.168.63.6“); Specify request destination int httpCode = http.GET(); Send the request Serial.print(„ - httpCode is “); Serial.println(httpCode);

if (httpCode > 0) { Check the returning code Line = http.getString(); Get the request response payload

Serial.print(„ - Response from localWebServer “); Serial.println(Line); Print the response payload WebLine = „ “ + Line + „ “; http.end(); Close connection

} }

getTimeLocal();

Serial.println(WebLine); Leh } Zum Abschluß eine Wortuhr Schließlich wurde die Uhr auf reine Textanzeige umgestellt. Die Anzeige ist für Slowdown-Nerds: “Es ist so viertel nach Zehn” ist ein Beispiel dazu. Sprachausgabe der Uhrzeit

int Stunde; String MinutenText; String StundenText;

void WordClock () {

getTimeLocal();
Serial.println("Wordclock ");

if (h > 12) {Stunde = h-12;} else {Stunde = h;}

Serial.print(Stunde); Serial.print(„ : “); Serial.println(m); if (m == 0) {MinutenText = „genau “;} if (m > 0) {MinutenText = „kurz nach “;} if (m > 2) {MinutenText = „funf nach “;} if (m > 7) {MinutenText = „zehn nach “;} if (m > 12) {MinutenText = „viertel nach “;} if (m > 17) {MinutenText = „zwanzig nach “;} if (m > 22) {MinutenText = „funf vor halb “; Stunde = Stunde + 1;} if (m > 27) {MinutenText = „halb “;} if (m > 32) {MinutenText = „funf nach halb “;} if (m > 37) {MinutenText = „zwanzig vor “;} if (m > 42) {MinutenText = „viertel vor “;} if (m > 47) {MinutenText = „zehn vor “;} if (m > 52) {MinutenText = „funf vor “;} if (m > 57) {MinutenText = „gleich “;} if (Stunde == 1) {StundenText = „eins“;} if (Stunde == 2) {StundenText = „zwei“;} if (Stunde == 3) {StundenText = „drei“;} if (Stunde == 4) {StundenText = „vier“;} if (Stunde == 5) {StundenText = „funf“;} if (Stunde == 6) {StundenText = „sechs“;} if (Stunde == 7) {StundenText = „sieben“;} if (Stunde == 8) {StundenText = „acht“;} if (Stunde == 9) {StundenText = „neun“;} if (Stunde == 10) {StundenText = „zehn“;} if (Stunde == 11) {StundenText = „elf“;} if (Stunde == 12) {StundenText = „zwolf“;} Serial.print(MinutenText); Serial.println(StundenText); TimeString = „ Es ist so “ + MinutenText + StundenText + „ “; Serial.println(TimeString); } Viel Spaß beim Mitmachen wünscht mancas!

projekte/homecomfort.1611333873.txt.gz · Zuletzt geändert: 2021/01/22 16:44 von mancas

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki