Embedded engineering · Pretoria, ZA

Firmware, hardware & production behind connected products.

An embedded engineer, platform-agnostic across nRF, ESP32, STM32 and Silicon Labs, with products in the field across security, asset tracking and industrial monitoring.

TITLE BLOCK
EngineerLucienne Swart
DisciplineEmbedded firmware + HW
DomainLow-power connected IoT
StacknRF · ESP32 · STM32 · SiLabs
RTOSZephyr · FreeRTOS
WirelessBLE · Thread · LTE-M/NB-IoT
PhaseConcept → production
Rev2.0
StatusIn the field
01 / Capabilities

Firmware and hardware,
taken all the way to silicon.

Full-lifecycle embedded engineering, from schematic to production line, drawn from products now in deployment.

110 nAdeep sleep on a Sigfox module, 40% longer battery life than the previous design
1.3 µAidle draw on a vibration & temperature monitor for mining machinery
10 yearson one 2600 mAh cell for a Sigfox cable-theft detector
10 kmline-of-sight reception, field-tested on a sub-GHz tracking receiver
DeployedBLE-authenticated lock securing high-value consignments in transit
01

RTOS & super-loop firmware in C: driver development, BLE/GATT design, OTA & secure boot, structured for a product line, not one demo.

Experience includes
  • Layered HAL + driver abstraction
  • BLE GATT services with secure DFU
  • MCUboot secure boot + signed OTA
02

Schematic capture and layout, RF layout for 2.4 GHz & GNSS, component selection, DFM review, bring-up and validation.

Experience includes
  • Schematic capture + multilayer layout
  • Matched 2.4 GHz / GNSS RF routing
  • DFM review + bring-up report
03

Microamp-budget design and measurement: PMIC, FEM, sleep-state architecture and power profiling for battery products that last years.

Experience includes
  • µA sleep-state architecture
  • PMIC + FEM selection
  • Measured power profile vs. battery life
04

BLE (extended adv, Coded PHY, DFU), Thread/Matter, cellular IoT (LTE-M/NB-IoT), LoRaWAN, Sigfox & sub-GHz, chosen for the deployment, not the datasheet.

Experience includes
  • BLE Coded PHY + extended advertising
  • LTE-M / NB-IoT modem bring-up
  • Link budget + antenna tuning
05

Test jigs, test firmware, provisioning and transfer-to-production. The unglamorous work that decides whether a product actually ships.

Experience includes
  • Test jig + test firmware
  • Provisioning + key injection
  • Transfer-to-production pack
06

Schematic, layout and firmware reviews before fabrication, and traceable URS/SRS/HRS documentation introduced as an engineering-wide standard.

Experience includes
  • Firmware + architecture review
  • Schematic + layout review before fab
  • Traceable URS / SRS / HRS
02 / What I actually do

Talk is cheap.
Show me the code.

— Linus Torvalds, Linux kernel mailing list, 2000

So here it is: a custom BLE GATT service with encrypted, counter-protected challenge-response auth on Zephyr. The kind of firmware that ends up in production. Tab through the project.

ble_lock_svc.c · Zephyr
/* Authenticated unlock characteristic: command + monotonic counter */
#include <zephyr/bluetooth/gatt.h>
#include <zephyr/bluetooth/conn.h>
#include <zephyr/bluetooth/hci_types.h>

static ssize_t write_unlock(struct bt_conn *conn,
                const struct bt_gatt_attr *attr,
                const void *buf, uint16_t len,
                uint16_t offset, uint8_t flags)
{
    if (offset != 0) {
        return BT_GATT_ERR(BT_ATT_ERR_INVALID_OFFSET);
    }
    if (len != sizeof(struct auth_token)) {
        return BT_GATT_ERR(BT_ATT_ERR_INVALID_ATTRIBUTE_LEN);
    }
    /* verify HMAC + monotonic counter; reject replays */
    if (!auth_verify(conn, buf, len)) {
        bt_conn_disconnect(conn, BT_HCI_ERR_AUTH_FAIL);
        return BT_GATT_ERR(BT_ATT_ERR_AUTHENTICATION);
    }
    actuator_unlock();
    return len;
}

BT_GATT_SERVICE_DEFINE(lock_svc,
    BT_GATT_PRIMARY_SERVICE(&lock_uuid.uuid),
    BT_GATT_CHARACTERISTIC(&unlock_uuid.uuid,
        BT_GATT_CHRC_WRITE,
        BT_GATT_PERM_WRITE_AUTHEN,
        NULL, write_unlock, NULL),
);
# BLE peripheral · pairing + signing · secure DFU
CONFIG_BT=y
CONFIG_BT_PERIPHERAL=y
CONFIG_BT_SMP=y            # pairing + link encryption
CONFIG_BT_SIGNING=y
CONFIG_BT_GATT_DYNAMIC_DB=y

# Secure boot + over-the-air update
CONFIG_BOOTLOADER_MCUBOOT=y
CONFIG_IMG_MANAGER=y
CONFIG_MCUBOOT_IMG_MANAGER=y

# Power management, target: < 8 µA idle
CONFIG_PM=y
CONFIG_PM_DEVICE=y
CONFIG_PM_DEVICE_RUNTIME=y
CONFIG_SERIAL=n            # cut the UART in production
/* Custom board: lock actuator + fuel gauge */
/ {
    actuator: actuator {
        compatible = "gpio-leds";
        gpios = <&gpio0 13 GPIO_ACTIVE_HIGH>;
    };
};

&i2c0 {
    fuel_gauge: max17048@36 {
        compatible = "maxim,max17048";
        reg = <0x36>;
        status = "okay";
    };
};
$ west build -b nrf52840dk_nrf52840
-- Found Zephyr: 3.6.0
[100%] Built target zephyr_final

Memory region    Used Size   Region Size   %age Used
FLASH:             212 KB        1 MB         20.7%
RAM:                38 KB        256 KB        14.9%

✓ build succeeded · measured idle 7.4 µA @ 3.0 V
03 / Stack

Platform-agnostic in practice.

Hands-on experience across the major MCU and RF ecosystems.

Select a platform to see what I build on it
Nordic
nRF52/54 · nRF91 · Zephyr
Espressif
ESP32-S3 · ESP-IDF
ST
STM32 · STM32WL
Silicon Labs
EFR32 Wireless Gecko
Nordic Select a platform above.
Zephyr RTOSnRF Connect SDKFreeRTOS BLE · GATT · DFUMatter · ThreadLTE-M / NB-IoT LoRaWANSigfoxsub-GHz GFSKGNSS RF / 2.4 GHz layoutLow-power / PMICAltium · KiCadCompanion app · Android (Kotlin)
Design for compliance

Products designed with EMC/RF and South African regulatory requirements (ICASA, NRCS) in mind from the schematic up, so certification isn't a surprise at the end, backed by local production experience.

04 / Contact

Get in touch.

Questions about the work above, or want to compare notes on an embedded problem? Send a message.

↳ I reply within 2 working days.

Prefer to chat? WhatsApp →

Your details are used only to reply to your message. See the Privacy Policy.