Skip to content

Solar-Powered IoT Devices

Besides WiFi access points, Philly Community Wireless deploys small networked devices, mainly PurpleAir air monitors at green spaces around the city and Meshtastic radio nodes. They run on 5V USB power and draw about a watt, but they still need a power source. PCW's existing air monitors (visible on the PurpleAir map) run off an outdoor, weatherproofed GFCI outlet, which rules out many sites that already have PCW internet. This page covers powering these devices from solar instead, with most of the detail on air monitors. For getting a device onto the network once it has power, see Configure IoT Devices.

The air monitor design below is a modified version of the solar mesh node that powers a 5V PurpleAir monitor instead of a 24V mesh access point. It was developed by Amaris Chen, PCW's University of Pennsylvania intern, building on Holobiont Lab's meshbox.

Power needs at a glance

Device Power input Typical draw Peak draw Per day
PurpleAir air monitor 5V, micro USB 0.18A (~0.9W) (PurpleAir) 0.6A (3W) ~21.6Wh
Meshtastic node (Heltec V3) 5V, USB-C ~0.15A (~0.75W), as reported by users 0.25A (1.25W) ~18Wh

These are the devices' own draws. Whatever powers them (converters, displays, controllers) adds to this; see the whole-box load below.

Solar air monitor box

From mesh node to air monitor

The Holobiont Lab box charges a 12V battery from a solar panel and boosts it to 24V for a Ubiquiti mesh access point (Holobiont documentation). The air monitor version keeps the charge controller, temperature disconnect, fuse, and Wago connectors, swaps in a smaller battery, and replaces the 12V to 24V boost converter with a 12V to 5V buck converter (a boost converter raises voltage; a buck converter lowers it) and a USB breakout for the monitor's power cable.

Wiring layout of the Holobiont Lab box: boost converter, charge controller and temperature disconnect above a 12V 50Ah LiFePO4 battery
Holobiont Lab design for powering a 24V Ubiquiti mesh node
Wiring layout of the air monitor box: PurpleAir monitor connected by USB to a breakout board and buck converter, with the charge controller and temperature disconnect above a 12V 10Ah LiFePO4 battery
Modified design for powering a 5V PurpleAir monitor

Parts list

Part What it does What we used Approx. cost
Weather-proof enclosure Holds everything except the panel and monitor Joinfworld 11.4 x 7.5 x 5.5 in junction box
Solar panel, 12V 10W Charges the battery ECO-WORTHY 13.3 x 8.1 in, 10W ~$29
MPPT charge controller Converts the panel's output into the right voltage to charge the battery 4A BQ24650 board, same as the solar mesh node (review)
Low-temperature disconnect Cuts the panel off below freezing, since LiFePO4 is damaged by charging in the cold XH-W1209 thermostat board, same as the solar mesh node (manual)
LiFePO4 battery, 12V 10Ah Stores power for nights and cloudy days NERMAK 12V 10Ah ~$40
In-line fuse holder + 2-3A fuse Protects against a short 18 AWG in-line fuse holders (Holobiont boxes come with one) ~$7.50 for five
F2 (6.3mm spade) crimp terminals Connect wires to the battery's F2 terminals 16 AWG spade terminals ~$13 for thirty
WAGO lever nuts Join wires without soldering, easy to take apart Same as the solar mesh node
Adjustable buck converter Steps 12V down to 5V DFRobot DFR0379 ~$5
Female USB A breakout board Turns the USB cable into screw terminals USB A breakout with screw terminals
Micro USB to USB A cable Carries power to the monitor
PurpleAir monitor The load PurpleAir Classic Plus ~$239

PCW also has one ECO-WORTHY 12V 20Ah battery (~$73, screw terminals) on hand.

Load

According to PurpleAir, the air monitors require 5V x 0.18A (~0.9W) to power continuously. This is about 21.6Wh per day, assuming continuous amperage. PurpleAir's spec sheet also lists short peaks of up to 600mA (3W), which the buck converter and cable need to handle.

PurpleAir says the sensors need a full 5V and a quality cable to run reliably; below that they start to misbehave. Voltage drops along a long or thin cable, so check the voltage at the monitor end, not just at the buck converter.

The PurpleAir air monitors have female micro USB ports for power. We use a male micro USB to male USB A cord, and so we need a female USB A breakout board with screw-in pins to split into positive and negative wire terminals.

Existing air monitors' exposed micro USB connections are not water-proof, but PCW has not encountered any issues regarding that. Nonetheless, we may consider sealing the connection with liquid electrical tape.

The 21.6Wh figure is the monitor alone. The box also powers itself around the clock, so size the battery and panel for the whole box:

Draw Current at 12.8V Per day
PurpleAir, after the buck converter's ~12% loss ~80mA ~24.5Wh
Low-temperature disconnect (XH-W1209): display always on, plus its relay 35mA idle, 65mA with the relay on (spec) ~11-20Wh
Buck converter's display, charge controller small, not measured
Total ~36-45Wh

With the settings in Assembly, the disconnect's relay stays on whenever it is warmer than the cutoff, which is most of the year, so expect the high end. A battery with a built-in low-temperature charge cutoff would remove the XH-W1209 and its draw entirely. To get the real figure for a box, measure the current at the battery with and without the monitor plugged in.

Buck converter

We use the adjustable DFR0379 buck converter available at UPenn's Detkin Lab. Its LM2596 chip has an average efficiency of 88%.

Notice that there is a button and an LED segment display on board. The display will show the detected input or output voltage, with a red LED lighting up on the corresponding side. The button switches between displaying input and output.

Before connecting the buck converter to the system, make sure that the output voltage is at 5V. This can be tested by inputting a 12-13V voltage from an external power supply. Black clip on IN- and red on IN+. Next, check the output voltage on the display. You can tune the output voltage by turning the tiny screw on the trimpot (CCW to decrease).

A bench power supply set to 13.06V feeding the buck converter, whose display reads 3.52V while a screwdriver turns the trimpot
In the process of tuning the trimpot

Battery

LiFePO4 (lithium iron phosphate) batteries are preferred over LiPo because LiFePO4 batteries are less prone to overheating, have a longer cycle life, and are more environmentally friendly. Typically 4-cell LiFePO4 batteries have a nominal voltage of 12.8V (see graph below for voltage at different battery life percentages).

Open circuit voltage of a 12V LiFePO4 battery against capacity: flat around 13V from 100% to about 25%, then dropping steeply to 10V at 0%
12V LiFePO4 voltage by remaining capacity (source)

For the box to last 3 days without sunlight at the whole-box load of ~36-45Wh a day, the battery needs about 8.5-10.5Ah, and more in practice, since the BMS shuts the battery off before it is truly empty. The 10Ah battery we used has little margin; the 20Ah battery PCW has on hand would give about six days.

The box uses the same temperature disconnect as Holobiont Lab's design, but if the battery's BMS (battery management system) has a low-temperature charge cutoff, the temperature disconnect will not be needed. An internal BMS also protects the battery from overcharge, over-discharge, over-current and short circuit. Almost every LiFePO4 battery has a BMS, but most cheaper ones do not cut off charging in the cold, so check the listing for that specifically.

Some batteries that may work:

  • ~$73 12V 20Ah 6.7"x7.2"x3" Screw Terminal BMS ECO-WORTHY
  • ~$40 12V 10Ah 5.9"x2.6"x3.7" F2 Terminal BMS NERMAK

Battery safety

The internal BMS can trip at low voltage, after which the battery terminals read 0V. This is called a sleeping battery; see how to wake up a sleeping LiFePO4 battery. In short: charge it at 14.6V and ~1A for our battery. During the Holobiont visit we charged at 1A, then 3A, then 5A.

The Holobiont Lab design includes a fuse holder near the positive terminal of the battery to prevent overcurrent, which can be caused by a short in the system. The fuse holder with a ring connector end may be transferred to the modified set up for screw terminal batteries. For F2 terminals, fuse holders and female F2 connectors may be purchased:

As an estimate, the max possible current through the battery is 10W / 12V = 0.83A. Fuses rated between 2-3A are some reasonable choices.

To keep the system off for troubleshooting or otherwise, disconnect the power wire from the Wago.

Solar panel

Pennsylvania averages about 4 peak sun hours a day over the year ("peak sun hours" means the day's sunlight expressed as hours of full-strength sun). Size the panel for December, though, not the average. Voltaic Systems, who tested solar setups for PurpleAir monitors, use about 2.2 sun hours a day for a south-facing panel in New York in December, a close match for Philadelphia. At the whole-box load of ~36-45Wh a day and about 20% losses (wiring, charge controller, heat, dirt), that works out to 36 / 2.2 / 0.8 = ~20W up to ~26W. Voltaic recommends a 20W panel for one monitor, and Holobiont's rule of thumb is to add 40% or more to a panel's rated wattage, since panels always produce less than rated.

The 10W panel on the first box makes only about 18Wh on a December day, less than the monitor alone uses, and about 32Wh on a clear September day, still short of the whole box.

Moreover, the voltage of the panel should be greater than the voltage of the battery for current to flow into the battery. A panel sold as "12V" actually puts out around 18V at its peak, which is what lets it charge a 12.8V battery.

This means that the ~$18 11.8"x6.8" 5V 5W USB C solar panel previously suggested is not good enough for the air monitor, though it has the ideal dimensions. The 12V 10W panels we compared are below; the same makers sell 20W and larger versions, which are the better choice for a box that runs through winter.

Assembly

Build and test the box on a workbench before taking it out. Holobiont Lab's meshbox documentation walks through the same parts one at a time.

  1. Tune the buck converter to 5V before it goes in the box; see Buck converter.
  2. Program the XH-W1209 low-temperature disconnect. Hold SET for 5 seconds to enter programming mode, use + and - to move through the settings, and SET to change one. Holobiont's settings are P0 (mode) C, P1 (hysteresis) 2, P2 (upper limit) 55°C, P3 (lower limit) 2°C, P4 (calibration) 0, P5 (start delay) 0 and P6 (high-temperature alarm) off. Boxes from Holobiont come already programmed. See the manual for more.
  3. Crimp F2 spade terminals onto the battery leads (for an F2-terminal battery like the NERMAK), and fit the in-line fuse holder on the positive lead, close to the battery. 6 steps to crimp ring terminals covers the technique.
  4. Mount the charge controller, temperature disconnect and buck converter on a backing plate inside the enclosure (Holobiont uses a fiberglass sheet), and attach any heatsinks with thermal tape.
  5. Wire everything through the Wago lever nuts, following the wiring diagram. The XH-W1209's first two terminals (its relay) go between the panel's positive wire and the charge controller's solar input; its other two take 12V power from the battery side. Tape its temperature probe to the side of the battery. The buck converter's output goes to the USB breakout's screw terminals.
  6. Connect the battery first, then the panel, then the monitor, and disconnect in the reverse order. This is the usual rule for solar charge controllers, since the battery powers the controller.
  7. Before closing the box, press the buck converter's button to check both sides: the input should read the battery voltage (about 13V when charged) and the output 5V. Then plug in the monitor and check that it powers on.
  8. On site, face the panel south, unshaded, tilted at about the site's latitude (roughly 40° in Philadelphia). Bring cables into the enclosure through cable glands to keep water out. The EPA's guide to siting air sensors covers where the monitor itself should go.

Deployment

The open enclosure mounted on a wooden fence, showing the charge controller, temperature disconnect, Wagos, buck converter and NERMAK battery The closed enclosure on the fence, with a PCW do-not-touch sticker on the lid The solar panel on an angled mount above the fence, with the PurpleAir monitor attached to a post below it

First deployment (September 2026)

The first box ran for three days before the monitor went offline. The battery had dropped to 10-11V (read on the buck converter's display), and its BMS then put it to sleep. A full 10Ah battery holds about 128Wh, enough for about five days of the monitor alone, so the box was drawing much more than planned. The whole-box load of ~36-45Wh a day is more than a 10W panel makes even on a clear September day (about 32Wh after losses), so any shade or cloud puts the battery into steady decline. The battery was recharged and the box left running without the monitor to rule out a charging fault. The next version should use a larger panel and battery (see Solar panel and Design alternatives).

Troubleshooting

  • When the input voltage is 13.0V and the solar panel has been exposed under direct sunlight for ~20-30 minutes, we empirically observe the input voltage rise to 13.1V. This can be used to verify if the solar panel is working properly during that instance of time.
  • The buck converter's display doubles as a battery voltmeter: press the button to switch it to input voltage. Compare against the voltage curve to estimate how much charge is left.
  • If the battery reads 0V, the BMS has put it to sleep; see Battery safety.
  • To keep the system off, disconnect the power wire from the Wago.
  • Check the fuse for continuity. A blown fuse points to a short during maintenance or a wiring mistake.
  • Check the low-temperature disconnect: is its display on, and is it near or below freezing? If so, the panel is deliberately cut off and the battery will not charge.
  • Measure the panel voltage at the charge controller input in daylight. It should be well above the battery voltage (around 18V for a "12V" panel); if not, check the panel wiring.

These checks are adapted from the troubleshooting section of Holobiont Lab's meshbox documentation. See also the troubleshooting section of Solar Mesh Nodes, which covers the shared parts of the box.

Design alternatives

Options worth considering for the next version, especially if PCW builds more of these:

  • A 20W panel instead of 10W, for more margin in winter
  • A battery with a built-in low-temperature charge cutoff, to drop the XH-W1209 and its constant draw (see the load table)
  • A PWM solar charge controller with built-in 5V USB outputs (about $17), which would replace the MPPT board, buck converter and USB breakout in one part
  • A 12V USB charger made for cars or boats in place of the buck converter and breakout board, which is easier for non-technical volunteers to swap out
  • Powering the monitor from an existing solar mesh node instead of its own box, or over PoE (see below)
  • 18650 cells, salvaged from e-bike batteries or cold-weather rated, though LiFePO4 remains the safer choice. Battery Hookup in Bensalem sells surplus cells.

Meshtastic nodes

PCW's Meshtastic nodes are Heltec V3 boards (from Iffy Books), built on an ESP32 chip and powered at 5V over USB-C. Users report an average draw of about 0.15A with peaks around 0.25A (1.25W), a little less than an air monitor. A small 5V 5W USB panel can't power one directly: output drops to nothing at night and sags on cloudy days, and the same goes for air monitors. Either way the device needs a battery between it and the panel.

Options Holobiont Lab suggested for Meshtastic specifically:

  • Off-the-shelf solar chargers made for USB-powered Meshtastic devices, such as the YetiWurks solar charger, which Holobiont has run for a couple of years. It has a protection board but no documented low-temperature disconnect; Holobiont has read of units running for years unmaintained in North Dakota and Minnesota.
  • Projects that repurpose the internals of solar lights, such as the Meshtastic Harbor Breeze solar node
  • ESP32 boards with a built-in solar input for charging 18650 cells

Powering IoT devices over PoE

Where a site already has power and a PCW install, an air monitor can instead be powered over Ethernet: a PoE switch or injector sends power down the cable, and a PoE splitter at the far end steps it down to 5V micro USB (or USB-C for a Meshtastic node). The adapter at the monitor end needs heat-shrink tubing to keep moisture out. The same approach can run a monitor off a solar box's battery through a PoE injector, as in the sketch below (editable source, opens in diagrams.net).

Diagram: a solar panel charges a battery in a weatherproof enclosure with cable glands; the battery feeds a PoE injector, which sends power down an Ethernet cable to a PoE to micro USB adapter covered in heat-shrink tubing, which powers the air monitor
Powering an air monitor from a solar box over PoE (PCW sketch, 2025)

Further resources