This project is a modular telemetry system built on an Arduino Nano, designed to read environmental data from a BME280 sensor and expose it through multiple output sinks (Serial logging and an optional OLED display).
The goal of the project was not simply to read sensor data, but to apply clean C++ architecture, enforce separation of concerns, and follow embedded-friendly design principles suitable for resource-constrained microcontrollers.
The system is structured as if it were part of a larger embedded or avionics-style telemetry pipeline.
- Environmental telemetry from a BME280 sensor
- Temperature (°C)
- Pressure (hPa)
- Humidity (%)
- Altitude (m, sea-level corrected)
- Modular C++ architecture with clear responsibilities
- Serial telemetry logging
- Optional OLED telemetry display (I2C)
- I2C device detection at startup
- Designed for low-memory embedded environments
- Arduino Nano (ATmega328P)
- BME280 environmental sensor (I2C)
- OLED display (I2C, optional)
- SH1106 1.3-inch OLED (AZDelivery)
- Breadboard and jumper wires
The OLED display is driven using the U8g2 graphics library, chosen for its broad controller support and suitability for embedded systems.
The Arduino Nano (ATmega328P) provides only 2 KB of RAM, which makes full-frame buffering impractical for larger displays. To operate within these constraints, the project uses page-based rendering instead of a full framebuffer.
This project was developed using PlatformIO.
- Connect the Arduino Nano via USB
- Verify I2C wiring
- BME280 default address: 0x76
- OLED display default address: 0x3C
- Build and upload the firmware with
pio run -t upload - Open the serial monitor with
pio device monitor
MIT