wordclock_esp8266
Software for a Wordclock based on ESP8266 and Neopixel LEDs with PONG, TETRIS, SNAKE game modes
Based on the work of Open Green Energy: First solar Zambretti Forecaster
git clone https://github.com/3KUdelta/Solar_WiFi_Weather_Station.git3KUdelta/Solar_WiFi_Weather_StationBased on the work of Open Green Energy. https://www.instructables.com/id/Solar-Powered-WiFi-Weather-Station-V20/ Authors of the base code: Keith Hungerford and Debasish Dutta - Excellent work, gentlemen!
After ~5 years of outdoor service, the HDC1080 humidity sensor in my reference station drifted to a permanent 100% reading. The polymer membrane on these sensors is consumable in outdoor conditions — chemical contamination, repeated condensation cycles and dust degrade them over time. V2.6 replaces the HDC1080 with the Sensirion SHT45 (the AD1B variant has a factory PTFE membrane, much better for outdoor use), and applies a 200 mW × 1 s heater pulse before every measurement to drive moisture out of the polymer. This dramatically improves long-term stability, especially in winter when humidity sits near saturation for weeks.
V2.6 also adds configurable sensor selection — you can now enable or disable each sensor (BME280, DS18B20, SHT45) directly in Settings26.h with simple #define switches, and choose which sensor is the canonical (primary) source for temperature and humidity. This makes the project usable with any subset of sensors you have on hand. The BME280 remains required because the project relies on its pressure sensor for the Zambretti forecast.
The Blynk connection is now non-blocking. Previous versions used Blynk.begin() which would hang the ESP and trigger a Soft WDT reset if the Blynk server was unreachable or the credentials were wrong. V2.6 uses Blynk.config() + Blynk.connect(5000) with a 5-second timeout instead — if Blynk fails, the station continues normally with MQTT. No more crashes due to Blynk server issues.
The translation system has been completely redesigned. The old monolithic Translation.h with duplicated summer/winter blocks per language is gone. Each language now lives in its own file (Translation_DE.h, Translation_EN.h, ...) and uses {P} and {E} template markers for precipitation words. Summer/winter switching (rain ↔ snow) happens automatically at runtime based on outdoor temperature — no more separate "DW" language blocks. Adding a new language is now just copying a ~80-line file and translating the strings.
Finally, several bugs and robustness issues that accumulated over the years have been fixed — see the full changelog below.
Solar_WiFi_Weather_Station/
├── Solar_WiFi_Weather_Station_v2_6.ino # Main sketch
├── Settings26.h # User configuration (sensors, WiFi, MQTT, language)
├── Translation_DE.h # German translation
├── Translation_EN.h # English translation
└── README.md
In Settings26.h, uncomment the language you want:
#include "Translation_DE.h" // #include "Translation_EN.h"
Summer/winter precipitation words (rain ↔ snow) switch automatically based on measured temperature with hysteresis around 1.5°C / 2.5°C. No manual configuration needed.
Translation_DE.h as Translation_XX.h{P} and {E} markers in placeLANG_PRECIP_P_SUMMER — generic precipitation noun (e.g. "pioggia", "pluie", "rain")LANG_PRECIP_P_WINTER — generic winter precipitation (e.g. "neve", "neige", "snow")LANG_PRECIP_E_SUMMER — precipitation event (e.g. "acquazzoni", "averses", "showers")LANG_PRECIP_E_WINTER — winter precipitation event (e.g. "nevicata", "chutes de neige", "snowfall")Settings26.h, add #include "Translation_XX.h" and comment out the old oneIn Settings26.h:
Full setup (all three sensors, recommended for outdoor reference station):
#define USE_BME280 1 #define USE_DS18B20 1 #define USE_SHT45 1 #define TEMP_SOURCE SRC_DAL // Dallas: best thermal buffering in sun #define HUMI_SOURCE SRC_SHT // SHT45: best long-term stability
BME280 only (entry-level, single sensor):
#define USE_BME280 1 #define USE_DS18B20 0 #define USE_SHT45 0 #define TEMP_SOURCE SRC_BME #define HUMI_SOURCE SRC_BME
Indoor setup (BME + SHT45, no Dallas needed):
#define USE_BME280 1 #define USE_DS18B20 0 #define USE_SHT45 1 #define TEMP_SOURCE SRC_SHT #define HUMI_SOURCE SRC_SHT
A companion project that monitors your weather station via MQTT and alerts you when something goes wrong. Runs on a second ESP8266 with a small OLED display, shows live weather data and blinks the onboard LED on alarm conditions (station offline, battery critical, humidity sensor stuck, DS18B20 bus error).
Repository: https://github.com/3KUdelta/Solar_Station_Watchdog
Hardware needed: Wemos D1 Mini + SSD1306 OLED 128×64 (~5 €). Powered by USB, runs continuously.
Dear Weather Station fans. For the ones who are using their Weather Station already from the start (we started 2019), the flash memory is probably getting at its end. Let's do a quick calculation for example: 5 years = 1'825 days. As we are doing 144 read/write cycles per day (all 10 Minutes) this results in 262'800 read/write clycles by now. Flash memory has a finite lifetime of about 100,000 write cycles (source: https://learn.adafruit.com/memories-of-an-arduino/arduino-memories#). Here we go. This is exactly what happened to my station. A flash write error causes the ESP8266 to loop for ever and sucking the battery empty. I discovered this just recently.
Easy fix:
Code has been changed in order to reduce writing to flash memory by a factor of 3. Updating is highly recommended. Get a new ESP8266 D1 mini Pro CH9102 16M (e.g. https://www.aliexpress.com/item/1005006018009983.html) for roughly a dollar incl. shipment.
Even better in V2.4+: Set MQTT = true in Settings — pressure curve is then stored on a retained MQTT topic instead of local flash. Effectively unlimited lifespan.
Running Blynk legacy will drain your battery and your device will stop working. Please update to new Blynk (free version works very well).
V2.6 note: The Blynk connection is now non-blocking. If the Blynk server is unreachable or your credentials are wrong, the station will continue normally instead of crashing with a Soft WDT reset. This was a common issue reported by users on V2.4.
Major changes:
Changes in V2.3
Changes in V2.31
Changes in V2.31 (MQTT version)
Changes in V2.32
Changes in V2.33
Changes in V2.34
Changes in V2.35
Changes in V2.4
Changes in V2.6
USE_* defines. Choose canonical temperature and humidity source with TEMP_SOURCE / HUMI_SOURCE. Compile-time validation catches invalid combinations. BME280 stays mandatory (pressure / Zambretti).Blynk.begin() replaced with Blynk.config() + Blynk.connect(5000). Station continues without Blynk if the server is unreachable. Blynk.virtualWrite() calls are now guarded by Blynk.connected().{P} / {E} template markers for precipitation words. Summer/winter switching is automatic. The old monolithic Translation.h with duplicated DE/DW blocks is gone. See "How to add a new language" above.Adafruit SHT4x Library (and its dependency Adafruit Unified Sensor). The old ClosedCube_HDC1080 library is no longer needed.getTemperature() was reading the same DS18B20 conversion 32 times in a row (no-op smoothing) — now performs a single proper 12-bit conversion.ReadFromMQTT() race condition could trigger an unwanted FirstTimeRun() and wipe the 6 h pressure curve when a retained message arrived late — now uses an event flag with 5 s timeout.exit(0) on SPIFFS failure left WiFi active and drained the battery — replaced with goToSleep(60).reconnect() now retries 3 times instead of giving up after one attempt.goToSleep() no longer publishes status when MQTT is disabled or not connected.yield() to prevent soft WDT reset on slow NTP servers.resetFunc() (jump to address 0) replaced with ESP.restart() everywhere — cleaner reset, no more Exception 4 on reboot.Print the box yourself: https://www.thingiverse.com/thing:3551386
New Blynk App Example (free widgets)

Monitoring your station: https://github.com/3KUdelta/Solar_Station_Watchdog
Showing the data on a LED display: https://github.com/3KUdelta/MDparola_MQTT_monitor
more like this
Software for a Wordclock based on ESP8266 and Neopixel LEDs with PONG, TETRIS, SNAKE game modes
Fetch NCDC ISD, TMY3, or CZ2010 weather data that corresponds to ZIP Code Tabulation Areas or Latitude/Longitude.
search projects, people, and tags