Firmware Development

Without revealing too much, this was a product already in the customer’s hands that needed some modification to help it meet their specific brightness requirements

A test fixture built to verify a fix for a problem we spotted during field installations. It was physically demanding work, climbing up and down silos to install the units. The device spends most of its life in a low-power sleep state, waking periodically to take a measurement and transmit the results. The problem: the sleep interval was fixed. After installation there was no immediate way to know whether it had ever successfully connected to the cellular network. The obvious solution would have been a real-time clock, but the hardware was already in production. Looking at the schematics, we verified that there was at least one line we could use for communicating between the main micro and the low-power one responsible for sleep timing, enough to implement a pseudo-RTC. The main micro could transmit a sleep duration to the other. Out of the box the device wakes every five minutes, frequent enough to verify connectivity during installation. Once it connects, it gets a new sleep value, typically a few hours, preserving battery life long term. This fixture ran prototypes through thousands of test cycles to verify the approach before we flashed production devices. It’s been working in the field since.

Using an oscilloscope to debug a software UART on a PIC without a debug monitor.

I had an idea to use nfc as a replacement for a physical button, useful, for example, when the end device is buried in the dirt and adding one is impractical. This is a simple demonstration of how it might work, no additional software required on the phone.

RP2040 configured as a flash drive, with a Raspberry Pi scripting connection/disconnection test cycles over a UART.


An ESP8266-based status indicator driven by Azure IoT Hub messages.