> BOOT SEQUENCE... INIT
> CHECKING SENSORS... OK
> ARMING MOTORS... READY
0%
Tactical Drone
TURBOTOSTER.DEV SYSTEMS
SYSTEMS ONLINE · OPEN TO WORK

I'm Bartek —
Embedded Systems Engineer

C++ firmware on STM32 and ESP32. I build things that have to keep running when nobody is watching: a LoRaWAN platform powering a family of sensor products, and air-quality signs standing in Polish towns.

Off the clock it's fighter jets, radio and retro hardware — hence the HUD. Most recently I reverse-engineered a shut-down game's multiplayer and brought it back online.

C++
PYTHON
JS
WEB
flight_control.py

PROJECTS

FEATURED · OPEN SOURCE PYTHON · BLAZE · TLS 1.1
TurboRivals launcher: pre-flight checks, session setup and a live server log showing the TLS handshake and a second player joining the session.
The launcher: pre-flight checks, session setup and the live server log — here the TLS handshake and a second player joining.

PRODUCTION FIRMWARE

Two commercial systems I own end-to-end, running in Polish towns right now. The source is closed — the engineering notes are where the interesting parts are.

STM32WLE5 · EU868 IN PRODUCTION

LoRaWAN Sensor Platform

FIRMWARE ARCHITECT · SOLE AUTHOR

Not one firmware — a platform. A portable LoRaWAN core with zero hardware dependencies: porting it to a new MCU means implementing three radio methods. One core now runs six products in the field — flap gates on water infrastructure, water and air probes, noise meters, soil and bin sensors.

C++20STANDARD
6PRODUCTS
438COMMITS
0HEAP ALLOCS
C++20STM32WLE5LoRaWAN 1.1RadioLib ChirpStackPlatformIOLow Power
ENGINEERING NOTES

Modern C++20 on a microcontroller — std::span, constexpr config, an allocation-free parser, and not a single heap allocation anywhere.

ONE CORE · SIX PRODUCTS SHIPPED
FLAP GATE 11 B WATER TEMP 12 B NOISE / dB 6 B SOIL · 9 CH 19 B BIN FILL 12 B AIR TEMP 4 B
  • A lost ACK looks exactly like a lost uplink. So every alarm carries a stable event_id that survives all retries — the server deduplicates on it rather than trusting frame arrival.
  • The retry ladder is deaf-proof. One SF12 frame blocks the radio for ~115 s, which would silence the disarm keypad at the exact moment someone needs it. The first three retries skip the duty-cycle wait.
  • An unplanned reset rejoins nothing. The signed session is restored with the frame counter bumped — the node resumes without a single JoinRequest on air.
  • The node tells you when it crashed. A watchdog reset survives the reboot and is reported to the server on the next uplink.
ESP32 · HUB75 · 384×64 IN PRODUCTION

Ekosłupek — Smart Air Quality Pillar

ARCHITECTURE & MODERNISATION

ESP32 firmware for the public air-quality signs standing in Polish towns: a 384 × 64 HUB75 matrix on I2S DMA, fed by 20 sensor slots over MQTT and LoRa. Configured through a portal served off the sign itself — no cloud, no app.

15.8kLINES C++
362TESTS
~8 kBDMA HEADROOM
2.3kLINES DOCS
C++ESP32ESP-IDFHUB75 / I2S DMA LoRa P2PMQTTFreeRTOSOTA
ENGINEERING NOTES

A seven-year, 520-commit production codebase with nine contributors. I authored the modern architecture: the module split, the REST and MQTT API, the layout engine, the browser editor, and all 362 tests.

  • The scarcest resource was not RAM — it was contiguous DMA. The matrix takes ~172 kB of a ~236 kB pool in 64 fragments, leaving about 8 kB contiguous while the sign is lit. Nearly every decision below follows from that one number.
  • So the JSON library had to go. 3.8 kB with ArduinoJson, 2.6 kB with String, 1.5 kB with a hand-written streaming writer. The streaming writer won.
  • A bad layout cannot brick the sign. An uploaded layout gets 20 seconds of probation — restart inside it and the file is deleted at next boot.
  • 218 tests are an executable cross-language spec. They cross-check the C++ firmware, the Python generator and the browser portal against each other — down to a font pipeline that renders the preview pixel-identically to the LEDs.

MORE PROJECTS

HW: REV-2 PROTOTYPE

Turbocamera

Contactless fever screening on a FLIR Lepton 3.5 / OpenMV H7+. The Lepton isn't radiometric, so temperature is estimated relative to a background ROI — then corrected for what blocks the reading: bangs +0.2 °C, glasses +0.5 °C, both detected from thermal contrast. Results go over UART to an ESP32 and into an ASP.NET Core dashboard.

SENSOR: LEPTON 3.5
CHAIN: OPENMV → ESP32 → WEB
PythonOpenMVThermalESP32ASP.NET Core
VER: 1.0.4 RELEASED

2D Kinetic Engine

A collision engine built around one goal: the numbers must not drift. Continuous collision detection stops fast balls tunnelling through each other, adaptive substepping shrinks the step when things get violent, and every value is a Decimal, never a float. ~170 pytest cases pin momentum and energy conservation.

PRECISION: DECIMAL + CCD
TESTS: ~170 PYTEST
PythonPygameCCDpytestNumerics
UNIVERSITY · TEAM OF 2 IN PROGRESS

Hotel Simulator

A discrete-time hotel run entirely from a configuration file: reception, housekeeping queues, kitchen and waiter dispatch, payroll and random failures, advancing tick by tick into a filterable event log. 4.5k lines of C++ behind 76 doctest cases; two-person team, 95 of 143 commits mine.

TESTS: 76 DOCTEST
SIZE: 4.5k LINES C++
C++OOPdoctestCMakeSimulation
ISA: RISC-V COMPLETED

RARS 4-Digit Counter

RISC-V assembly with no standard library and no framebuffer helpers: keyboard read straight off MMIO, digits drawn pixel by pixel from a hand-made 5×9 font scaled 4×. Leading zeros are dimmed rather than skipped, so the counter never jumps around the screen.

ISA: RISC-V / RARS
I/O: MMIO + FRAMEBUFFER
AssemblyRISC-VMMIOBitmap font
NASM · x86 / x86-64 COMPLETED

myfsqrt — Square Root Without an FPU

float myfsqrt(float) in NASM with the FPU and vector units off limits: the root is built digit by digit, radix-4, on the integer significand — shifts, adds and compares only, not a single multiply or divide. Denormals, NaNs, ±inf and −0 are all handled; validated against sqrtf in ULPs.

ACCURACY: ≤ 1 ULP vs sqrtf
USES: NO FPU / SSE / MUL
NASMx86-64IEEE-754Soft-float

About Me

Profile
CLASS: EMBEDDED / FIRMWARE
DOMAIN: STM32 · ESP32 · RF
STATUS: OPEN TO WORK
LOC: WARSAW, PL

About Me

Hi, I'm Bartek — a junior embedded developer at E-Gminy and a Computer Science student at Warsaw University of Technology. At work I write C++ firmware for STM32 and ESP32: the LoRaWAN platform and the air-quality signs you saw above.

I like hardware that has to survive the real world — low-power radio, tight memory budgets, watchdogs, devices in the field where nobody can press reset. In my free time I take closed systems apart; most recently a shut-down game's multiplayer protocol.

Long term I want to work where software meets flight: drones, avionics and defence electronics. Away from the keyboard it's aviation, radio, mathematics and sailing.

My skills:

  • C / C++20 firmware — STM32, ESP32, FreeRTOS
  • Wireless & IoT — LoRaWAN, LoRa P2P, MQTT, low-power design
  • Reverse engineering & protocols — Frida, Capstone, TLS
  • Python tooling and tests, web dashboards (Flask, ASP.NET Core)
LEETCODE 65 solved 35 medium 7 hard
2023 - NOW JOB

E-Gminy — Junior Embedded Developer

C++ firmware on STM32 and ESP32 for devices deployed in Polish municipalities.

2025 - NOW University

Warsaw University of Technology

Computer Science, Faculty of Electronics and Information Technology.

2024 Certificates

Two certificates

Digital skills from Google, and project management from "Zwolnieni z Teorii".

2021 - 2025 School

IV LO im. KEN, Bielsko-Biała

High school — where the fundamentals came from.

Jet
MAX MID LOW

Contact

SYSTEM SCAN ACTIVE
LAT: 52.2297
LON: 21.0122
> ESTABLISHING UPLINK...
> ENCRYPTION: AES-256
> PING: 24ms [STABLE]
> WAITING FOR INPUT...
SECURE TRANSMISSION TX-CHANNEL-4

Write E-mail.