From 2133809f99861e4c17d33db6979804b67cf641f1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marcel=20St=C3=B6r?= Date: Sun, 24 Feb 2019 21:44:08 +0100 Subject: [PATCH] Calibrate NTP time and tune astronomy data --- esp8266-weather-station-color.ino | 55 ++++++++++++++++--------------- moonphases.h | 3 +- settings.h | 9 ++--- 3 files changed, 35 insertions(+), 32 deletions(-) diff --git a/esp8266-weather-station-color.ino b/esp8266-weather-station-color.ino index fd52791..3bf69eb 100644 --- a/esp8266-weather-station-color.ino +++ b/esp8266-weather-station-color.ino @@ -30,6 +30,7 @@ See more at https://blog.squix.org #include #include "TouchControllerWS.h" +#include "SunMoonCalc.h" /*** @@ -95,6 +96,7 @@ OpenWeatherMapCurrentData currentWeather; OpenWeatherMapForecastData forecasts[MAX_FORECASTS]; simpleDSTadjust dstAdjusted(StartRule, EndRule); Astronomy::MoonData moonData; +//SunMoonCalc::Moon moonData; void updateData(); void drawProgress(uint8_t percentage, String text); @@ -122,8 +124,6 @@ int frameCount = 3; int screenCount = 5; long lastDownloadUpdate = millis(); -String moonAgeImage = ""; -uint8_t moonAge = 0; uint16_t screen = 0; long timerPress; bool canBtnPress; @@ -180,7 +180,6 @@ void setup() { SPIFFS.format(); } drawProgress(100,"Formatting done"); - //SPIFFS.remove("/calibration.txt"); boolean isCalibrationAvailable = touchController.loadCalibration(); if (!isCalibrationAvailable) { Serial.println("Calibration not available"); @@ -269,18 +268,21 @@ void loop() { // Update the internet based information and update screen void updateData() { + time_t now; gfx.fillBuffer(MINI_BLACK); gfx.setFont(ArialRoundedMTBold_14); drawProgress(10, "Updating time..."); configTime(UTC_OFFSET * 3600, 0, NTP_SERVERS); - while(!time(nullptr)) { - Serial.print("#"); - delay(100); + while((now = time(nullptr)) < NTP_MIN_VALID_EPOCH) { + Serial.print("."); + delay(300); } + Serial.println(); + Serial.printf("Current time: %d\n", now); // calculate for time calculation how much the dst class adds. - dstOffset = UTC_OFFSET * 3600 + dstAdjusted.time(nullptr) - time(nullptr); + dstOffset = UTC_OFFSET * 3600 + dstAdjusted.time(nullptr) - now; Serial.printf("Time difference for DST: %d\n", dstOffset); drawProgress(50, "Updating conditions..."); @@ -303,12 +305,18 @@ void updateData() { drawProgress(80, "Updating astronomy..."); Astronomy *astronomy = new Astronomy(); - moonData = astronomy->calculateMoonData(time(nullptr)); - float lunarMonth = 29.53; - moonAge = moonData.phase <= 4 ? lunarMonth * moonData.illumination / 2 : lunarMonth - moonData.illumination * lunarMonth / 2; - moonAgeImage = String((char) (65 + ((uint8_t) ((26 * moonAge / 30) % 26)))); + moonData = astronomy->calculateMoonData(now); + moonData.phase = astronomy->calculateMoonPhase(now); delete astronomy; - astronomy = nullptr; + astronomy = nullptr; +//https://github.com/ThingPulse/esp8266-weather-station/issues/144 prevents using this +// // 'now' has to be UTC, lat/lng in degrees not raadians +// SunMoonCalc *smCalc = new SunMoonCalc(now - dstOffset, currentWeather.lat, currentWeather.lon); +// moonData = smCalc->calculateSunAndMoonData().moon; +// delete smCalc; +// smCalc = nullptr; + Serial.printf("Free mem: %d\n", ESP.getFreeHeap()); + delay(1000); } @@ -350,22 +358,20 @@ void drawTime() { if (IS_STYLE_12HR) { int hour = (timeinfo->tm_hour+11)%12+1; // take care of noon and midnight sprintf(time_str, "%2d:%02d:%02d\n",hour, timeinfo->tm_min, timeinfo->tm_sec); - gfx.drawString(120, 20, time_str); } else { sprintf(time_str, "%02d:%02d:%02d\n",timeinfo->tm_hour, timeinfo->tm_min, timeinfo->tm_sec); - gfx.drawString(120, 20, time_str); } + gfx.drawString(120, 20, time_str); gfx.setTextAlignment(TEXT_ALIGN_LEFT); gfx.setFont(ArialMT_Plain_10); gfx.setColor(MINI_BLUE); if (IS_STYLE_12HR) { sprintf(time_str, "%s\n%s", dstAbbrev, timeinfo->tm_hour>=12?"PM":"AM"); - gfx.drawString(195, 27, time_str); } else { sprintf(time_str, "%s", dstAbbrev); - gfx.drawString(195, 27, time_str); // Known bug: Cuts off 4th character of timezone abbreviation } + gfx.drawString(195, 27, time_str); // Known bug: Cuts off 4th character of timezone abbreviation } // draws current weather information @@ -433,7 +439,7 @@ void drawAstronomy() { gfx.setFont(MoonPhases_Regular_36); gfx.setColor(MINI_WHITE); gfx.setTextAlignment(TEXT_ALIGN_CENTER); - gfx.drawString(120, 275, moonAgeImage); + gfx.drawString(120, 275, String((char) (97 + (moonData.illumination * 26)))); gfx.setColor(MINI_WHITE); gfx.setFont(ArialRoundedMTBold_14); @@ -456,10 +462,12 @@ void drawAstronomy() { gfx.setColor(MINI_YELLOW); gfx.drawString(235, 250, SUN_MOON_TEXT[3]); gfx.setColor(MINI_WHITE); - gfx.drawString(235, 276, String(moonAge) + "d"); + float lunarMonth = 29.53; + // approximate moon age + gfx.drawString(235, 276, String(moonData.phase <= 4 ? lunarMonth * moonData.illumination / 2.0 : lunarMonth - moonData.illumination * lunarMonth / 2.0, 1) + "d"); gfx.drawString(235, 291, String(moonData.illumination * 100, 0) + "%"); - gfx.drawString(200, 276, SUN_MOON_TEXT[4] + ":"); - gfx.drawString(200, 291, SUN_MOON_TEXT[5] + ":"); + gfx.drawString(190, 276, SUN_MOON_TEXT[4] + ":"); + gfx.drawString(190, 291, SUN_MOON_TEXT[5] + ":"); } @@ -485,13 +493,6 @@ void drawCurrentWeatherDetail() { drawLabelValue(4, "Pressure:", String(currentWeather.pressure) + "hPa"); drawLabelValue(5, "Clouds:", String(currentWeather.clouds) + "%"); drawLabelValue(6, "Visibility:", String(currentWeather.visibility) + "m"); - - - /*gfx.setTextAlignment(TEXT_ALIGN_LEFT); - gfx.setColor(MINI_YELLOW); - gfx.drawString(15, 185, "Description: "); - gfx.setColor(MINI_WHITE); - gfx.drawStringMaxWidth(15, 200, 240 - 2 * 15, forecasts[0].forecastText);*/ } void drawLabelValue(uint8_t line, String label, String value) { diff --git a/moonphases.h b/moonphases.h index a20fc34..174c017 100644 --- a/moonphases.h +++ b/moonphases.h @@ -1,5 +1,7 @@ // Created by http://oleddisplay.squix.ch/ Consider a donation // In case of problems make sure that you are using the font file with the correct version! + +// Font face https://www.dafont.com/moon-phases.font const char MoonPhases_Regular_36[] PROGMEM = { 0x24, // Width: 36 0x25, // Height: 37 @@ -424,4 +426,3 @@ const char MoonPhases_Regular_36[] PROGMEM = { 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFE,0xFF,0xFF,0x3F,0x00,0xFE,0xFF,0xFF,0x3F,0x00,0xFE,0xFF,0xFF,0x3F,0x00,0xFE,0xFF,0xFF,0x3F,0x00,0x00,0x60,0x00,0x07,0x00,0x00,0x38,0x00,0x0E,0x00,0x00,0x1C,0x00,0x0E,0x00,0x00,0x1C,0x00,0x1C,0x00,0x00,0x0E,0x00,0x1C,0x00,0x00,0x0E,0x00,0x1C,0x00,0x00,0x0E,0x00,0x1C,0x00,0x00,0x0E,0x00,0x1E,0x00,0x00,0x1E,0x00,0x0F,0x00,0x00,0x7C,0xC0,0x0F,0x00,0x00,0xFC,0xFF,0x07,0x00,0x00,0xF8,0xFF,0x03,0x00,0x00,0xF0,0xFF,0x01,0x00,0x00,0xC0,0x3F, // 254 0x00,0x00,0x06,0x00,0x00,0x00,0x00,0x1E,0x00,0x00,0x00,0x00,0xFE,0x00,0x00,0x00,0x00,0xFE,0x07,0x00,0x00,0x00,0xFC,0x1F,0x00,0x00,0x38,0xE0,0xFF,0x00,0x00,0x38,0x00,0xFF,0x03,0x00,0x38,0x00,0xFC,0x1F,0x00,0x00,0x00,0xE0,0x3F,0x00,0x00,0x00,0x80,0x3F,0x00,0x00,0x00,0x80,0x3F,0x00,0x00,0x00,0xF0,0x0F,0x00,0x38,0x00,0xFC,0x01,0x00,0x38,0x80,0x7F,0x00,0x00,0x38,0xE0,0x1F,0x00,0x00,0x00,0xF8,0x03,0x00,0x00,0x00,0xFE,0x00,0x00,0x00,0x00,0x1E,0x00,0x00,0x00,0x00,0x06 // 255 }; - diff --git a/settings.h b/settings.h index 780afe9..b8675dd 100644 --- a/settings.h +++ b/settings.h @@ -25,8 +25,8 @@ See more at http://blog.squix.ch #define WIFI_PASS "yourpassw0rd" #define WIFI_HOSTNAME "ThingPulse-weather-station-color" -const int UPDATE_INTERVAL_SECS = 15 * 60; // Update every 10 minutes -const int SLEEP_INTERVAL_SECS = 0; // Going to Sleep after idle times, set 0 for dont sleep +const int UPDATE_INTERVAL_SECS = 10 * 60; // Update every 10 minutes +const int SLEEP_INTERVAL_SECS = 0; // Going to sleep after idle times, set 0 for insomnia // OpenWeatherMap Settings @@ -74,11 +74,12 @@ const boolean IS_METRIC = true; // Change for 12 Hour/ 24 hour style clock bool IS_STYLE_12HR = false; -// change for different ntp (time servers) +// change for different NTP (time servers) #define NTP_SERVERS "0.ch.pool.ntp.org", "1.ch.pool.ntp.org", "2.ch.pool.ntp.org" // #define NTP_SERVERS "us.pool.ntp.org", "time.nist.gov", "pool.ntp.org" - +// August 1st, 2018 +#define NTP_MIN_VALID_EPOCH 1533081600 // Pins for the ILI9341 #define TFT_DC D2