Opens in a new tab

Weather radar and aircraft radar on one round display

In short: MeteoPlaneRadar is a device on a round 2.1" Waveshare ESP32-S3-Touch-LCD-2.1 or 2.8C display with seven screens: clock, aircraft from adsb.fi, an animated weather radar (CHMI, or RainViewer outside Czechia), a forecast with air quality and pollen, the spot electricity price from the Czech day-ahead market and the generation mix from Energy-Charts. Everything is configured in a browser at meteoplaneradar.local – including switching the interface from Czech to English. You flash the firmware without programming at esp32flasher.chiptron.cz and update it over WiFi afterwards. Current version is 0.7.0, the code is MIT.

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.

AltitudeColourTypically
Below 2 kmRedApproach and departure, helicopters, light aircraft
2 to 6 kmOrangeClimb, descent, regional traffic
6 to 10 kmYellowLower cruise levels
10 km and upBlueLong-haul cruise

An aircraft not reporting its altitude is drawn grey, not red.

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.

GestureWhat it does
Swipe sidewaysChanges the range on the aircraft and radar screens
Short tapSelects an aircraft; on the clock, toggles day and night
Long press, left halfPrevious screen
Long press, right halfNext 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.

  1. Download MeteoPlaneRadar_vX.ino.merged.bin from GitHub releases.
  2. Connect the board to the computer with a USB-C cable, into the connector marked USB.
  3. 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.

  1. Download MeteoPlaneRadar_vX.ino.bin from GitHub releases.
  2. Open http://meteoplaneradar.local/update. If mDNS does not work on your network, use the IP address from the Settings screen.
  3. 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

DataSourceNote
Aircraft, registration and typeadsb.fiFree, no key, personal use
Flight routeadsb.lolFree, no registration
Precipitation, CzechiaCHMI opendataAttribution required
Precipitation, Europe and worldRainViewerFree, no key, non-commercial
Weather, forecast, sun, time zoneOpen-MeteoFree, non-commercial, attribution required
Air quality and pollenOpen-Meteo Air QualityPollen for Europe only
Town searchOpen-Meteo GeocodingFree, non-commercial
Electricity pricespotovaelektrina.cz (OTE data)Free, no registration, Czechia only
Electricity generationEnergy-Charts.info (Fraunhofer ISE)CC BY 4.0, attribution required
Locationip-api.comAutomatic 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:

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 run and 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

You are asking

Do I need my own ADS-B receiver?

No. The aircraft data comes from adsb.fi, which aggregates feeds from thousands of volunteer receivers. WiFi is all you need.

The device is in Czech, how do I switch it to English?

Two ways, 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, then press the middle of the three wide buttons, labelled Jazyk: cestina. In a browser: open 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.

Which file do I download, the one with merged or the one without?

With merged for a board you are flashing for the first time, over USB. Without merged when MeteoPlaneRadar is already running on the board and you are updating it over WiFi. That single distinction is the most common mistake people make.

Do I need to know how to program?

No. There is a finished BIN file you flash straight from the browser at esp32flasher.chiptron.cz. No Arduino IDE, no libraries, just Chrome or Edge and a USB-C cable.

How do I update to a newer version?

Since 0.6.0, over the air at the device's normal address: open http://meteoplaneradar.local/update and upload MeteoPlaneRadar_vX.ino.bin, the one without "merged". No separate WiFi network is needed. On a version older than 0.4 you have to flash the file with "merged" over USB once first.

Something stopped working after the update, what now?

Flash the firmware again using full programming over USB, that is the file with "merged" and esp32flasher.chiptron.cz. It rewrites the whole flash including its partitioning and fixes it almost every time.

What hardware does it need?

One Waveshare ESP32-S3-Touch-LCD-2.1 board, or the newer 2.8C: a round 480×480 IPS display with an ST7701 controller and an ESP32-S3 on the same board. The two are pin for pin identical and one binary runs on both, so you do not have to pick which file to flash. Nothing to solder or wire.

Why is there no route shown for an aircraft?

Either the aircraft does not offer one, or the device does not trust it. The route is looked up by callsign in a public database of scheduled flights and the server checks it against the aircraft's position, so anything that does not fit is not shown. An aircraft that broadcasts no callsign at all, often private and military, is never asked about. Fewer routes appear, but the ones that do are right.

Does the weather radar work outside Czechia?

Yes, since 0.6.0. Besides CHMI you can switch to RainViewer in the browser, which covers Europe and the world, also free and without a key. CHMI stays the default and is sharper over Czechia, but its data ends just past the border. The aircraft radar works anywhere.

Does the electricity price show what I actually pay?

No, the display shows the exchange price from the Czech day-ahead market. Distribution, regulated components and your supplier's margin go in on the Energy tab in the browser. Timing appliances by it only makes sense on a spot tariff; on an ordinary fixed rate it is just an interesting number. The screen is Czech only and switches itself off with a location outside Czechia.

Which countries does the generation screen cover?

Any European country, or a summary for the whole EU, picked in the browser. The data comes from Energy-Charts (Fraunhofer ISE) under CC BY 4.0 and is published with a delay of one to two hours, which is why the sample time is printed under the figures.

How do I switch between screens?

With a long press: the left half of the display goes to the previous screen, the right half to the next. The screens are clock, aircraft, weather radar, forecast, electricity price, generation and settings, and the first six can be switched off. Swiping sideways changes the range and a short tap selects an aircraft. You can also switch from the browser without touching the glass.

Can I rotate the map to match the way I am looking?

Yes. In Settings there is a row called Nahore with − and + buttons that set which compass bearing is at the top of the display. Set the direction you look out of the window, eight positions 45° apart, and aircraft appear on the display in the same direction as the ones behind the glass. The weather radar deliberately does not rotate, a precipitation map is read north up.

Is the settings page password protected?

Not by default. Firmware update, settings import and factory reset are open to anyone who can reach the device. You can set a password on the System tab, but it is stored in the clear, and a forgotten one can only be cleared by holding BOOT at startup, which is a factory reset.

The display stays black, what did I do wrong?

Almost certainly PSRAM. If you compile the firmware yourself it has to be set to OPI PSRAM in Arduino IDE under Tools. That is behind most cases of a black display.
Share the article:
Show your
Maker soul!
Buy a T-Shirt
Coffee for Chiptron
Give a boost to the next article

Related Articles

If you’ve ever wondered what plane is flying over your house, you’ve probably used an app like FlightRadar24. The ESP32 Plane Radar project offers a more interesting solution though – your own desktop radar built on ESP32 that displays planes…

I wanted to know what was flying over my head. Not on a phone, not in a browser tab – on a small round thing sitting on a shelf that I could glance at.

The weather station is the first DIY project which makers do after sometime of playing with electronics. It is project which is helpful and makers using this long time. This article introduce my weather station which is based on board…

Aeris-10

When radar is mentioned, most people picture a metal dish on an airport roof or a giant military installation surrounded by barbed wire. The AERIS-10 project (short for Array Electronic Radar with Integrated System) is embarking on the development of…

I liked the project zivyobraz.eu because it simply makes ePaper/eInk display technology accessible to regular people without programming knowledge. They can easily create their own information display. What appears on the display is entirely up to them. The service offers…

Josef Zvol?nek (facebook, google plus, twitter) shared this amazing project of his weather station with tri-color ePaper display. Josef shared complete project with ino file for ESP8266 and also gerber files for PCB. Thanks a lot for sharing. You can…

Trends