Maker.io main logo

ESP32-S3 Weather Monitoring System with Smart Display

106

2026-09-21 | By Vaani Jain

Share

License: None Arduino

A weather monitoring system is a practical way to combine environmental sensors, a microcontroller, and a graphical interface into a single embedded project. Instead of displaying sensor readings through a basic serial monitor, an ESP32-S3-based smart display can present the information on a touchscreen dashboard that is easier to read and interact with.

In this project, an ESP32-S3 Smart Display is used as the main processing and display unit. The system measures temperature, humidity, atmospheric pressure, altitude, rainfall status, and ambient light conditions and presents the readings on a graphical weather dashboard.

The hardware is built around a 2.8-inch ESP32-S3 Smart Display, along with a BME280 environmental sensor, a rain sensor, and an LDR-based light sensor. The sensors connect directly to the ESP32-S3 GPIO pins, keeping the overall hardware compact.

The project was originally developed and documented by Play with Circuit, with a focus on practical embedded-system implementation and sensor interfacing.

How the Weather Monitoring System Works

The system can be divided into three main stages:

  1. Environmental data collection

  2. Sensor data processing

  3. Graphical display of the processed information

The sensors continuously collect information from the surrounding environment. The ESP32-S3 reads these sensor values, processes them, and updates the graphical interface on the TFT display.

Environmental Data Collection

Three different sensors are used to collect environmental information.

BME280 Sensor

The BME280 is a digital environmental sensor capable of measuring:

  • Temperature

  • Humidity

  • Atmospheric pressure

Pressure measurements can also be used to calculate an approximate altitude.

The BME280 communicates with the ESP32-S3 through the I²C interface. This means the sensor requires two communication lines, SDA and SCL, in addition to power and ground.

Because the sensor provides digitally calibrated measurements, the ESP32-S3 can directly obtain the environmental readings through the I²C bus.

Rain Sensor

The rain sensor is used to determine whether water is present on its conductive sensing surface.

The sensing plate contains conductive tracks. When water droplets fall onto the surface, they provide a conductive path between these tracks. As the amount of water on the surface changes, the electrical characteristics of the sensor also change. The sensor module provides an analog output that can be measured by an ESP32-S3 ADC input.

The software can then use the measured analog value to determine whether the surface is dry or exposed to rainfall.

LDR Light Sensor

An LDR (Light Dependent Resistor) is used to detect the surrounding light level.

The resistance of an LDR changes according to the amount of light falling on its surface:

  • High light intensity → Low resistance

  • Low light intensity → High resistance

The LDR module converts this change into an analog voltage that can be measured by the ESP32-S3.

The measured light level is then compared against a predefined threshold to determine whether the environment should be considered daytime or nighttime.

Processing Sensor Data with ESP32-S3

The ESP32-S3 integrated into the smart display acts as the central processing unit of the system.

It continuously reads the connected sensors and converts their outputs into meaningful environmental information.

The processing sequence includes:

  • Reading temperature from the BME280

  • Reading humidity from the BME280

  • Reading atmospheric pressure

  • Calculating altitude from pressure data

  • Reading the analog output of the rain sensor

  • Determining the rain status

  • Reading ambient light through the LDR

  • Determining day/night conditions

  • Updating the graphical display

This approach allows the ESP32-S3 to act as both the sensor controller and graphical display controller, eliminating the need for a separate microcontroller and display combination.

Displaying Weather Information

Once the sensor readings have been processed, the ESP32-S3 updates the 2.8-inch TFT touchscreen.

Instead of presenting the information as plain text, the project uses a graphical dashboard containing numerical values, weather icons, labels, and status indicators.

The readings are continuously refreshed so that changes in environmental conditions can be observed in real time.

For example, the dashboard can show temperature and humidity values from the BME280 while simultaneously indicating the current rainfall and day/night status.

LVGL for the Graphical Interface

The graphical interface is built using LVGL (Light and Versatile Graphics Library).

LVGL is an open-source embedded graphics framework designed for creating graphical user interfaces on microcontrollers and embedded display systems.

It provides commonly used GUI elements such as:

  • Labels

  • Buttons

  • Images

  • Cards

  • Animations

  • Status indicators

  • Other graphical widgets

In this weather monitoring system, LVGL is responsible for creating and updating the weather dashboard.

The interface initializes the display and touch controller, creates the different weather information areas, and places the appropriate labels and icons on the screen.

Sensor values are then updated dynamically so that the information shown on the display reflects the latest readings.

Hardware Used

The main hardware consists of an ESP32-S3 Smart Display, a 7Semi BME280 sensor, a rain sensor, an LDR light sensor, jumper wires, breadboards, and a USB cable.

The ESP32-S3 Smart Display acts as the main controller and graphical display. The 7Semi BME280 is used to measure temperature, humidity, atmospheric pressure, and altitude. The rain sensor detects rain or water droplets, while the light sensor detects ambient light intensity for day/night detection. Jumper wires and breadboards are used for the prototype connections, and the USB cable is used for programming the display.

ESP32-S3 Weather Monitoring Circuit

Weather Monitoring System

The sensors are connected directly to the ESP32-S3 GPIO pins. The BME280 uses I²C communication, while the rain sensor and LDR provide analog signals to the ESP32-S3 ADC inputs.

BME280 Pin Connections

The BME280 uses the dedicated I²C bus I2C_NUM_1 in this project.

The BME280 VCC pin is connected to the ESP32-S3 3.3V pin for power, while its GND pin is connected to GND. The SDA pin of the BME280 is connected to GPIO9, which is used as the I²C data line. The SCL pin is connected to GPIO10, which provides the I²C clock signal.

The SDA line transfers data between the BME280 and ESP32-S3, while the SCL line provides the clock signal used to synchronize the I²C communication. The ESP32-S3 periodically reads the sensor through this interface to obtain temperature, humidity, pressure, and altitude information.

Rain Sensor Connections

The rain sensor uses its analog output (AO) to provide a variable signal to the ESP32-S3.

The VCC pin of the rain sensor is connected to 3.3V, and its GND pin is connected to the common GND of the ESP32-S3. The sensor's AO pin is connected to GPIO7, which is configured as an analog input.

GPIO7 is continuously monitored by the ESP32-S3. The analog voltage generated by the rain sensor changes according to the water detected on the sensing surface. The software interprets this measured value to determine whether the sensor is in a dry state or detecting water/rain.

LDR Sensor Connections

The LDR module also provides an analog signal to the ESP32-S3.

The VCC pin of the LDR module is connected to 3.3V, while GND is connected to the common ground. The AO pin is connected to GPIO6, which is configured as an analog input.

GPIO6 is used to measure the analog voltage generated by the LDR module. The measured value is compared with a predefined threshold. Depending on the measured light level, the system determines whether it is daytime or nighttime.

Power Distribution

All three sensors in this implementation operate from the 3.3V supply available from the ESP32-S3 Smart Display.

The power connections are shared between the sensors:

  • BME280 VCC → 3.3V

  • Rain Sensor VCC → 3.3V

  • LDR Sensor VCC → 3.3V

All sensor grounds are connected to the common GND of the ESP32-S3 Smart Display.

A common ground is important because the ESP32-S3 needs a shared electrical reference when measuring the analog signals from the rain sensor and LDR and when communicating with the BME280.

Complete Data Flow

The complete operation of the system can be summarized as:

Sensors → ESP32-S3 → Data Processing → LVGL Interface → TFT Display

The BME280 supplies:

  • Temperature

  • Humidity

  • Atmospheric pressure

  • Altitude

The rain sensor supplies:

  • Rain/water detection status

The LDR supplies:

  • Ambient light information

  • Day/night status

The ESP32-S3 processes these inputs and passes the resulting information to the LVGL-based graphical interface.

The display then presents the information through numerical readings, icons, and status indicators.

Why This Approach Is Useful

Combining the ESP32-S3, sensors, and display into a single embedded system makes the project useful as a starting point for more advanced environmental monitoring applications.

The same basic architecture can be extended to applications such as:

  • Indoor environmental monitoring

  • Weather data logging

  • Smart agriculture systems

  • Greenhouse monitoring

  • IoT weather stations

  • Home automation systems

  • Educational embedded-system projects

The project also demonstrates how a microcontroller can handle several different types of sensor interfaces simultaneously. The BME280 communicates digitally over I²C, while the rain sensor and LDR use analog inputs.

This makes the system a useful practical example of combining digital sensor communication, ADC-based measurements, data processing, and embedded GUI development in one project.

Final Overview

This ESP32-S3-based weather monitoring system brings together three important parts of embedded development: environmental sensing, data processing, and graphical visualization.

The BME280 provides temperature, humidity, pressure, and altitude information, while the rain sensor detects water and the LDR determines ambient light conditions. The ESP32-S3 processes all of these inputs and presents the resulting information through an LVGL-based interface on the 2.8-inch TFT touchscreen.

Have questions or comments? Continue the conversation on TechForum, DigiKey's online community and technical resource.