iTechGuides is reader-supported. When you buy through links on our site, we may earn an affiliate commission. As an Amazon Associate I earn from qualifying purchases. Learn more
An ESP32 can host a browser dashboard that records BME280 temperature, humidity, and pressure readings to a microSD card, then turns that history into charts and temperature statistics. The reference build samples every 60 seconds, timestamps each record, serves the page on the local network, and calculates extrema, threshold durations, temperature swings, and hourly averages from the stored CSV history.
What this ESP32 temperature dashboard does
This project combines four jobs that are often treated separately:
- The BME280 measures temperature, relative humidity, and barometric pressure.
- The ESP32 reads the sensor on a schedule and adds a timestamp.
- A microSD card retains the readings as CSV data so measurements from previous hours and days remain available after a page reload.
- An ESP32-hosted web page loads the history, draws charts, and calculates temperature summaries in the browser or server-side logic used by the reference implementation.
The described sampling interval is 60 seconds. That is a setting of this tutorial, not a universal ESP32 requirement: a faster interval creates more records and uses more storage, while a slower interval can miss short changes.
Quick wins for a faster PC:
Repair Windows errors before they cause bigger problemsFix Now →Fix the driver behind crashes, sound loss and screen glitchesFind Drivers →Hardware you need
| Part | Role in the build |
|---|---|
| ESP32 development board | Reads the sensor, writes the card, runs the web server, and connects to Wi-Fi. |
| BME280 sensor module | Provides temperature, humidity, and pressure over I2C. |
| MicroSD card module | Connects the card to the ESP32 over SPI. |
| MicroSD card | Stores timestamped CSV measurements and the history used for charting and statistics. |
| Jumper wires and breadboard | Convenient for assembling and testing the circuit. |
Check the voltage requirements and pinout for the exact ESP32 board, BME280 breakout, and SD module you have. Breakout boards can include different level-shifting or regulator arrangements, so do not assume that a pin label or electrical level is identical across modules.
#1 Best Overall
- Powerful ESP-32 Board: Unlock the world of Internet of Things (IoT) and advanced electronics with the heart of this kit: the ESP-32 board. It features a powerful dual-core processor, integrated Wi-Fi and Bluetooth 4.2, making it perfect for building connected, smart devices that communicate with your phone or the cloud. It's fully compatible with the Arduino IDE for easy programming.
- Super Starter Kit: This kit contains over 35 different modules and electronic components, including sensors, displays, motors, and input devices. From LEDs and buttons to an OLED screen, servo motor, and keypad, you have everything needed to explore a vast range of projects in one box.
- Step by Step Online Tutorial: Jump right in with our detailed, beginner-friendly tutorial. Access 30+ projects with complete code, clear circuit diagrams, and step-by-step instructions. Learn the fundamentals of electronics, coding, and how to utilize the ESP-32's unique capabilities without any prior experience.
- Hands-on Learning for All Skill Levels: Perfect for students, makers, engineers, and hobbyists. Start with basic circuits and coding, then progress to intermediate and advanced IoT applications. Build practical projects like weather stations, smart home controllers, remote-controlled devices, and interactive gadgets. The skills you learn are the foundation for real-world innovation.
- Quality & Great Support: Elegoo is committed to quality. We provide a clear, detailed tutorial guide, refined code, and a well-organized component kit. All modules are carefully selected for reliability and ease of use. Our dedicated technical support team and active online community are ready to help you succeed in your learning journey.
Reference wiring
BME280 on I2C
The reference pin assignment uses GPIO 21 for SDA and GPIO 22 for SCL. Connect the module’s power and ground according to its documentation, then connect SDA and SCL to those two GPIOs. Some BME280 boards expose an address-selection pin; use the address expected by your software configuration.
MicroSD module on SPI
| SPI signal | ESP32 GPIO in the reference wiring |
|---|---|
| Chip select (CS) | GPIO 5 |
| MOSI | GPIO 23 |
| Clock (SCK) | GPIO 18 |
| MISO | GPIO 19 |
Format the card as FAT32 before inserting it. A card that is not mounted, is formatted with an unsupported file system, or is wired with the wrong CS line will prevent the history file from being read or appended.
Software components and data flow
The reference implementation is built in Arduino IDE and uses these libraries:
ESPAsyncWebServerfor asynchronous HTTP handling.AsyncTCP, which supplies the TCP layer used by the asynchronous server on ESP32.Adafruit_BME280andAdafruit_Sensorfor sensor access.- The ESP32 Wi-Fi, SD, SPI, and time facilities included with the board support package.
Library maintenance and compatibility change over time. Install versions that are compatible with the ESP32 board package in your Arduino IDE rather than assuming that an old tutorial’s installation sequence remains permanent.
Rank #2
- ESP32 camera board: Dual-core 32-bit microprocessor up to 240 MHz, 4 MB flash, 8 MB PSRAM, onboard 2.4 GHz Wi-Fi and Bluetooth 4.2 (LE), USB code uploader, camera, memory card slot (Comes with 1GB memory card and card reader)
- 3 sets of code: MicroPython, C and Processing (Java). Python is one of the most popular languages, and C is one of the most classic languages. Processing code needs to run on computers to provide graphical interfaces
- Detailed tutorial: Can be downloaded (in English, 795-page in total) or viewed online (original in English, can be translated into other languages by browsers) (The tutorial link can be found on the product box, no paper tutorial)
- 122 projects from simple to complex: Provides step-by-step guide with electronics and components knowledge, each project has schematics, wiring diagrams, complete code and detailed explanations
- 240 items in total: This ultimate kit includes the most commonly used electronic components, modules, sensors, wires and other compatible items
Runtime sequence
- Start the ESP32 and initialize Wi-Fi, the BME280, SPI, and the SD card.
- Obtain a network time value so each reading can carry a timestamp. If time has not been synchronized, the timestamp is not yet trustworthy.
- At the configured 60-second interval, read temperature, humidity, and pressure.
- Append the timestamp and readings to the CSV file on the card.
- Serve the dashboard and its data endpoints over HTTP when a browser on the same network requests them.
- When the page loads, read the available history, populate the charts, and compute the temperature summaries from those records.
Keep the sampling timer independent from page requests. A browser connecting or downloading a large file should not silently change the sensor cadence.
Build the project in Arduino IDE
1. Prepare the board package and libraries
- Install the ESP32 board support package in Arduino IDE and select the board that matches your development board.
- Install
ESPAsyncWebServer,AsyncTCP,Adafruit_BME280, andAdafruit_Sensorthrough the IDE’s library manager or the installation method recommended by each project. - Confirm that the selected library releases support your installed ESP32 core. If compilation fails in asynchronous networking code, resolve the version mismatch before debugging sensor wiring.
2. Assemble and format storage
- Format the microSD card as FAT32 on a computer.
- Wire the SD signals to GPIO 5, 23, 18, and 19 as shown above, plus the module’s required power and ground.
- Wire the BME280’s I2C lines to GPIO 21 and 22 and connect its power and ground.
- Inspect for loose jumpers and confirm that the module voltage requirements match the ESP32-side signals.
3. Configure network and pins
Put the Wi-Fi network name and password in the sketch, set the I2C and SD pin definitions to the wiring you actually built, and choose the BME280 I2C address used by your breakout. Keep credentials out of sketches that you publish or share.
4. Initialize the sensor, card, and clock
Have setup code fail clearly if the BME280 or SD card cannot be initialized. A useful diagnostic should identify whether the failure occurred during sensor startup, card mounting, file opening, or time synchronization. Do not create a new empty history file on every reboot: open the existing CSV in append mode so previous days remain available.
Do these 3 things before closing this tab:
1Clear out junk files and repair common Windows errors2Scan for outdated or missing drivers - takes under a minute3Repair Windows errors before they cause bigger problems5. Record one row at each interval
The loop or timer callback should read all three BME280 values together, obtain the current time, and append one record. Keep the timestamp and the three measurements in a consistent order and use the same order when parsing the file for charts. Flush or close the file after an append according to the storage code you use; otherwise a power loss can leave the newest record unwritten.
Rank #3
- Perfect choice for beginners to learn, electronics and program.
- The Basic Starter Kit is easy to use and you can learn to program at an introductory level.
- You can use ESP32 modules to control other modules, such as LED,DHT11,OLED module, etc
- The tutorial include codes and lessons.It will teach every users how to assembly Basic Starter Kit for ESP32.
- Please download our tutorial and learn after you receive the goods.
6. Serve the dashboard
Start the asynchronous web server after the hardware is ready. The page needs an endpoint or handler that returns the stored history, an HTML/CSS/JavaScript page that renders it, and actions for downloading and deleting the CSV. The reference page also displays cards for the latest temperature, humidity, and pressure readings.
Open the page on your network
- Upload the sketch and open the serial monitor at the baud rate selected in the sketch.
- Wait for the ESP32 to connect to Wi-Fi and print its assigned IP address.
- Connect a computer or phone to the same network.
- Enter the ESP32’s IP address in that device’s browser.
This arrangement is a local-network demonstration. It does not automatically provide encrypted authentication or safe access from the public internet. If you later expose a device beyond your LAN, you need a separately designed security solution rather than assuming the sample web server is protected.
Charts and controls on the reference page
Three sensor charts
The dashboard plots temperature, humidity, and pressure from the loaded records. The temperature chart starts in Celsius and provides a Fahrenheit switch. Chart zooming lets you inspect a narrower time range, and hovering or selecting points exposes individual values.
What’s actually slowing this PC down?
Pick the symptom - the matching free tool is one click away.
CSV download and deletion
The download control gives you the logged file for backup or analysis elsewhere. The delete control removes the logged CSV data; treat it as destructive, especially when the card is the only copy of the history. After deletion, the charts and all statistics that depend on those records will have no earlier observations to load.
Rank #4
- COMPREHENSIVE STARTER KIT: Includes an ESP32 development board and over 20 different types of electronic components and modules. This complete set provides everything you need to start learning electronics and building Internet of Things (IoT) projects, all organized in a convenient plastic storage case.
- POWERFUL ESP32 MICROCONTROLLER: Features a versatile ESP32 development board with an integrated dual-core CPU, Wi-Fi, and Bluetooth connectivity. This board serves as the core of your projects, enabling wireless communication and control for a wide range of applications from home automation to robotics.
- DIVERSE SENSORS AND MODULES: Explore your environment with a variety of included sensors. The kit contains a DHT11 temperature and humidity sensor, HC-SR501 PIR motion sensor, an IR infrared obstacle avoidance sensor, and a photoresistor light detection module for creating responsive, intelligent devices.
- INPUTS, OUTPUTS, AND CONTROL: Features an I2C OLED display for showing data, a 2-channel 5V relay module for controlling high-power devices (rated 10A 250VAC / 15A 125VAC), active and passive buzzers for audio feedback, various color LEDs, push buttons, and a potentiometer for precise analog input.
- PROTOTYPING ESSENTIALS INCLUDED: Get building right away with an 830-tie-point solderless breadboard, a bundle of male-to-male jumper wires, a USB cable for power and programming the ESP32 board, and a variety of common resistors. The kit is perfect for both beginners and experienced makers.
Temperature statistics the implementation calculates
Recent minimum and maximum
The page finds the lowest and highest recorded temperatures in the last 24 hours and separately in the last seven days. These are calculated from timestamped history, not merely from the latest readings visible while the page is open. A missing or incomplete interval can make an apparent extreme less representative, so interpret the value alongside the data coverage.
Time above and below thresholds
You can configure temperature thresholds and calculate how long the recorded temperature stayed above or below them. The result depends on the sample interval: with 60-second records, the implementation is estimating periods between observations, not measuring every instant continuously. Long gaps, a restarted board, or a failed sensor therefore reduce the precision of the duration.
Time from minimum to maximum and back
The history is searched for the elapsed time between a low and a subsequent high, and for the return from a high toward a later low. This helps reveal how quickly conditions changed, but the result is tied to the extrema that exist in the loaded file and to the timestamps assigned to them.
Daily temperature swings
For each day represented in the most recent seven-day window, the page determines the difference between that day’s recorded high and low. A day with sparse records can show a smaller swing simply because a peak was not sampled.
Best Value
- ESP32-S3 camera board: Dual-core 32-bit microprocessor up to 240 MHz, 8 MB flash, 8 MB PSRAM, onboard 2.4 GHz Wi-Fi and Bluetooth 5 (LE), USB-OTG, USB code uploader, camera, memory card slot (Comes with 1GB memory card and card reader)
- 3 sets of code: MicroPython, C and Processing (Java). Python is one of the most popular languages, and C is one of the most classic languages. Processing code needs to run on computers to provide graphical interfaces
- Detailed tutorial: Can be downloaded (in English, 828-page in total) or viewed online (original in English, can be translated into other languages by browsers) (The tutorial link can be found on the product box, no paper tutorial)
- 121 projects from simple to complex: Provides step-by-step guide with electronics and components knowledge, each project has schematics, wiring diagrams, complete code and detailed explanations
- 243 items in total: This ultimate kit includes the most commonly used electronic components, modules, sensors, wires and other compatible items
Average temperature by hour
The implementation groups all loaded readings by hour of day and computes an average for each hour. Because it uses the loaded history, this view can reveal a recurring daily pattern across multiple days rather than only the current session. Make sure timestamps are synchronized and consistently interpreted in the intended time zone before drawing conclusions from hourly groupings.
Independent reader supportYour contribution helps us test, update, and keep practical guides available for everyone.Why CSV history is essential for these calculations
A live-only chart can display newly arriving points while the page remains open, but it does not prove that those observations survive a reboot or can support a seven-day calculation. The microSD CSV provides durable history for the 24-hour and seven-day extrema, threshold durations, daily swings, and hourly averages. Keep enough free space for the retention period you need, and back up important files before using the delete action.
Polling versus a continuously pushed chart
| Approach | What it does | What it establishes |
|---|---|---|
| Reference dashboard with CSV history | Loads stored records, draws three charts, and computes historical statistics. | Retained observations are available for later analysis, subject to the integrity of the CSV and timestamps. |
| Browser polling pattern | JavaScript requests an endpoint periodically and updates graphs with the response. | A practical way to refresh a live view; polling alone does not establish durable multi-day retention. |
Both patterns can be useful. Choose the refresh mechanism based on how current the display must be and how much work each request causes. The available material does not establish a speed or reliability winner, so do not treat one pattern as universally better.
Troubleshooting checklist
No BME280 readings
- Recheck SDA on GPIO 21 and SCL on GPIO 22, plus power and ground.
- Verify the sensor address selected in software matches the breakout.
- Confirm that the breakout’s voltage arrangement is suitable for the ESP32.
- Test sensor initialization before adding the web page so a network problem is not mistaken for a hardware problem.
SD initialization or file errors
- Reformat the card as FAT32 and test with another known-good card if mounting still fails.
- Check CS on GPIO 5, MOSI on GPIO 23, SCK on GPIO 18, and MISO on GPIO 19.
- Ensure no other SPI device is holding the bus or selecting itself during card access.
- Confirm that the sketch appends to the existing file instead of truncating it during startup.
Incorrect or missing timestamps
- Wait for network time synchronization before recording data used for daily or hourly analysis.
- Check the configured time zone and daylight-saving treatment used by the sketch.
- Look for gaps after resets or Wi-Fi outages; statistics cannot reconstruct observations that were never logged.
The page does not load
- Use the IP address printed by the ESP32, not a guessed hostname.
- Confirm that the browser is on the same local network.
- Check serial output for Wi-Fi authentication, server-start, and request errors.
- Make sure the asynchronous server and TCP libraries are mutually compatible with the installed ESP32 core.
Statistics look implausible
- Inspect the downloaded CSV for missing rows, malformed values, or a clock jump.
- Remember that threshold durations and daily swings are inferred from sampled points.
- Verify that the page loaded the intended file and that an earlier delete action did not remove the history.
Design decisions to make before expanding the project
- Sampling cadence: retain 60 seconds for a direct reproduction, or choose another interval after deciding how quickly your environment changes and how much card storage you need.
- Retention: estimate how many rows your interval creates and preserve backups if the data matters.
- Time source: decide how the device behaves when Wi-Fi time synchronization is unavailable.
- Access boundary: keep the dashboard on the local network unless you have deliberately designed authentication, encryption, and remote-access controls.
- Failure handling: decide whether a sensor or SD failure should stop the server, show an error card, or continue serving the last valid history.
With those decisions explicit, the ESP32, BME280, SPI card, and asynchronous web server form a practical self-contained monitor: the sensor supplies current conditions, the CSV preserves evidence of what happened, and the browser turns that record into charts and interpretable temperature summaries.
Quick Recap
Product prices and availability are accurate as of the date/time indicated and are subject to change. Any price and availability information displayed on Amazon at the time of purchase will apply.

