← Projects
electronics intermediate 1 hr ago ◯ 4 min read

Build a Solar-Powered Feather Ecosystem Data Logger: FeatherWing Stacking and Battery Charging

Build time: 3-4 hours (assembly and firmware), plus 1-2 days outdoor burn-in test
Tools needed: Soldering iron and solder (for stacking headers), Phillips screwdriver, drill or step bit (enclosure cable gland and vent holes), USB-C cable, Arduino IDE or CircuitPython
Parts List
adafruit featherfeatherwingesp32solar powerlipodata loggerbme280ds3231deep sleepenvironmental sensor

Adafruit's Feather ecosystem solves a problem most microcontroller projects run into eventually: you want a sensor board, a display, a battery charger, and maybe an SD card logger, and you don't want to wire and debug all of it on a breadboard from individual modules. Feather boards share a common footprint and pinout, and "FeatherWings" stack directly on top of a Feather main board (and on top of each other, using stacking headers) without any point-to-point wiring at all. This project builds a solar-powered environmental data logger by stacking three off-the-shelf FeatherWings on an ESP32 Feather main board — no custom PCB, no breadboard, just headers and standoffs.

Why Feather Instead of a Breadboard Build

A logger like this — sensor input, SD card storage, a real-time clock for accurate timestamps, and solar/battery power management — is normally four or five separate modules with their own wiring, their own voltage requirements, and their own failure points at every jumper wire. The Feather ecosystem's stacking header standard means each of these functions is a board you plug directly onto the one below it: I2C, SPI, and power rails are already routed through the header pins, so stacking a sensor Wing, then an SD/RTC Wing, on top of a Feather main board gives you a fully wired system with zero point-to-point connections beyond the initial header soldering.

Parts List

Assembly: Stacking Order Matters

Solder female stacking headers onto the ESP32 Feather main board if it didn't ship pre-soldered, then stack the RTC/SD Wing directly onto it, and the BME280 sensor Wing on top of that (order between these two doesn't matter electrically since both share the I2C bus and use unique addresses). The solar charger Wing is the one exception to simple stacking — it sits between the battery/solar input and the Feather's own power input, so most builds mount it as the bottom-most board in the stack, with the LiPo battery and solar panel JST connectors wired directly into it, and its output header passing regulated power up through the stack to the Feather main board above it.

Layer (bottom to top)BoardFunctionBus Used 1Solar Charger FeatherWingBattery charge management, solar MPPT-lite regulationPower only (no data bus) 2Feather ESP32 V2Main compute, WiFi, deep sleep control— 3DS3231 RTC + SD AdaloggerAccurate timestamps, local CSV loggingI2C (RTC) + SPI (SD) 4BME280 Sensor WingTemperature, humidity, barometric pressureI2C

Firmware: Deep Sleep Between Readings

Since this runs on solar and battery rather than mains power, the firmware's job is mostly about not staying awake longer than necessary. The logging loop: wake from deep sleep, read the DS3231 for the current timestamp, take a BME280 reading, append a CSV line to the SD card with the timestamp and reading, then call `esp_sleep_enable_timer_wakeup()` and go back into deep sleep for your chosen interval (15-60 minutes is typical for environmental logging). ESP32 deep sleep current draw is in the tens of microamps range, which is what makes a 2000mAh LiPo backed by even a small 2W solar panel viable for months of unattended outdoor operation, versus the milliamps-range draw of leaving the board fully awake and polling continuously.

Power Budget Reality Check

A 2W solar panel in reasonable daylight (not direct optimal sun, accounting for cloudy days and winter angle) realistically delivers well under its rated output averaged across a day, so don't oversize your wake interval expectations based on the panel's peak rating alone. For a mid-latitude outdoor deployment logging every 30 minutes, a 2W panel and 2000mAh battery combination generally maintains charge through several consecutive overcast days before drawing down, but a multi-week deep winter stretch with minimal sun will eventually deplete the battery faster than the panel replenishes it — size the panel and battery up if your deployment location and season demand it, rather than assuming the smallest parts will always keep up.

Weatherproofing the Enclosure

The stack itself has no weather sealing, so a vented enclosure is mandatory for any outdoor deployment — vented rather than fully sealed, because the BME280 needs airflow to read ambient conditions accurately rather than the trapped, self-heated air inside a closed box. Mount the solar panel externally with its cable routed through a sealed cable gland, keep the stack itself on standoffs above any condensation that collects at the bottom of the enclosure, and orient any enclosure vents downward-facing or baffled so rain doesn't blow directly onto the sensor.

The result is a genuinely unattended environmental logger you can leave running in a shed, greenhouse, or backyard for months, built entirely from stackable boards with no custom wiring harness to debug. It's also a good template for swapping in other Wings later — a NeoPixel Wing for a status indicator, a LoRa Wing to transmit readings instead of only logging them locally — without touching the mechanical assembly at all.