Skip to content

Welcome to blog.mbedded.ninja!

Use the links below or the sidebar (wide screens)/menu (mobile) to navigate through the different sections of the site.

Categories

Recent Updates

June 2025 Updates

Removed Umami Analytics

The Umami analytics server (this post explains how I set it up) was costing me about US$6 each month, and it was a pain to maintain (it was crash every few months). I figured I got enough value from the time it was running --- I now have an approximate ratio of the actual traffic that is reported via a platform that ad blockers ignore (Umami) vs. that via a platform that gets blocked (Google Analytics). So I decided to remove it. Now I’m back to using Google Analytics.

Added Info on Zephyr Bluetooth

Added info on Zephyr Bluetooth to the site.

Added Info on LDRs Used In Audio Compressors

Added info on LDRs used in older audio compressors (e.g. the Teletronix LA-2A) to the site.

Added Info on Isolated Voltage Measurement

Added info on using isolated amplifiers to measure voltages which you want to remain isolated from the ADC/MCU to the Analogue-to-Digital Converters (ADCs) page.

Added Info on MMCX Connectors

Added info on MMCX connectors to the RF Connectors page.

Added Info on CICD with Code Composer Studio

Added info on CICD with Code Composer Studio to the site.

Added Info on Debugging Zephyr in VSCode

Added info on debugging Zephyr in VSCode to the site.

Added Info on 10 position 2x5 1.27mm pitch IDC Connectors

Added info on 10 position 1.27mm pitch IDC connectors to the site.

Added Info on Creating Linkable Zephyr Libraries Using CMake

Added info on creating linkable Zephyr libraries using CMake to the site.

NinjaTerm v4.20.0 Released

v4.20.0 of NinjaTerm has been released! A bunch of new features have been added such as timestamps, background/text colors and autoscroll lock on TX data.

Here is the complete changelog:

Added

  • Added the ability to add timestamps to the start of each line of received data. Timestamps can be enabled from the Settings->RX Settings menu.
  • Added the ability to select the default background, TX text and RX text colors from the Settings->Display menu. ANSI escape code colors commands will override these defaults. This also means you can color TX and RX text differently.
  • Added a “Clear app data and reload app” button to the Settings->General Settings menu which clears all app data in local storage (e.g. profiles, settings changed from their defaults) and reloads the app.
  • Added a local echo status indicator to the bottom toolbar.
  • Added support for receiving tab characters and handling them correctly with tab stops.
  • Added a small “Copy all text” button to each terminal which copies all the text in that terminal (including the scrollback buffer) to the clipboard.
  • Added autoscroll lock on TX setting to the Settings->Display menu. When enabled (the default), the TX terminal and TX/RX terminals will automatically scroll to the bottom when the user presses a key inside the terminal.

Changed

  • Improved the way app data stored in the browser’s local storage is updated to the latest version.
  • Reordered the left-hand toolbar icons so that the “Show the terminal” button is now the first one.
  • Made the logo in the left-hand toolbar a button which opens the terminal.

Fixed

  • Run unit tests (vitest) in CI after discovering they were not running.
  • Fixed broken unit tests.
  • Tooltip entry delay issues fixed in the quick settings accordion.

May 2025 Updates

Added Info on Azure IoT Hub

Added info on Azure IoT Hub.

Added Info on C++ Callbacks

I finished polishing off the updates to the C++ Callbacks page.

Added Info on the C++ One Definition Rule (ODR)

Added info on the C++ One Definition Rule (ODR) to the site.

Added Info on C++ Namespaces

Added info on C++ Namespaces to the site.

Added Info on C++ std::span

Added info on C++ std::span to the site.

Added Info on The Time Constant of the EMA Filter

Added equations, info and graphs on the time constant of the EMA filter to the site.

New Page on Power Monitor ICs

Added a new page on Power Monitor ICs to the site.

Removing Mains Noise from ADC Measurements

Added a new page on Removing Mains Noise from ADC Measurements to the site.

Added a New Page on the Dart Language and Flutter

Added a new page on the Dart language and Flutter to the site.

Added a New Page on Creating Python Executables with PyInstaller

Added a new page on Creating Python Executables with PyInstaller to the site.

Added Info on Coin Cell Battery Holders

Added info on coin cell battery holders to the site.

Added Info on nrfutil

Added info on nrfutil to the site.

Added Info on Linear Feedback Shift Registers (LFSRs)

Added info on Linear Feedback Shift Registers (LFSRs) to the site.

Added Info on Contactless CAN Bus Sniffers

Added info on Contactless CAN Bus Sniffers to the site.

April 2025 Updates

Added Info on InfluxDB

Added info on InfluxDB.

Added Info on Azure Functions

Added info on Azure Functions.

Added Info on JST ACH Connectors

Added info on JST ACH connectors.

Added Info on the nRF52 Near Field Communication Tag (NFCT) Peripheral

Added info on the nRF52 Near Field Communication Tag (NFCT) Peripheral.

Moved Wire-to-Board Connector Info Onto It’s Own Page

Moved the wire-to-board connector info from the Connectors page onto it’s own page Wire-to-Board (WTB) Connectors.

Added Info on Near Field Communication (NFC)

Added info on Near Field Communication (NFC).

Added Info on Pandas Saving to Pickle, Feather, and Parquet File Formats

Added info on Pandas saving to Pickle, Feather, and Parquet file formats.

Added Info on Flow Sensor Calibration

Added info on flow sensor calibration.

Moved the Antenna Design Page

Moved the antenna design page from under Electronics->Circuit Design to Under Electronics->Components and renamed it to from “Antenna Design” to “Antennas”.

Added Info on the Zephyr Watchdog API

Added info on Zephyr Watchdog API.

Added Info on x86-64 Assembly

Added info on x86-64 Assembly.

Corrected Info on C++ Magic Statics

Arthur O’Dwyer kindly pointed out via email that some of the info on C++ magic statics was incorrect. I’ve updated the page to correct this.

Added Info on Google Benchmark

Added info on Google Benchmark.

Added Info on C++ Callbacks

I updated the C++ Callbacks page, going into more detail on the different types of callbacks and a section benchmarking the performance of the different types of callbacks.

Added Info on Creating a Zephyr Login Shell

Added info on creating a Zephyr login shell.

March 2025 Updates

Added Wurth SKEDD IDC REDFIT Connectors

Added info on Wurth SKEDD IDC REDFIT Connectors.

Added Info on nRF52 GPIOs

Added info on nRF52 GPIOs.

Added Info on the nRF52 Comparator

Added info on the nRF52 Comparator.

February 2025 Updates

Added Info on nRF54L Series SoCs

Added info on the Nordic Semiconductor nRF54L Series SoCs including internal architecture block diagram, memory specifications, package types and tamper detection peripherals.

Added Info on the nRF9151 SoCs

Added info on the Nordic Semiconductor nRF9151 SoCs including a “Getting Started” guide.

Added Info on Test Jigs

Added info on test jigs including a section on pogo pins.

Added Info on Microsoft SQL Server

Added info on Microsoft SQL Server.

Added Info on Flow Sensors

Added info on flow sensors including a section on the YF-Bx family of flow sensors.

Added Info on Atomic Variables in Zephyr

Added info on atomic variables in Zephyr.

Added Info on Logging in Python

Added info on logging in Python.

January 2025 Updates

Added Info on DIP Switches

Added info on DIP switches including uses, photos and rotary DIP switches.

Added Info on Contributing to Zephyr

Added info on how to contribute to the Zephyr Project.

Added Info on LED Chemistries and LED History

Added info on LED chemistries.

Added Info on Reducing the Size of a GitLab Repository

Added info on how to reduce the size of a GitLab repository.

Added Info on Using Different SSH Keys for Different Repos

Added info on how to use different SSH keys for different Git repositories.

Added Info on Silencing Spurious Duplicate Unit Address Warnings

Added info on how to silence spurious duplicate unit address warnings.

2025

Child Pages

Happy New Year 2025

2024 saw 505k (505,000) page views for blog.mbedded.ninja! This was up from 436k last year, an increase of 69k or 16%. This is a placeholder for the reference: fig-stats-graphs shows the page views and other key stats per year.

Graphs of page views and content up to the end of 2024.

NinjaTerm went through 11 releases from v4.12.1 to v4.19.0. Some significant features were added, after it got turned into a PWA just before the start of 2024. It has 75 stars on GitHub and had 3.1k page views (as reported by Google Analytics).

NinjaCalc went through 2 releases from v3.5.2 to v3.5.4. These were minor releases which just fixed a broken URL and added the Umami analytics functionality. It has 30 stars on GitHub and had 52k page views (as reported by Google Analytics).

CppLinuxSerial went through 1 release from v2.8.1 to v2.8.2. This added changes to the CMake build system to allow add_subdirectory() to work correctly. It has 387 stars on GitHub.

Blog page views were based on a combination of Umami and Google Analytics. Umami was used were data was available due to it not being blocked by ad blockers, otherwise Google Analytics was used. Google Analytics values were adjusted to “Umami” values based on the average difference between the two. The average difference was calculated over all months that both were available. This is a placeholder for the reference: tbl-2024-page-views shows the page views for each month from the different analytics services. These were used to create This is a placeholder for the reference: fig-stats-graphs.

MonthUmamiGoogle AnalyticsUmami (interpolated)
Jan n/a 41k 54k
Feb n/a 42k 55k
Mar n/a 33k 43k
Apr 40k 30k 40k
May 40k 30k 40k
Jun 36k 32k 36k
Jul 39k 33k 39k
Aug n/a 28k 37k
Sep n/a 26k 34k
Oct 47k 30k 47k
Nov 44k 37k 44k
Dec 36k 24k 36k
Total n/a 386k 505k
The blog page views for each month from the different analytics services.

For all months in which data was available for both, Umami reported 282k views, and Google Analytics reported 216k views. Umami is 31% higher than Google Analytics.

This is a placeholder for the reference: fig-engagement-pages-and-screens shows the top 10 most popular pages, ranked by number of page views.

The top 10 most visited pages of 2024.

Blog Acquisition

This is a placeholder for the reference: fig-traffic-acquisition shows the top 7 sources of acquisition traffic in 2024. As usual, most of the traffic was from organic search (e.g. Google search engine).

Top 5 sources of acquisition traffic in 2024.

Blog Word, Page and Image Counts

At the end of 2024 the site had 704k words, up from 639k words last year (an increase of 65k). These words were spread over 1313 pages (up from 1221 pages last year), and included 3,222 images (an decrease of 1,296 from 4,518 images images last year). Even though many new images were added last year, the total dropped because I purged all of the redundant images that were still hanging around in the public/ directory from when the site was migrated away from Wordpress.

Achievements in 2024

  • The blog was migrated from Hugo to Astro.js. I’m really happy with the change, as Astro.js component syntax is much clearer than Hugo’s, and Astro.js lets me use React components if needed (I use React on a number of other projects).
  • I fully embraced the .webp image format (which has great compression size), and almost all new raster images are now in this format. .svg is still used for vector images.
  • Site-wide search was added to the blog. This became easier to implement after the migration to Astro.js.
  • Added a “cover image” feature to each page. Each page can now have a cover image assigned to it (a piece of metadata in the frontmatter). This cover image is used in the parent page’s “child pages” section to display beside the page description. It is also used for the social media preview image.
  • Added figure, table and equation numbering support (I had this in Hugo, but lost it when migrating to Astro.js).
  • NinjaTerm got heaps of new features added, after it got turned into a PWA just before the start of 2024.

Plans For The 2025 Year

  • Add more content to the blog (as always!).
  • Keep adding features to NinjaTerm.
  • Make sure CppLinuxSerial can work with CMake’s FetchContent feature (it’s an easy way to include external dependencies).

December 2024 Updates

Add Relay Contact Forms Info

Added information about relay contact forms, e.g. Form A, Form B, Form C, Form D, and Form X.

Added a Page on Chip Carrier Packages

Added information about chip carrier packages, including PLCC, LCC, LCCC, and BCC.

Started a Page on Designing a HAL in C++

Added information about designing a HAL in C++.

Started a PCB Rework Guide

Started a page on PCB reworking.

Added Info on the MFF2 (DFN-8) Package Used For eSIMs

Added information about the MFF2 (DFN-8) package used for eSIMs.

November 2024 Updates

Added New Page On Creating Digital and Analogue Delays

Added a new page on creating digital and analogue delays. This includes delays using RC/Schmitt triggers, 555 timers, long pieces of wire, delay line ICs, bucket brigade delay ICs, and microcontrollers.

Added New Page on Bucket Brigade Devices

Added a new page on Bucket Brigade Devices.

Added Info on Zephyr’s nsi_exit()

Added more info on Zephyr’s native_sim board to the Zephyr page.

Added Info on Zephyr’s State Machine Framework

Added info on Zephyr’s State Machine Framework (SMF).

Added Info on Dry Relay Contacts

Added info on what is meant by “dry” contacts in the context of relays to the Mechanical Relays page.

Added New Pages on SOD-57 and SOD-64 Component Packages

Added new pages on the SOD-57 and SOD-64 component packages.

Updated the Object-Orientated C Page

Updated the Object-Orientated C page with info on polymorphism and testing.

October 2024 Updates

IEEE 2030 Smart Grid Interoperability Communication Protocol

Added information about the IEEE 2030.5 Smart Grid communication protocol.

Makefiles

Added information on changing directory and detecting the operating system in a Makefile.

Cellular

Added information on LPWAN (cellular comm. protocols designed for embedded devices/IoT), including LTE Cat M and LTE Cat NB (NB-IoT).

Simple Network Management Protocol (SNMP)

Added information on the Simple Network Management Protocol (SNMP), including network hierarchy, versions, and traps.

Running GitLab Pipelines Locally

Added information on how to run GitLab pipelines locally using the gitlab-ci-local tool.

Added a Astro.js Table Component

To support data-rich tables in .mdx files, I created a Table component.

The Table component allows you to pass in the data as a Javascript object, and it will automatically create the headers and rows from this.

Using Dev Containers for Firmware Development

Added information on how to use dev containers for firmware development.

Add Info on ESP32 and ESP-IDF

Added info on ESP32 SoCs and ESP-IDF.

Added Equation Referencing Support

When moving from MathJac to Katex (as part of the move from Hugo to astro.js), I lost the ability to reference equations from within text as Katex does not support the \label and \ref commands with automatically numbered equations.

To get around this, I add \htmlId{}{} markers in the Katex and implement the reset of the logic for equation referencing in the client-side IRefClientScript.js script (which already does the figure and table referencing).

Added Resistor Node Analysis Info

Added a convoluted resistor network example to show how to analyse the nodes in a resistor network to determine whether resistors are in series or parallel.

Added Info on Kirchhoff’s Circuit Laws

Added a new page on Kirchhoff’s Circuit Laws.

Added Info on Google Cloud

Added a new page on Google Cloud, including info on Firebase and the Firebase CLI.

Fixed Missing Square Root Symbols

I discovered this month that square root symbols were not rendering in any equations across the site. After much digging, I found at that this was because some Starlight CSS was messing with the svg used to render the square root symbol.

The offending CSS from Starlight was:

.sl-markdown-content :is(img, picture, video, canvas, svg, iframe):not(:where(.not-content *)) {
display: block;
max-width: 100%;
height: auto;
}

Specifically, it is the height: auto; which selects svg. Katex uses an svg to draw the square root symbol in equations (many other parts of the equation are not svg, which is why you may not notice anything is amiss!). I added the following CSS to custom.css to fix this:

custom.css
/**
This CSS fixes issue where \sqrt{} was not being rendered in Katex, due to a Starlight Css svg height rule
*/
.katex-html svg {
height: inherit;
}

Split the RF Info Into It’s Own Page

The RF connector info on the Connectors page was brought out onto it’s own child page. Info on reverse-thread SMA connectors was added.