This article was originally published in 2016 at embedded.com. The formatting of the original article has degraded, so I am re-offering this article as a downloadable PDF.
Many Internet of Things (IoT) devices incorporate cellular modules to enable the device’s internet access. Incorporating a self-contained cellular module into an IoT device’s design has many advantages, yet the complexity and associated communication delays of the cellular network remain. If this inherent complexity is not properly addressed by the device’s microcontroller firmware, then the end user may be exposed to erratic behavior induced by cellular network latency. Even if the device does not require user interactions, ignoring the impact of the cellular network may induce timing jitter in recorded sensor readings with the potential of invalidating the usefulness of the data. To fully solve these challenges, we must embrace “Extreme Asynchronous” event driven firmware design. This article was inspired by legacy code improvement projects where the author was requested to improve IoT devices exhibiting faults induced by firmware exposed to the delays inherit in the cellular system.