
What it is
Version 0.7.0 is out, with electricity prices, the generation mix and a reworked forecast.
For news, follow me on facebook, twitter, instagram, threads or mastodon.
MeteoPlaneRadar is a standalone WiFi device with a round touchscreen. Put it on a shelf next to your monitor and one glance tells you what is flying overhead, whether it is about to rain, what the next few days look like, what electricity is trading at right now and what the grid is running on. Plus a clock with the date and the weather. It runs on a single Waveshare ESP32-S3-Touch-LCD-2.1 or 2.8C board, nothing to solder or wire, and you do not have to program anything: the finished firmware flashes from your browser in a few dozen seconds and everything else is configured in a browser too.
Like this project? Going to build one? It is completely free. If you want to support me, buy me a coffee at buymeacoffee.com/chiptroncz
The device starts in Czech
Two ways to change that, and both stick across restarts.
- On the device: long-press the right half of the screen until you reach Nastaveni, the last screen in the cycle. Near the bottom, press the middle of the three wide buttons, labelled Jazyk: cestina. It turns into Language: English straight away.
- In a browser: open
http://meteoplaneradar.local/and use the language selector at the top right. The same selector is in the setup portal, so you can switch before anything else.
The built-in display font is 7-bit ASCII, so Czech is drawn without diacritics. English renders exactly as written.
Where do you want to go?
I am buying and building
What to buy · Case · Flash the firmware · Browser settings · Switch to English
I have one and want a newer version
Update over WiFi · What’s new
What it can do
Screens
I want to build on it
For developers · Where the data comes from · License · Community forks
Screens

One board, seven screens. You switch them with a long press on the left or the right, or from the browser.
Clock
Date, a large time, the current weather with temperature and rain, wind below it.
A seconds ring runs around the rim – off, dots, a continuous line or a comet with a fading tail. Clock and seconds colours are yours to set.
The weather comes from the same request as the forecast, so the clock costs not one extra connection. The device does not use NTP; the time is taken from the Date header of HTTP responses.
Aircraft
Traffic around you. The icon colour tells you the flight level, so at a glance you know whether something is descending to land nearby or just transiting an airway.
| Altitude | Colour | Typically |
|---|---|---|
| Below 2 km | Red | Approach and departure, helicopters, light aircraft |
| 2 to 6 km | Orange | Climb, descent, regional traffic |
| 6 to 10 km | Yellow | Lower cruise levels |
| 10 km and up | Blue | Long-haul cruise |
An aircraft not reporting its altitude is drawn grey, not red.

The route comes from the public adsb.lol database, which also checks it against the aircraft’s position. Anything that does not fit is not shown – an aircraft over Prague no longer picks up an Athens-Istanbul route just because a flight number got recycled.
Tap one for the detail panel: altitude, speed, track, climb rate, aircraft type, registration and where it is flying from and to. It updates live while it is open.
The device can watch for emergency squawks 7500, 7600 and 7700, filter by altitude and highlight a watched callsign in green.
You can rotate the map to match the view from your window, eight positions 45° apart, so an aircraft sits on the display where you see it in the sky.
Weather radar

The last six frames at five-minute intervals, looped, so you can see where the cloud is heading. Each frame carries its time, and there is an intensity legend in dBZ and mm/h down the side. Ranges are 25, 50, 100, 200 km and the whole Czech Republic.
The source is CHMI, sharper over Czechia, or RainViewer, which covers Europe and the world and is coarser. The legend switches with the source, because each radar has its own palette, and if you know it by heart you can turn it off in the browser and get a chunk of map back.
Forecast
At the top now and two three-hour windows labelled by the clock, for example 12-15h. A window sums the rain, takes the strongest wind and the worst icon, so it says something a single hour cannot.
Below the line, today and six more days with their dates. Each row has a vector icon derived from the WMO code, temperature, precipitation and wind.
Right at the bottom sit the European AQI, PM2.5 and the strongest pollen of alder, birch and grass, with the species named, because a number without the species would be useless. Pollen is a European product and does not appear elsewhere.
Electricity price
The spot price from the Czech day-ahead market. The day is a ring, midnight at the top, the hand points at the current block.
Prices are quarter-hourly, in the blocks the market actually trades in. The middle shows the price of the quarter-hour you are in, and below it the cheapest and the dearest block of the day with its time. A tap in the middle switches between today and tomorrow; tomorrow’s prices come out around 14:00.
If you want to save real money, run the power-hungry appliances while the ring is green. Washing machine, dishwasher, water heater, charging the car. That only holds if you are on a spot tariff, though – and most households are not. On an ordinary fixed rate it is an interesting number, not a schedule for doing the laundry.
The figure on the display is the exchange price, not what you pay. Distribution and your supplier’s margin go in on the Energy tab. This screen is Czech only and in Czech koruna, because the source serves no other market; with a location outside Czechia it switches itself off.
Generation
The ring shows what the grid is running on right now – nuclear, coal, gas, solar, wind, hydro, biomass. In the middle the renewable share, load and the cross-border balance.
You pick the country in the browser. The API covers Europe, so the screen works in Slovakia or Austria just as well, and there is an option for the whole EU.
The data is published with a delay of one to two hours, which is why the sample time is printed under the figures. It does not match the clock at the top, and it is not supposed to.
Settings
Only what makes sense to change at the device stayed on the display: brightness, map orientation, units, language. And the address where you find the rest.
How you control it
No buttons on the screen. You control the whole thing with a finger.
| Gesture | What it does |
|---|---|
| Swipe sideways | Changes the range on the aircraft and radar screens |
| Short tap | Selects an aircraft; on the clock, toggles day and night |
| Long press, left half | Previous screen |
| Long press, right half | Next screen |
| BOOT at startup (~3 s) | Factory reset |
There are six screens plus settings. Any of the six can be switched off in the browser – it is then skipped when cycling and its dot at the top disappears. Settings is always reachable. Both energy screens are off after an update.
And you never have to touch the glass at all. Screens and range can be switched from the browser.
What you need to buy
One board: Waveshare ESP32-S3-Touch-LCD-2.1, or the newer 2.8C. From LaskaKit for example, or Pájeníčko, who also sell an assembled kit.
- ESP32-S3R8, 8 MB PSRAM, 16 MB flash.
- Round IPS display 480×480, ST7701 controller over the RGB interface.
- CST820 capacitive touch on the 2.1, GT911 on the 2.8C.
- TCA9554 I/O expander driving reset, CS and display power.
Display and microcontroller are on one board. All you need is a USB-C cable.
The two boards are pin for pin identical and one binary runs on both. At boot the firmware asks the touch controller who it is and picks the display init sequence from the answer. You do not have to choose which file to flash.
3D-printed case

The recommended model is a case for the round Waveshare 2.1″ display with ESP32-S3. It was made for MeteoPlaneRadar and Radek B. sent it to me through the chiptron.cz Facebook page – many thanks for it.
It comes in two variants. The basic stand (Stojan__waveshare_2_1_ESP32-S3) and a version with openings for a USB-C cable at both connectors (Stojan__waveshare_2_1_ESP32-S3+kabel) – handy when the device is going to stay permanently powered.
If it does not suit you, the community has made others: a case by Michal Jeremenko on Thingiverse, an older model with a different display angle (both still need a printed spacer) and another model on Printables.
I bought a board and need to flash it

No Arduino IDE, no toolchain, no libraries. Chrome or Edge, a USB-C cable and a few minutes is all it takes.
You want the file with merged in its name. It contains the whole flash including its partitioning and it always works, even on a board that has never had anything on it.
- Download MeteoPlaneRadar_vX.ino.merged.bin from GitHub releases.
- Connect the board to the computer with a USB-C cable, into the connector marked USB.
- Open esp32flasher.chiptron.cz, pick ESP32-S3, pick the downloaded file and hit flash.
The flasher runs entirely in the browser over Web Serial, nothing gets installed. A few dozen seconds later the radar is on the display.
Then just the WiFi. The device brings up its own open network called MeteoPlaneRadar and shows a QR code on the display. Scan it with your phone, pick your home network, save, and that is it. The access point stays up until you enter a network.
You do not have to enter a location, it is detected from your IP address. If you enter one by hand it always wins, which is useful, because the IP location tends to be a fair way off. In the browser you just type a town name.
This method is called full programming. Use it for the first flash and whenever you are not sure or something is not working.
I have an older version and need to update
Since 0.6.0 you update over WiFi from a browser, with no cable and no computer next to the board.
You want the file that does NOT have merged in its name. That is the difference from the first flash, and it is the one thing people get wrong.
- Download MeteoPlaneRadar_vX.ino.bin from GitHub releases.
- Open http://meteoplaneradar.local/update. If mDNS does not work on your network, use the IP address from the Settings screen.
- Pick the file and upload it. You watch the progress in the browser.
The display goes dark during the update, that is fine. The RGB panel streams its framebuffer from PSRAM and flash writes cut its data off. It lights back up when the update finishes.
Your settings and the stored WiFi are kept. If the update fails, the device goes back to the previous version.
⚠️ On a version older than 0.4, not sure which one, or something stopped working after the update? Then flash the firmware over USB. It rewrites the whole flash and fixes it almost every time.
This method is called OTA.
Settings in a browser

The web interface runs permanently. Open http://meteoplaneradar.local/ or the IP address printed on the Settings screen.
The page is split into seven tabs so it works on a phone as well:
- Control – switch screens and range remotely, device status.
- Location – by hand, or by searching for a town name.
- Screens – what to show, auto-cycling, radar source.
- Appearance – day and night brightness, sun-driven night mode, seconds ring, colours.
- Aircraft – filters, squawks, watched callsign, map orientation, units.
- Energy – margin on top of the exchange price, VAT, and the country for the generation screen.
- System – password, firmware update, settings backup, restart, factory reset, data sources.
The status page reports IP, signal strength, uptime, free memory, the reason for the last restart and the outcome of the last fetch from every source. Diagnostics without a serial cable.
Password
There is no password by default, which leaves firmware update, settings import and factory reset open to anyone on your network.
You can set one on the System tab. It is stored in the clear, and a forgotten one can only be cleared by a factory reset, holding BOOT at startup, which also erases WiFi.
What’s new in 0.7.0
- Electricity price. A new screen with the spot price from the Czech day-ahead market on a dial, in quarter-hour blocks, today and tomorrow.
- Generation. A second new screen: what the grid is running on, the renewable share, load and the cross-border balance.
- Any European country for generation, or a summary for the whole EU.
- The forecast shows more. Instead of six hours and three days, it is now, two three-hour windows labelled by the clock, and today plus six more days.
- The clock follows your location, daylight saving included, so a board taken to America shows local time.
- The display shows °C instead of degC.
- An Energy tab in the browser with your own margin on top of the exchange price and VAT, so the number on the display matches your tariff.
- Data sources on the System tab – every service listed, with links.
Older news
- Support for the Waveshare 2.8C board, one binary runs on both the 2.1 and the 2.8C.
- Browser settings permanently at
meteoplaneradar.local, including finding your location by town name. - A clock screen with a large time, the weather and a seconds ring.
- A forecast screen with air quality and pollen.
- RainViewer as a second radar source, so the radar works outside Czechia too.
- Night mode driven by sunrise and sunset, with separate day and night brightness.
- Screens can be switched off and cycled automatically.
- English on the display, in the browser and in the setup portal.
- Emergency squawk alerts, altitude filters and a watched callsign.
- Firmware updates at the device’s normal address, with no separate WiFi network.
- The flight route is checked against the aircraft’s position, so an aircraft over Prague no longer picks up somebody else’s route.
- The project is entirely MIT, the last copyleft dependency is gone.
- Where the aircraft is flying from and to in the detail panel, with registration and type.
- A detailed European map with a finer Czech Republic.
- Map orientation follows your view from the window.
And that is thanks to you. Your ideas, your bug reports, your forks. Thank you all.
⚠️ Something not working after the update? Flash the firmware again using full programming over USB. It rewrites the whole flash including its partitioning and fixes it almost every time.
For developers
This part is only for those who compile the project in Arduino IDE. If you flashed the finished BIN, skip it.
PSRAM has to be set to OPI PSRAM, otherwise the display stays black with no other symptom. Then enable CDC on Boot and pick Flash Size 16 MB.
Set Partition Scheme to “Custom” – it uses the bundled partitions.csv with two app slots, so there is room for an over-the-air update. After compiling, check the log says of 6291456 bytes.

Libraries from the Library Manager: GFX Library for Arduino, PNGdec and ArduinoJson v7. QRCode is bundled with the project.
Where the data comes from
| Data | Source | Note |
|---|---|---|
| Aircraft, registration and type | adsb.fi | Free, no key, personal use |
| Flight route | adsb.lol | Free, no registration |
| Precipitation, Czechia | CHMI opendata | Attribution required |
| Precipitation, Europe and world | RainViewer | Free, no key, non-commercial |
| Weather, forecast, sun, time zone | Open-Meteo | Free, non-commercial, attribution required |
| Air quality and pollen | Open-Meteo Air Quality | Pollen for Europe only |
| Town search | Open-Meteo Geocoding | Free, non-commercial |
| Electricity price | spotovaelektrina.cz (OTE data) | Free, no registration, Czechia only |
| Electricity generation | Energy-Charts.info (Fraunhofer ISE) | CC BY 4.0, attribution required |
| Location | ip-api.com | Automatic detection by IP |
The aircraft radar and the RainViewer weather radar work anywhere; the map underlay covers EU-27 plus the UK, Switzerland and Norway. The electricity price is Czech only, because the source serves no other market. Generation works across Europe.
Treat the exchange prices as information, not as a basis for trading. The provider gives no warranty of reliability, availability or correctness.
Code and license
GitHub repository: github.com/petus/MeteoPlaneRadar
The firmware is under the MIT license. You can use it, change it and pass it on.
The details are in LICENSE.txt. The project was built with the help of Claude AI.
MIT does not cover the data. The map underlay is derived from Natural Earth (country borders, public domain) and GeoNames (cities, CC BY 4.0). The electricity generation data comes from Energy-Charts.info (Fraunhofer ISE), also under CC BY 4.0.
GeoNames, CHMI, RainViewer, Open-Meteo and Energy-Charts all require their source to be credited, and RainViewer asks for a link back on top of that. That is why 0.7.0 carries a list of every source, with links, on the System tab. A 480 × 480 display has no room for a legible line of URLs. In a fork, do not delete that panel – replace it.
One request beyond what the license asks for: if you build on this, keep the chiptron.cz line on the settings screen, in the same size and colour. It costs you nothing and it means something to me.
A note: this is a hobby project. I make no guarantee it will keep working in the future – I do it because I enjoy it.
Inspiration
This project did not come out of nowhere. It builds on three existing ones:
- MatixYo/ESP32-Plane-Radar – the original aircraft radar and the adsb.fi source
- Selbyl/ESP32-S30Touch-LCD-2.1_Plane-Radar – the port to Waveshare 480×480
- mylms/ESP-MeteoRadar – the CHMI precipitation radar
A fourth one joined them. CooLajz/waveshare-hodiny is not a fork of MeteoPlaneRadar but a separate project on the same board – a Czech Home Assistant dashboard built on LVGL.
It caught my eye enough that I borrowed several ideas from it: the clock screen, the seconds ring, sun-driven night mode and the web configuration.
Community forks
Waveshare multi-mode firmware


Michal published his version of MeteoPlaneRadar on github, combined with Ondřej’s clock.
Fork for the BigTreeTech Knomi V1

Vilém Kužel sent in his repo for the BigTreeTech Knomi V1 board – ESP32 classic and a round 1.28″ 240×240 GC9A01 over SPI.
github.com/Vilda007/MeteoPlaneRadar
Fork by OK1CDJ: APRS and PlatformIO

Ondra OK1CDJ took MeteoPlaneRadar 0.5.5 and improved it properly. And then it turned around: his version was the template for my 0.6.0.
RainViewer, the forecast screen, switching screens off, auto-cycling and English all went in following him. So things that were “extra at Ondra’s” not long ago are in both versions today.
What stays only in his:
- APRS stations (aprs.fi) – a map screen with the position of one configured station, the map centred on it, range changed by swiping. Age of the last position is colour-coded at the bottom, with speed and track for moving stations. Tap for a detail with distance and bearing from you. It needs a callsign and a free API key from aprs.fi (My Account → API key). I did not take this screen into my version.
- PlatformIO and a CI build – for those who compile the firmware themselves.
pio runand that is it.
GitHub: github.com/ok1cdj/MeteoPlaneRadar (Czech and English README). Ondra’s other things are at apps.ok1cdj.com.
Many thanks to Ondra for the APRS screen, for the PlatformIO conversion and for the inspiration.
You sent these over WhatsApp










