Articles

Practical articles, tutorials, and deep dives on embedded systems development — covering Arduino, ESP32, Nordic SoCs, Zephyr RTOS, firmware updates, and real-world hardware projects.

Controlling RGB LEDs using ESP32 Component (ESP-IDF)

In this guide, we’ll show you how to control RGB LEDs using the ESP32 by building a custom component in the ESP-IDF framework. By structuring your code into reusable components, you can make your projects more modular and maintainable. You’ll learn how to create an RGB LED control component, configure it for different colors and brightness levels, and integrate it into your larger ESP32 applications. This approach will allow you to easily manage your code, scale your projects, and enhance the reusability of your components across different applications.

Read more 8 min read

Measuring analog inputs with ESP32 ADC (ESP-IDF)

The ESP32 comes with built-in analog-to-digital converters (ADC) that allow you to read analog signals from sensors and other devices. In this guide, we’ll walk you through how to use the ESP32 ADC with the ESP-IDF framework to measure analog inputs. You’ll learn about the ADC pins on the ESP32, how to configure the ADC for different resolutions and sampling rates, and how to calibrate the ADC for more accurate readings. We’ll also provide an example project where you can read values from an analog sensor, process the data, and display it. By the end of this tutorial, you’ll have a solid understanding of how to utilize the ESP32 ADC for your own projects.

Read more 5 min read

STM32 I2C Master using HAL

The STM32 microcontrollers provide a robust I2C module for communication with peripheral devices. In this tutorial, you’ll learn how to configure and use the I2C interface on STM32 as a master using the STM32 HAL (Hardware Abstraction Layer). We’ll guide you through the process of setting up the I2C module in STM32CubeIDE, configuring it to communicate with an I2C slave device, and reading data from the slave. The tutorial also includes logging the received data to a console for easy monitoring. By the end of this guide, you’ll be equipped to handle I2C communication for your STM32 projects.

Read more 5 min read

STM32 timer with STM32CubeIDE and HAL

Timers are crucial for managing time-based tasks in embedded systems, and STM32 microcontrollers offer a variety of hardware timers to meet these needs. In this article, you’ll learn the basics of STM32 hardware timers and how to configure them using STM32CubeIDE and the STM32 HAL (Hardware Abstraction Layer). We’ll guide you through setting up a timer, configuring it for periodic events, and utilizing timer interrupts. By the end of this guide, you’ll have a foundational understanding of STM32 timers, ready to use them for applications like PWM generation, delays, and time-based event handling.

Read more 7 min read

STM32 Serial Communication with UART

UART (Universal Asynchronous Receiver-Transmitter) is a fundamental feature of STM32 microcontrollers for reliable serial communication in embedded systems. In this blog post, we explore how to implement serial communication using STM32 UART with STM32CubeIDE. You’ll learn to configure the UART peripheral and use the HAL library to transfer data from an STM32 microcontroller to a host computer. With a step-by-step project guide, this tutorial is perfect for beginners and experienced developers looking to master UART communication for debugging, sensor interfacing, or data logging in STM32-based applications.

Read more 5 min read

ESP32 as I2C Master Tutorial (ESP-IDF)

The ESP32 is highly versatile and supports multiple communication protocols, including I2C. In this tutorial, we’ll guide you through configuring the ESP32 as an I2C Master using the ESP-IDF framework. You’ll learn how to initialize the I2C bus, set up the communication parameters, and send/receive data between the ESP32 (I2C Master) and an I2C Slave device. With clear examples, we’ll demonstrate how to communicate with common I2C peripherals like sensors or EEPROMs, giving you the foundation to integrate I2C devices into your ESP32-based projects.

Read more 5 min read

nRF52 as I2C Master using TWI/TWIM modules

The nRF52 series from Nordic Semiconductor offers robust support for I2C communication through its TWI (Two Wire Interface) and TWIM (TWI Master with EasyDMA) peripherals. In this post, we’ll break down the differences between TWI and TWIM, and show you how to use the nrf_drv_twi driver from the nRF5 SDK to set up the nRF52 as an I2C master. From initializing the bus to sending and receiving data, you’ll learn the essential steps needed to get your devices talking. We'll also walk through a hands-on example project to bring theory into practice — perfect for beginners and experienced developers alike.

Read more 7 min read

Using nRF52 as I2C Slave with TWIS peripheral

While the nRF52 is often used as an I2C master, it’s fully capable of acting as a slave device too — thanks to the TWIS (TWI Slave with EasyDMA) peripheral. In this detailed guide, we’ll explore the capabilities of TWIS and how it differs from the standard TWI interface. Using the nrf_drv_twis driver from the nRF5 SDK, we’ll walk through initialization, buffer handling, and event-driven communication to build a simple I2C slave project. Whether you're connecting your nRF52 to another microcontroller or a Raspberry Pi, this tutorial will help you integrate seamlessly as an I2C slave device.

Read more 8 min read

Measuring analog signal with NRF52 SAADC

Need to capture analog data on your nRF52? The SAADC (Successive Approximation Analog-to-Digital Converter) peripheral is your go-to for accurate, low-power analog signal measurement. In this article, we’ll break down the key features of the nRF52’s SAADC, including its differential mode, oversampling, and EasyDMA support. We’ll also walk through setting up the nrfx_saadc driver — part of the modern nrfx HAL — to configure channels, handle conversions, and read ADC values with minimal CPU load. With a practical example included, you’ll be up and running with analog data collection in no time.

Read more 7 min read

Using NRF52 as SPI Slave with SPIS peripheral

While the nRF52 series is often used as an SPI master, it can also serve as a reliable SPI slave thanks to the SPIS (SPI Slave with EasyDMA) peripheral. In this guide, we’ll explore how SPIS works, its advantages in slave mode communication, and how to configure it using the nrf_drv_spis driver from the nRF5 SDK. From setting up buffers and handling transfers to responding to master requests, we’ll walk through everything you need — including a working example project to get your nRF52 talking as a slave device on the SPI bus.

Read more 7 min read

nRF52 SPI/SPIM peripherals

The Nordic nRF52 series includes both SPI and SPIM peripherals, giving developers flexible options for serial communication. Whether you're dealing with sensors, displays, or memory chips, this guide will help you understand the differences between the standard SPI and the enhanced SPIM (SPI Master with EasyDMA) modules. We’ll walk through how to use the nrf_drv_spi driver from the nRF5 SDK to configure and manage SPI transfers efficiently. With clear examples and practical tips, you'll be ready to implement fast, reliable SPI communication in your next nRF52 project.

Read more 7 min read

Implementing a nRF52 DFU Bootloader over UART

Device Firmware Update (DFU) is a critical feature for maintaining and upgrading embedded devices in the field. In this article, you’ll learn how to implement a secure DFU bootloader on the Nordic nRF52 series using a UART (serial) connection. We'll guide you through setting up the bootloader using Nordic's nRF5 SDK, configuring the UART backend, and preparing your firmware for DFU packaging. With step-by-step instructions and a working test project, you’ll be able to update your device’s firmware securely and reliably — all over a simple serial link.

Read more 8 min read

nRF52 Device Firmware Update (DFU)

Device Firmware Update (DFU) is a powerful feature that allows you to remotely or locally replace the firmware on your nRF52 SoC without physical access to the device. In this article, we break down what DFU is, how it works on Nordic’s nRF52 platform, and what you need to integrate DFU into your own projects. From bootloader configuration and secure firmware packaging to transport options like UART, BLE, or USB, we’ll walk you through the essentials for building a robust and upgradeable embedded system.

Read more 8 min read

ESP32 Timers with ESP-IDF

Timers are essential for managing time-based events and tasks in embedded systems, and the ESP32 provides powerful hardware timers to make this task easier. In this article, you’ll learn how to configure and control the ESP32’s hardware timers using the timer driver in ESP-IDF. We’ll explore how to set up one-shot or periodic timers, handle timer interrupts, and use timers for a variety of time-sensitive applications such as PWM generation, timeouts, or scheduled tasks. By the end of this guide, you’ll have a solid understanding of how to utilize ESP32 timers for precise control in your projects.

Read more 6 min read

Debugging nRF52 projects with NRF_LOG module

Debugging embedded systems can be tricky — but Nordic’s NRF_LOG module makes it much easier when working with nRF52 projects. This article walks you through how to use the NRF_LOG module to output real-time debug messages over UART or RTT, helping you monitor your application’s behavior as it runs. We’ll cover its key dependencies, how to configure the backend, enable logging levels, and integrate it smoothly into your nRF5 SDK project. Whether you're chasing bugs or just want better visibility into your system, NRF_LOG is an essential tool in your debugging toolkit.

Read more 7 min read