← All work

From microcontroller to production in building automation

Real-time firmware, embedded Linux, edge services, deployment and production testing developed as parts of the same connected product.

The challenge

The project involved the central controller of a building automation platform, where electronics, field protocols, local logic and remote services had to work as parts of the same product.

The challenge was keeping layers with very different constraints aligned: a real-time microcontroller, embedded Linux, edge services, protocols, deployment and production tools.

The product also needed repeatable ways to diagnose, update, program and verify it throughout its lifecycle.

As the sole embedded developer, I worked across this chain from STM32 firmware to production test tools, collaborating with the cloud backend, frontend, UX/UI and system integration teams.

From microcontroller to product

The microcontroller handled the functions closest to the hardware: data acquisition, GPIO, buses, non-volatile memory, watchdogs, diagnostics and system supervision.

Linux handled protocols, application services, persistence, APIs, real-time communication and integration with remote services.

I also worked on the embedded Linux platform, customising the operating system and integrating the product’s hardware interfaces and services.

The key was maintaining explicit interfaces between the layers, so that states, errors and diagnostic functions could also be reused during integration and production.

Three design decisions

Each function at the right level

The microcontroller handled functions requiring direct hardware access and predictable behaviour; Linux hosted those requiring more processing capacity and integration capabilities.

Decision: give the MCU and Linux edge distinct responsibilities, with a clear interface between them.

Diagnostics built into the architecture

The firmware exposed a diagnostic interface used by both the Linux software and automated test tools.

The same functions could identify the device, check peripherals and communications, read hardware measurements and exercise interfaces during development and production testing.

Decision: make diagnostics part of the product architecture from the start.

Design for testing

Production required more than flashing firmware: power supplies, buses, peripherals, firmware, the Linux host and physical functions all had to be exercised and verified together.

Testability and production test tools were therefore developed alongside the product.

Decision: treat production testing as part of the architecture and industrialisation process.

From product to production

I developed an automated production test platform coordinating fixtures, communication interfaces, test firmware, measurements, flashing and software.

Test sequences were defined as data, allowing checks, thresholds and workflows to change without rewriting the test engine.

Dedicated fixtures, with firmware developed for production testing, enabled automated checks of hardware and interfaces.

The process also integrated flashing, communication tests, computer vision for visual checks, reporting, serial number assignment and label printing.

The platform brought electrical, firmware and software checks together in a repeatable production test process managed by the same infrastructure.

Deployment and maintenance

Edge services were deployed as multi-architecture stacks, with automated builds and publishing.

I also developed provisioning, diagnostic and update tools that worked with both Linux and the microcontroller.

The aim was to avoid fragmented manual procedures and undocumented knowledge for configuration, updates and maintenance.

The outcome

The result is an embedded platform where firmware, Linux, edge software and production tools share interfaces and diagnostics designed throughout the same development cycle.

The product can be monitored across its layers, updated and configured with dedicated tools, and programmed and verified through a repeatable production test process.

Mechanisms introduced during development are reused during integration and production, reducing gaps between firmware, Linux, application software and manufacturing.

The value of the project lies in following the product across layers usually handled by separate specialists, from microcontroller behaviour through to programming and hardware verification in production.

Technologies

Firmware & real-time
C · STM32 · FreeRTOS · HAL / LL · ADC · GPIO · I²C · UART · USB CDC · CAN · Watchdog · Non-volatile memory

Protocols & interfaces
CAN · KNX · Modbus · RS-485 · UART · I²C · USB · Ethernet · REST · WebSocket / Socket.IO

Embedded Linux
Embedded Linux · Custom Linux platform · Hardware interface integration · systemd · Provisioning

Edge software
Node.js · TypeScript · NestJS · MongoDB · REST APIs · Real-time events · Device orchestration

Deployment & maintenance
Docker · Docker Compose · CI/CD · Containerized deployment · Multi-architecture builds · Update tooling

Production test
Python · Flask · PySerial · OpenCV · Configurable test sequences · Fixture firmware · Electrical measurements · Automated flashing · Reporting · Serialisation · Label printing

Integration & industrialisation
System architecture · HW/FW/SW integration · Design for Test · Diagnostics · Troubleshooting · Provisioning · Test automation · Production readiness

Does your product span multiple layers?

If firmware, embedded Linux, protocols and software need to work together on the same device, I can take on a critical part or work across the interfaces through to verification on the real system.

Let’s discuss your project →