Hodiny, radar letadel, srážkový meteoradar, předpověď počasí a ceny elektřiny na kulatém dotykovém displeji. Běží na deskách Waveshare ESP32-S3-Touch-LCD-2.1 a ESP32-S3-Touch-LCD-2.8C a nastavuje se z prohlížeče.
Vyvíjí chiptron.cz a Claude AI. English version: README_EN.md
Líbí se ti tenhle projekt? Jdeš do něj? Je totiž kompletně zdarma. Podpořit mě ale můžeš, pokud chceš, tím, že mi koupíš kafe na https://buymeacoffee.com/chiptroncz
| Obrazovka | Co ukazuje | Zdroj |
|---|---|---|
| Hodiny | čas, datum, počasí, vteřinový prstenec | Open-Meteo |
| Letadla | letadla v okolí s ikonou podle typu, detail letu včetně trasy | adsb.fi, adsb.lol |
| Meteoradar | animovaná srážková situace | ČHMÚ, ČHMÚ masked nebo RainViewer |
| Předpověď | nyní, +3 h, +6 h, dnes, zítra, pozítří a další dny, ovzduší a pyl | Open-Meteo |
| Cena elektřiny | spotová cena na 24hodinovém ciferníku, dnes i zítra | OTE přes spotovaelektrina.cz |
| Výroba ČR | z čeho se právě vyrábí, podíl OZE, spotřeba, vývoz | ENTSO-E přes energy-charts |
| Nastavení | jas, orientace mapy, jednotky, jazyk | — |
Prvních šest jde vypnout, Nastavení je dostupné vždy. Rozhraní je česky nebo anglicky. Písmo pro celý displej se volí na webu: vyhlazené Inter, Poppins, Inter tenké (s diakritikou), nebo původní pixelové.
Obě energetické obrazovky jsou po aktualizaci vypnuté (zapnou se ve webovém nastavení) a dokud jsou vypnuté, zařízení si o jejich data vůbec neřekne. Zobrazená cena je burzovní, ne to, co platíte — vlastní přirážku a DPH si lze doplnit na záložce Energie, viz CHANGELOG.
Waveshare ESP32-S3-Touch-LCD-2.1 nebo ESP32-S3-Touch-LCD-2.8C — ESP32-S3R8 (8 MB PSRAM, 16 MB flash), kulatý displej 480×480 s řadičem S T7701, expandér TCA9554. Dotyk je CST820 (2.1), respektive GT911 (2.8C). Stačí deska a USB-C kabel, nic se nepájí.
Obě desky jsou pinově totožné a jedna binárka běží na obou — firmware se při
startu zeptá dotykového řadiče, kdo je, a podle toho zvolí inicializaci panelu
i časování. Na kterou desku se rozhodl, ukazuje sériový výpis při startu a
stavová tabulka na webu. Kdyby to na vaší desce určilo špatně (typicky vadný
dotykový řadič), dá se to napevno vnutit přes BOARD_FORCE v Config.h.
- Nahrajte firmware (viz níže) a zapněte desku.
- Připojte se k otevřené síti
MeteoPlaneRadar— na displeji je QR kód. - Otevřete
http://192.168.4.1/, vyberte svou WiFi a uložte.
Přístupový bod zůstane aktivní, dokud síť nezadáte. Potom najdete nastavení na
http://meteoplaneradar.local/ nebo na IP adrese, která je vypsaná na
obrazovce Nastavení.
Web běží trvale. Nastavíte v něm polohu (i vyhledáním města), které obrazovky zobrazovat a jestli se mají střídat, zdroj meteoradaru, jazyk, denní a noční jas, vzhled hodin, filtry letadel a upozornění na nouzové squawky. Je tam i dálkové ovládání (přepínání obrazovek a rozsahu bez dotyku displeje), stavová stránka, export a import nastavení a aktualizace firmwaru.
Většina položek se ukládá hned po změně. Tlačítko Uložit zůstává jen pro polohu, výběr obrazovek a zdroj meteoradaru — ty vyžadují restart zařízení.
Heslo je nepovinné a ve výchozím stavu žádné není — aktualizace firmwaru,
import nastavení i tovární reset jsou hned po nahrání přístupné komukoli, kdo se
dostane na adresu zařízení. Nastavíte ho v záložce Systém: pole Současné heslo
necháte poprvé prázdné a vyplníte jen Nové heslo. Jedna mezera v Novém hesle
ochranu zase zruší. Uživatelské jméno na stránce /update je admin.
Heslo se ukládá v čitelné podobě. Aktualizační stránka používá HTTP Basic a knihovně se musí předat skutečné heslo, takže otisk tam použít nelze — hashovat kopii v NVS, když vedle leží totéž otevřeně, by bylo jen divadlo. Chrání to před domácností, ne před někým, kdo si přečte flash nebo odposlouchává síť.
Zapomenuté heslo jde zrušit jedině podržením tlačítka BOOT při startu (~3 s). To provede tovární reset, takže smaže i WiFi a všechna ostatní nastavení.
| Gesto | Akce |
|---|---|
| Přejetí prstem | změna rozsahu (letadla, meteoradar) |
| Krátké klepnutí | výběr letadla / přepnutí den–noc na hodinách |
| Dlouhý stisk vlevo / vpravo | předchozí / následující obrazovka |
| BOOT při startu (~3 s) | tovární reset |
Na obrazovce Nastavení se řádkem Nahore volí, který světový směr je nahoře
na radaru letadel — tedy směr, kterým se díváte z okna. Meteoradar se záměrně
neotáčí.
ČHMÚ je ostřejší, ale pokrývá jen ČR a okolí — s polohou v zahraničí zůstane obrazovka prázdná. Ukazuje všechno, co radary vidí, plnou barvou.
ČHMÚ masked je tentýž snímek, ale ČHMÚ ho porovná s měřením ve výšce 2 km: plnou barvou jsou jen místa, kde srážky opravdu dopadají na zem, zbytek (srážky, které se cestou vypaří, kovadliny vzdálených bouřek) je bledší. Na otázku „bude u nás pršet?“ odpovídá přesněji, pro sledování bouřek je lepší plný ČHMÚ. RainViewer pokrývá Evropu i svět. Jeho dlaždice končí na zoomu 7, takže bližší rozsahy se skládají ze zoomu 7 zvětšeného mocninou dvojky; obraz je hrubší, ale víc detailu RainViewer nemá. Stahuje se postupně — nejdřív nejnovější snímek, animace se dotáhne na pozadí. Legenda se přepíná spolu se zdrojem, protože každý má vlastní paletu.
Dvě volby na záložce Obrazovky dělají ze střídání něco chytřejšího:
- Meteoradar jen při bouřce — meteoradar se do střídání přidá, jen když je do zadané vzdálenosti (výchozí 50 km) odraz aspoň zadané síly (výchozí 20 dBZ). Kontroluje se každých 5 minut nejnovější snímek ČHMÚ. Po dvou klidných snímcích meteoradar zase vypadne. Funguje i s jinak vypnutou obrazovkou Meteoradar.
- Letadla jen když je letadlo poblíž — obrazovka Letadla se sama nestřídá, ale když se letadlo přiblíží na zadanou vzdálenost (výchozí 5 km), ukáže se na zadanou dobu (výchozí 15 s) i s otevřeným detailem a pak se pokračuje tam, kde se skončilo. Každé letadlo jednou za 15 minut.
Výhled z okna (záložka Letadla): směr okna, šířka výhledu a dohled. Letadlo ve výhledu má při upozornění přednost před bližším letadlem, které z okna vidět není. Výseč se zakreslí do radaru letadel.
Všechny tyto limity se ukládají, přežijí restart a jsou v exportu i importu nastavení.
Zařízení si pamatuje až tři sítě. Zapisují se v záložce Ovládání a jdou zadat i když síť zrovna není v dosahu. Při startu se zkusí nejsilnější dosažitelná, po výpadku spojení se po minutě projdou ostatní.
⚠ Tato funkce nebyla vyzkoušena se skutečným Home Assistantem. Formát odpovídá dokumentaci integrace RESTful, ale ověřený zatím není. Pokud něco nesedí, dejte vědět.
Zařízení umí Home Assistantu nabídnout svá data. Funguje to opačně, než by se čekalo: Home Assistant si data sám stahuje z adresy
http://meteoplaneradar.local/api/ha
(nebo z IP adresy zařízení). Nepotřebujete MQTT, broker ani doplněk — stačí integrace RESTful, která je v Home Assistantu vestavěná. Postup:
- Ve webovém nastavení zařízení na záložce Home Assistant zaškrtněte Zpřístupnit data pro Home Assistant.
- Zkopírujte z té záložky připravený blok a vložte ho do
configuration.yamlv Home Assistantu. - Restartujte Home Assistant. Objeví se senzory
MPR Teplota,MPR Bourka,MPR Nejblizsi letadloa další.
Odpověď vypadá takhle (zkráceno):
{
"temperature": 12.4, "wind_kmh": 14, "precip_mm": 0, "weather_code": 3,
"today_min": 6.1, "today_max": 14.8, "sunrise": "06:41", "sunset": "16:52",
"screen": "clock",
"storm": { "active": false, "max_dbz": 16, "nearest_km": null, "frame": "10:05" },
"aircraft": { "count": 3, "alert": false, "callsign": "CSA1234", "type": "A20N",
"kind": "narrow-body", "distance_km": 4.2, "altitude_m": 3200,
"in_window": true },
"price_czk_kwh": 2.41, "renewable_pct": 18.5
}Data jsou jen ke čtení a bez hesla — neříkají nic, co by nebylo vidět na displeji. Dokud je funkce zapnutá, zařízení hlídá bouřku (jeden snímek ČHMÚ za 5 minut) a letadla poblíž (malý dotaz jednou za 30 s), aby čísla byla živá.
Proč ne MQTT: potřebovalo by broker v síti, další knihovnu a nastavování
přihlašovacích údajů. REST stačí na čtení a jde nastavit jen vložením textu.
Kdyby se ukázalo, že je potřeba i ovládání z Home Assistantu, existující
adresy /api/screen a /api/range jde volat přes rest_command.
Čas se bere z hlavičky Date odpovědí, které zařízení stahuje tak jako tak.
Neprochází UDP portem 123, nedá se zvlášť zablokovat a nečeká se na něj při
startu. Časové pásmo je v TZ_INFO v Config.h.
Přes USB (první nahrání a záchrana): stáhněte *.merged.bin z Releases,
připojte desku do konektoru USB a nahrajte na
esp32flasher.chiptron.cz v Chrome nebo Edge.
Přes WiFi: stáhněte *.ino.bin (bez merged) a nahrajte na
http://meteoplaneradar.local/update. Displej během zápisu zhasne — RGB panel
čte obraz z PSRAM a zápis do flash mu data odřezává. Po dokončení se rozsvítí.
Podrobnosti v OTA_NAVOD.md.
Arduino IDE, ESP32 core 3.x (přeloženo s 3.3.10), knihovny: GFX Library
for Arduino (≥ 1.5.3, přeloženo s 1.6.9), PNGdec (≥ 1.1.4, přeloženo
s 1.1.7), ArduinoJson v7, QRCode (přibalen).
WebServer, DNSServer, ESPmDNS, Update a Preferences jsou v core.
WiFiManager se nepoužívá od 0.6.0, ElegantOTA od 0.6.2.
Nastavení IDE: ESP32S3 Dev Module, PSRAM: OPI, Flash 16 MB QIO,
Partition Scheme: Custom (partitions.csv, dvě aplikační oblasti pro OTA),
USB CDC On Boot: Enabled. Nebo arduino-cli compile --profile default MeteoPlaneRadar.
MeteoPlaneRadar.ino správce obrazovek, dotyk, hlavní smyčka
Config.h laditelné konstanty
Settings.* nastavení v NVS + JSON pro web
Lang.* české a anglické řetězce
Layout.* pásy obrazovky a hlídání kolizí
WebConfig.* WebPage.h webový server, API, portál, OTA
Net.* sdílené HTTPS stahování
Forecast.* Open-Meteo: předpověď, slunce, ovzduší
Energy.* spotová cena elektřiny a mix výroby ČR
RainViewer.* dlaždicový radar
StormWatch.* hlídání bouřky ze snímku ČHMÚ (0.8.0)
PlaneWatch.* hlídání letadel poblíž a výhledu z okna (0.8.0)
PlaneIcon.* ikony letadel podle typu (0.8.0)
AAFont.* ClockFonts.h vyhlazené písmo hodin (0.8.0)
Screen*.{h,cpp} jednotlivé obrazovky
tools/make_fonts.py generátor ClockFonts.h z TTF/OTF
Proč se prvky nepřekrývají: obrazovka si své pásy zabere dřív, než se kreslí
mapa. Cokoli umístěného podle dat (popisky měst, callsigny) si pak musí místo
vyžádat, a když je zabrané, nekreslí se vůbec. Konstanty LY_* v Layout.h
drží stejné prvky na stejných řádcích napříč obrazovkami.
Sériový výpis 115200 Bd přes konektor USB. Totéž bez kabelu je na stavové stránce webu.
Jen pro osobní nekomerční použití — respektujte podmínky poskytovatelů.
Letadla, registrace a typ: adsb.fi · trasy: adsb.lol ·
srážky ČR: ČHMÚ ·
srážky svět: RainViewer ·
počasí, ovzduší, geokódování: Open-Meteo ·
ceny elektřiny: OTE-ČR přes spotovaelektrina.cz ·
výroba elektřiny: ENTSO-E přes energy-charts (Fraunhofer ISE) ·
poloha podle IP: ip-api.com ·
mapa: hranice Natural Earth (public domain), města GeoNames (CC BY 4.0) ·
čas: hlavička Date (bez NTP) ·
rozdělení ikon letadel: ADS-B Radar
- Pájeníčko.cz
- Podpora desky Waveshare ESP32-S3-Touch-LCD-2.8C. Deska se pozná při startu podle dotykového řadiče, takže jedna binárka běží na 2.1 i na 2.8C a nikdo nemusí vybírat, který soubor nahrát.
- Legendu na meteoradaru jde skrýt — přepínač ve webovém nastavení.
- ok1cdj/MeteoPlaneRadar — fork Ondry OK1CDJ; odtud pochází nápad na RainViewer, obrazovku předpovědi, volitelné obrazovky a jejich střídání
- CooLajz/waveshare-hodiny — Home Assistant dashboard na stejné desce; inspirace pro hodiny, vteřinový prstenec, noční režim a webovou konfiguraci
- MatixYo/ESP32-Plane-Radar — původní radar letadel a zdroj adsb.fi
- Selbyl/ESP32-S30Touch-LCD-2.1_Plane-Radar — port na Waveshare 480×480
- mylms/ESP-MeteoRadar — srážkový meteoradar ČHMÚ
MIT — viz LICENSE.txt. Vztahuje se na zdrojový kód i na binárky z něj přeložené. Od 0.6.2 v projektu není žádná copyleftová závislost.
Písma hodin (Inter, Poppins) jsou pod licencí SIL Open Font License 1.1, která vložení do firmwaru dovoluje. Přiřazení typů letadel k ikonám vychází ze schématu adsb-radar.com.
Na data se MIT nevztahuje. GeoNames, ČHMÚ, RainViewer a
Open-Meteo vyžadují uvedení zdroje; Open-Meteo a adsb.fi mají bezplatné
API určené jen pro nekomerční použití. Podrobnosti jsou v LICENSE.txt —
přečtěte si ho celý, než to nasadíte komerčně.
Nad rámec licence budeme rádi, když na obrazovce nastavení ponecháte řádek chiptron.cz.
Historie změn: CHANGELOG.md. Verze: MeteoPlaneRadar/Version.h.
