A Library for Driving NeoPixels with the ESP32 Micro Controller

The NeoPixel is a very cool little device. It combines three LEDs (red, green, and blue) with a specialized microprocessor, all in a package about the same size as a traditional LED. These smart LEDs open up a wide range of new project possibilities because they reduce the amount of circuitry and processor pins that would otherwise be necessary to drive an array of lights. Read more on A Library for Driving NeoPixels with the ESP32 Micro Controller…

Cedux: Experimenting with the Redux Model in C

The world of embedded software development can feel like a very isolated place. Earlier in my career, when I was doing mostly embedded work, I remember often feeling jealous of my colleagues who were working on mobile and web applications. I would constantly hear them talking about exciting new libraries, frameworks, and tools with catchy names that supposedly made their lives easier. I was saddened by the lack of excitement and advancement of tools for those of us writing C. Read more on Cedux: Experimenting with the Redux Model in C…

5 Steps to Getting Started with Embedded Programing

I’ve been getting asked the question, “So how would I get started with embedded development?” more and more often lately.

This is actually a really tricky question. It’s not like, “How would I get started with Haskell?” or “How would I get started with Rust?” Embedded development is such a weird and diverse thing that it’s almost like asking, “How do I get started with programming?” except in an alternate universe where 128k is still a lot of RAM. I’m not sure where to even begin.

Read more on 5 Steps to Getting Started with Embedded Programing…

6 Reasons to Build a Firmware Test Suite

At Atomic, we build a lot of systems that incorporate device firmware talking to software. We also commonly interface with other firmware or software teams.

I believe every project that involves firmware talking to software should include a high-level suite of tests that are written against the firmware’s interface to the software (e.g. Bluetooth, Ethernet, USB, etc). Read more on 6 Reasons to Build a Firmware Test Suite…

Travis CI Now Monitoring Ceedling and Friends CMock/Unity!

We have updated Ceedling and release a new Rubygem to bundle the latest TDD counterparts, CMock and Unity, to utilize Travis CI to monitor the health of our tools at the ThrowTheSwitch GitHub organization!

Atomic Object has blazed the trail of bringing effective test-driven development (TDD) and continuous integration (CI) to C development for nearly a decade. When we embarked on this journey, very little (if any) support existed for the C language, so we rolled up our own.

  • Unity is a basic testing framework. It’s portable C, easy to configure, and runs on almost everything.
  • CMock is a framework that works with Unity to help you create mocks and stubs of interfaces to simplify testing.
  • CException is simple exception handling in C. It is significantly faster than full-blown C++ exception handling but loses some flexibility.
  • Ceedling is a build system that rolls up all the above into single Ruby gem!

Read more on Travis CI Now Monitoring Ceedling and Friends CMock/Unity!…

Callaloo Radio System: Part 2 – Building a Homebrew USB Device

At the end of part 1, the radio link between the receiver and the bathroom doors’ transmitters was working, but how does the receiver get its data where someone else could see it? I could have put a couple red/green LEDs on the receiver board itself, or wired it to some sort of display, but that doesn’t give much room for future expansion. (We may be remodeling the downstairs floor in a couple months, and adding another bathroom is likely. Other sensors could also use the same radio link.)

Read more on Callaloo Radio System: Part 2 – Building a Homebrew USB Device…

Callaloo Radio System: Part 1 – Setting Up a Radio System from Scratch


The bathroom on the main floor of our office is down a short hallway, so we can’t see whether the bathroom is available without looking around the corner. To solve this problem, we made an Arduino-based monitor for a reed switch (a magnetic switch) on the door, setting an LED red or green to indicate whether the bathroom is occupied or available.

Read more on Callaloo Radio System: Part 1 – Setting Up a Radio System from Scratch…