I recently decided to experiment with using Zephyr to build applications for my STM32 based EmbLynx board. I found the process of developing custom board files and getting developing USB CDC functionality very cumbersome; despite having some familiarity with device trees. I worked on a simple USB CDC project for 3-4 days straight. I did…
Through hole class D amplifier PCB design
In this blog entry, the design of an all through hole class D amplifier board based around the TPA3122D2 (or the pin compatible TPA3125D2) IC will be covered. The TPA3122D2 & the TPA3125D2 are the only through hole class D amplifier ICs that I’m aware of. The TPA3122D2 IC is a stereo 15W class D…
Redirecting printf to the serial port on the STM32 with Newlib-Nano
In this blog entry, standard printf redirection to the serial port on STM32 microcontrollers (STM32G474RE specifically) will be covered via the standard Newlib-nano. Whether you create an new STM32 project with Visual Studio Code (VSC) + STM32Cube plugin or the STM32CubeIDE, both project setups will automatically add newlib-nano and syscalls.c and sysmem.c to the project….
Why I2C buses get stuck, and how to recover them on the STM32
In this blog entry, I’d like to focus on the I2C ‘stuck bus’ problem. I first encountered this bug when trying to read data from three different I2C sensors all integrated on the SENSEVAL-SCB4XV1 DIL24 board for my smart environmental monitoring system project. I will not cover the basics of the I2C bus here. For…
Introducing EmbLynx. An embedded systems development board based on the STM32G474RE microcontroller
The EmbLynx board is a development board for the STM32G474RE micro-controller. The STM32G474RE is a mainstream ARM Cortex-M4 micro-controller (running up to 170 MHz) heavily optimized as a mixed-signal system-on-chip (SoC). It integrates extensive analog infrastructure alongside math accelerators designed for digital power conversion, motor control, and advanced sensing applications. Overview of the Peripherals on…
IoTLynx. A new maker-friendly IoT development board
IoTLynx is a new microcontroller development board based on Espressif’s ESP32-C6 microcontroller (ESP32-C6-MINI-1module). Designed with accessibility in mind, the IoTLynx platform caters to makers, hobbyists, and newcomers to programming and electronics. Though the board supports C programming, it was specifically designed to run MicroPython—a choice that aligns with its philosophy of ease of use. With…
Interfacing a 4 Digit Seven Segment Display with a Raspberry Pi
The gpiod library (libgpiod) is the modern, kernel-recommended way to interact with GPIO pins on Linux systems like the Raspberry Pi. The latest 2.x API represents a significant improvement over the older sysfs interface and the 1.x API, offering better performance, cleaner syntax, and more reliable hardware access. To deepen my understanding of the Linux…
IO μHat for the Raspberry Pi Zero 2W
In this blog entry, I will introduce my IO μHat (microHat) for the Raspberry Pi Zero 2W. This particular μHat provides: The IO μHat also hosts an I2C EEPROM as per the μHat specifications. The configuration of this EEPROM will be covered in a future entry. The schematic is shown below: Both the GPIO expander…
Interfacing an HD44780 LCD to a Raspberry Pi with Kernel Drivers
This blog entry demonstrates how to interface an HD44780 character LCD to a Raspberry Pi Zero 2W, using Linux kernel drivers. This approach should also work on other Raspberry Pi single-board computers. Configure and load the HD44780 kernel module at boot First, you’ll need to load the correct HD44780 Linux kernel module. This will only…
IoTIS Daughterboard: 16 Channel Servo Motor Controller
The 16-channel servo motor controller is yet another Arduino shield-compatible, IoTIS daughterboard reference design. It is based around the PCA9685 Pulse Width Modulation (PWM) controller integrated circuit (I.C.). The PCA9685 has 12-bit resolution. It can control up to 16 LEDs. Thanks to its ability to output a variable frequency ranging from 1526Hz to 24Hz, it…







