This is an old revision of the document!
Electronic devices are being deployed in an ever-increasing array of roles: monitoring, wearables, and IoT devices are just a small sampling of the varying ways that these devices are becoming part of every day life. However, with more devices comes a greater demand to power them all, which is becoming an increasingly critical issue.
For small or mobile devices, the primary energy source has usually involved batteries in some fashion, but these are also the components with the shortest lifespan and most frequent need for replacement. The need to replace (much less dispose of) batteries for an ever-growing array of devices is quickly becoming a concern, particularly in applications where accessing the devices themselves is expensive or impractical (such as a nanosatellite deployed into orbit).
At the simplest level, batteryless devices replace a battery (or other power source) with an energy collector (solar, thermal, etc.) and at least one capacitor to both store power and drive the load. Depending on design needs and the task to be performed, two primary methods of energy management may be used:
It should be noted that the circuit designed above is the simplest implementation: more complicated configurations (such as Federated Energy Storage) are discussed in their own article.
Most batteryless devices are small, embedded circuits and so face the same limitations in memory, storage, and processing capability shared by their more typical kin. While there are unique challenges when utilizing an intermittent power source, many of the same restrictions apply: certain programming conventions that are suitable for a typical desktop/cloud application (e.g. recursive functions) are impractical or ill-advised in an embedded device.
By their very nature batteryless systems must reckon with transient, unpredictable power supplies and long periods of downtime. There are varying ways to approach handling a variable energy supply (as noted above), but all intermittent systems must be prepared to handle a complete loss of power in some fashion. This is further complicated by the fact that most programming languages (and most programs) are designed and built around the assumption of consistent uptime: the relatively short uptime of most intermittent power supplies means a device can spend all its uptime reinitializing (instead of performing useful work) if not properly accounted for.
To this end, checkpointing
Depending on the application, collected data may need to be processed within a given time limit to be of any use. It is entirely possible for a device to collect data, but be unable to process it within the limit for various reasons: as a result, a device should be able to account for this possibility in situations where it is relevant.
The lack of consistent power means that communication between two batteryless devices can be challenging, as there is no guarantee both parties will have enough power to be active at a given time. Most communication protocols are also not designed around intermittent computing, often with communication reset/termination timers that are shorter than a given device's recharge period.
Discussion