Custom Sensor Telemetry Board
Custom 2-layer STM32F411 PCB with FreeRTOS environmental telemetry
MCU
STM32F411 (LQFP-48)
Board
2-layer · 50 × 40 mm
Sensor
BME280 @ I²C 400 kHz
Link
UART 921600 baud · USB-C
01Overview
An end-to-end embedded product spanning schematic capture, PCB layout, manufacturing, and firmware. The board integrates an STM32F411 microcontroller, a Bosch BME280 environmental sensor on the I²C bus, and USB-C connectivity through a CP2102 UART-to-USB bridge, all on a compact 2-layer board fabricated and assembled through JLCPCB PCBA.
The goal was to own the full hardware-to-firmware stack: design the electronics, get the board manufactured, bring it up on the bench, and write the FreeRTOS firmware that turns raw sensor reads into a reliable telemetry stream.
02Problem Statement
Off-the-shelf dev boards hide the engineering that matters in embedded work: power sequencing, decoupling, bus layout, and bring-up. Building a custom board surfaces all of it.
The system needs to sample environmental data continuously while transmitting telemetry without dropping samples or corrupting the shared buffer. That is a concurrency problem that maps naturally onto an RTOS.
03Architecture
Hardware: STM32F411 in an LQFP-48 package is the controller. A 3.3 V LDO regulator with proper decoupling supplies the MCU and peripherals. The BME280 sits on the I²C bus; a CP2102 bridges the MCU's UART to a USB-C connector for host telemetry and power. An SWD debug header exposes the core for flashing and live debugging.
Firmware: FreeRTOS schedules two concurrent tasks. A sensor-acquisition task reads the BME280 over I²C at 400 kHz, and a telemetry task transmits over UART at 921600 baud. The tasks communicate through a shared buffer protected by a mutex so producer and consumer never tear a sample.
Layout: signal paths were routed with power integrity and I²C bus topology in mind, keeping the bus short and clean and placing decoupling close to the supply pins.
04Technical Challenges
Power sequencing and bring-up
Early board revisions exposed power-sequencing and bring-up issues that prevented clean start-up. Diagnosing them on the bench and respinning the layout was the core hardware challenge, and it drove multiple board revisions before the board came up reliably.
I²C bus integrity at 400 kHz
Running the BME280 at I²C Fast Mode (400 kHz) requires a clean bus: short traces, correct pull-ups, and careful placement. Bus layout was treated as a first-class signal-integrity concern rather than an afterthought.
Lossless concurrent telemetry
Acquisition and transmission run concurrently, so the shared sample buffer is a contention point. A mutex guards it to guarantee that the telemetry task never reads a partially-written sample.
05Implementation Details
Schematic and 2-layer layout in KiCad
Designed the full schematic and a 2-layer, 50 × 40 mm board in KiCad: STM32F411 (LQFP-48), BME280 over I²C, CP2102 USB-C bridge, 3.3 V LDO with decoupling, and an SWD header. Components were selected and signal paths routed with power integrity and I²C bus layout as explicit constraints.
Manufacturing and assembly
The board was manufactured and assembled through JLCPCB PCBA, then brought up on the bench. Multiple revisions resolved the power-sequencing and bring-up issues found during testing.
FreeRTOS firmware in C
Firmware is written in C on the STM32F411 using FreeRTOS. Concurrent tasks handle sensor acquisition and telemetry transmission, with mutex-protected shared buffers coordinating data between them. I²C runs at 400 kHz; UART telemetry runs at 921600 baud.
Timing validation
Bus and link timing were validated with a logic analyzer against the datasheet specifications to confirm the I²C transactions and UART framing behaved as expected.
06Key Engineering Decisions
Custom board over a dev kit
Designing a custom 2-layer board, rather than wiring a dev kit, was a deliberate choice to own power design, decoupling, and bus layout end to end, which is exactly the skill set embedded roles screen for.
FreeRTOS for concurrency
Acquisition and transmission are naturally concurrent with different timing needs, so an RTOS with mutex-protected sharing is a cleaner, more scalable model than a hand-rolled superloop.
CP2102 + USB-C for the host link
A dedicated UART-to-USB bridge keeps the host interface simple and robust while freeing the MCU to focus on acquisition, and USB-C gives a modern, reversible connector for power and data.
07Future Improvements
- Add DMA-driven I²C and UART to offload the CPU during transfers.
- Introduce a framing/CRC layer on the telemetry stream for integrity checking on the host side.
- Add a host-side dashboard to visualize the environmental telemetry in real time.
- Characterize current draw and add low-power sleep states between samples.
08Media & Documentation
Visual documentation for this project. Placeholders below are reserved for assets being produced during development.
Open to opportunities
Seeking Fall 2026 embedded / firmware / hardware co-op.
If you're hiring for embedded, firmware, or hardware roles, I'd be glad to talk through my projects and how I work. The fastest way to reach me is email.
