Milan Veselý
embedded & hardware developer
I build electronics and firmware that keep working outside the lab. I help companies design and finish embedded products — from the first prototype all the way to series production. Measurement and control electronics, microcontroller firmware, and solving the problems that only show up at the customer site.
About
Electronics that survive the field
I make my living developing control systems for pool technology — an environment that is unexpectedly hostile to electronics: humidity, aggressive chemistry, long bus runs and a user who will never see the inside of the device. That teaches you to write firmware that can recover on its own.
I work mostly with STM32 and Freescale MC9S08, in C, on RS485/UART buses. I enjoy the places where hardware meets software: bootloaders with dual-bank fail-safe updates, baud rate auto-calibration on an RC oscillator, DMX512 lighting control, touch displays. And the production side just as much — a design that can't be manufactured isn't a finished design.
#include <stdint.h>
#include "bus.h"
/* Frame: [ADR][CMD][LEN][DATA..][CRC16] */
int bus_handle(const uint8_t *f, size_t n)
{
if (n < HDR_LEN + CRC_LEN)
return -EBADMSG;
if (crc16(f, n - CRC_LEN) != le16(f + n - 2))
return -EBADMSG; /* noise on the line */
if (f[0] != node_addr() && f[0] != ADDR_BCAST)
return 0; /* not addressed to us */
wdt_kick();
return cmd_dispatch(f[1], f + HDR_LEN, f[2]);
}
How I think
Reliability over polish
A good product isn't the one that works on the bench — it's the one that still works reliably after years in service.
That is why I design for robustness, easy servicing and diagnosability. I have developed devices for air quality and hazardous gas concentration measurement, control systems and other embedded products where reliability matters more than a flashy demo.
What I do
From first prototype to series production
Custom firmware
STM32 (CubeIDE, HAL or bare registers), 8-bit MCUs such as the MC9S08, bare-metal and RTOS. New development as well as taking over and stabilising someone else's code.
Communication
RS485, UART, Modbus, BLE, LoRa. Custom protocol design including addressing, diagnostics and sane behaviour when the line gets noisy.
OTA & bootloaders
Dual-bank fail-safe updates, signed images, hardware-accelerated CRC, X-CUBE-SBSFU. Devices you can't update into a brick.
Bring-up & parts
Board bring-up, finding replacements when parts go out of stock, and judging real interchangeability — "drop-in" tends to be an optimistic word.
Production documentation
Assembly data, test procedures, working with manufacturing and overseas suppliers, and paperwork for import and customs clearance.
Beyond the device
Flutter/BLE apps for operation and service, Python tooling for testing and for collecting and analysing field data.
How I work
Designing with production, service and the customer in mind
Development is my part of the job, and I do it with everything that comes after it in mind. So the board can be built and populated without improvisation, so it can be tested, so a service technician can still make sense of it in five years, and so it makes sense to the customer without reading a manual. I am an engineer, but also someone who genuinely likes talking to people — so I can have that conversation with manufacturing and with the customer alike.
The routine around it — test scripts, log parsing, digging through datasheets — I automate, so there is time left for the parts that cannot be automated.
When I'm not busy with work, I spend my time with my family, outdoors, or at the piano. Those things remind me that even complex systems are supposed to feel simple.
Contact
Where to find me
E-mail and LinkedIn below. I usually reply within a working day.