projects

Pico 2W + Raspberry Pi 3 Weather Station

A personal weather station combining a MicroPython node on Raspberry Pi Pico 2W, several environmental sensors, MQTT publishing, and a local dashboard on Raspberry Pi 3.

Published on May 14, 2026

Status: In active development

Repository: GitHub

Documentation: Lien

Overview

This personal weather station is built around two complementary repositories.

The first, weather_web_sensors, runs acquisition on a Raspberry Pi Pico 2W with MicroPython. The second, rpi3-meteo, receives the measurements on a Raspberry Pi 3, stores them, displays them in a local interface, and enriches them with forecast pages.

Together they form a small autonomous observation chain designed for home or nearby outdoor use, with an architecture that stays simple, repairable, and easy to extend.

View of the acquisition prototype on Pico 2W

View of the acquisition prototype on Pico 2W with temperature, humidity, and pressure sensors, along with an OLED display.

View of the display on a Raspberry Pi 3

View of the display on the Raspberry Pi 3 screen, with raw data and reduced data.

Project architecture

The current chain is organized into four blocks:

  1. local acquisition on the Pico 2W
  2. MQTT publication of measurements
  3. ingestion and storage on the Raspberry Pi 3
  4. local visualization on screen or in a browser

The MicroPython node reads several sensors in parallel, computes an aggregated reference measurement, updates a small OLED display, and also exposes a lightweight local web interface. The useful data is then published to a Mosquitto broker and consumed by the FastAPI application, which stores it in PostgreSQL and serves it through a local dashboard.

weather_web_sensors

The weather_web_sensors repository is the embedded acquisition layer of the project. It relies on:

  • a Raspberry Pi Pico 2W
  • a BME680 for temperature, humidity, pressure, and gas
  • a DHT22
  • an AHT20 + BMP280 pair
  • an SSD1306 display
  • a DS3231 real-time clock module

The software handles:

  • two separate I2C buses
  • autonomous acquisition at boot
  • NTP synchronization with write-back to the RTC
  • a local web page with cross-sensor comparison
  • UDP or MQTT export

This layer is especially useful when comparing several temperature, humidity, and pressure sensors on the same setup in order to monitor offsets and choose a working reference.

Display of the embedded web server on the Pico 2W

View of the embedded web server display on the Pico 2W, with raw data, reduced values, statistics, and cross-sensor comparisons.

rpi3-meteo

The rpi3-meteo repository is the local server layer and the visualization interface for the weather station.

It is based on:

  • a FastAPI backend
  • a Mosquitto broker
  • PostgreSQL storage
  • a touchscreen-friendly interface
  • forecast pages powered in particular by Open-Meteo

The application consumes two MQTT streams published by the Pico:

  • a raw stream for detailed acquisitions
  • an aggregated stream for the summary display

It can then:

  • store both messages and individual sensor values
  • expose the latest useful readings
  • compute a local air-quality indicator from the BME680
  • display current, hourly, and daily forecast pages
  • generate remote plots from WSL by querying the PostgreSQL server in Python

Below are a few screenshots of the pages available in the user interface:

View of the Raspberry Pi 3 home page

View of the Raspberry Pi 3 home page with real-time data and reduced data.

View of the Raspberry Pi 3 real-time page

View of the Raspberry Pi 3 real-time page with raw data transmitted every minute through the MQTT broker.

View of the Raspberry Pi 3 summary page

View of the Raspberry Pi 3 summary page with reduced data, here grouped by hour.

View of the current conditions page sourced from Open-Meteo

View of the current conditions page sourced from Open-Meteo.

View of the short-term forecast page sourced from Open-Meteo

View of the short-term forecast page sourced from Open-Meteo.

View of the 4-day forecast page sourced from Open-Meteo

View of the 4-day forecast page sourced from Open-Meteo.

Why this project matters

The main strength of this weather station is the way it connects lightweight electronics with application software:

  • compact embedded acquisition with MicroPython
  • measurement transport through MQTT
  • persistence and queries with PostgreSQL
  • modern local interface with FastAPI
  • independent evolution of the sensor layer and the dashboard layer

The project also remains a useful experimental platform: future addition of an anemometer, a rain gauge, improved air-quality heuristics, sensor comparison, and richer historical visualizations.

A weather shelter made of PETG could also be built with a 3D printer, and the current Wi-Fi data transmission could later be replaced with two HC-12 433 MHz serial transceivers.

Intended audience

This weather station is meant for people who want to:

  • build an open and modifiable personal weather station
  • keep local control over their data
  • compare several environmental sensors
  • run an autonomous dashboard on Raspberry Pi
  • reuse simple building blocks based on Python, MicroPython, and MQTT