All Projects
Learned BLE from scratch and built a working ESP32-C3 BLE environmental sensor node within two weeks. Extended the project from simulated data to a real I2C temperature sensor, systematically isolated a non-responsive sensor using address scanning, multimeter checks, address-line testing, and replacement comparison, then demonstrated live temperature readings over BLE. Independently captured I2C bus transactions using an unfamiliar logic analyzer.
Why it matters: BLE from an embedded perspective: GATT design, peripheral behavior, sensor publishing, and agent-buildable documentation.
Linux utility / automation: fixes and toggles Bluetooth audio profiles on PipeWire systems.
Why it matters: Built from a real usability problem; focused on scripting, automation, and Linux troubleshooting.
A modular STM32 sensor hub focused on firmware architecture and observability.
Why it matters: Peripheral-heavy firmware with a clean architecture: sensor abstraction, I2C/SPI backends, UART logging, and CLI-based observability.
A phase-based Linux virtual Ethernet driver using vnet0.
Why it matters: Shows real kernel-space network driver work: TX/RX paths, ring buffers, NAPI-style polling, statistics, ethtool support, and kernel/user-space debugging.
A virtual automotive ECU built on STM32F446RE.
Why it matters: An end-to-end embedded system: FreeRTOS tasks, CAN loopback telemetry, a UART CLI, logging, and a bootloader-oriented layout as a base for OTA experiments.
A modular STM32F4 virtual vehicle ECU with FreeRTOS, CAN, UART and a simple vehicle model.
Why it matters: Distinct from mini-ecu-v2: this one centers on vehicle-behavior simulation. Clean separation between drivers, RTOS tasks, application logic, and a simple simulated vehicle model.
A Linux pseudo character device driver implementing common file operations.
Why it matters: Understanding the Linux driver lifecycle, file-operation callbacks, and kernel/user-space interaction.
A real-time operating system built from scratch on the TI Tiva TM4C123G (ARM Cortex-M4).
Why it matters: Implements the core RTOS primitives — task scheduling, context switching, semaphores/mutexes and IPC — to understand RTOS internals from the ground up.