
A few weeks ago I learned about, and got energetic about, the Harbor Breeze solar repeater hack. I have by now constructed several Harbor Breeze (“HB”) repeaters using the RAK4631 WisBlock Kit (blog article) and several more using the Seeed Xiao nRF52840 & Wio-SX1262 Kit (blog article). But I am in the northern hemisphere, and it has been above freezing this whole time.
I now realize I need to worry about the fact that Winter Is Coming. It seems that almost everyone except me already knew that (a) it will supposedly ruin a lithium-ion battery if you try to charge it at a temperature that is below freezing, and (b) very few of the commonly used chips for charging control provide standalone protection against trying to charge when the temperature is below freezing.
In this blog article I try to set forth the nature and magnitude of the problem and possible workarounds.
A first bit of background is the general notion that one ought not to try to charge a lithium-ion battery if its temperature is below freezing (0°C or 32°F). You can click around on the Internet and find any number of web sites and discussion groups and blogs where this is stated as a firm rule. What people say is that when a lithium-ion battery is freezing cold, its internal electrolyte becomes thick, and the lithium ions move much more slowly. If you force an electrical current into the battery, the lithium ions cannot properly embed themselves into the anode (a process called intercalation). Instead, the ions build up on the surface of the anode as pure metallic lithium—a phenomenon known as lithium plating.
If you click around enough you can find some web sites that say that so long as you have the self-control to charge only “at 0.05C” you can nonetheless carry out charging below freezing. “At 0.05C” is an odd purportedly dimensionless expression; people who say this really mean that you are supposed take the capacity of the battery in Ampere-hours and divide by twenty to get a small number of Ampere-hours, and then trim off the word “hours”. This amount of current is thought to be safe for below-freezing charging.
I did find one article Cold Weather Charging of Lithium-Ion Batteries: Real-World Lessons from the Meshtastic Community that gave me some hope. The authors suggest that a number of factors help to explain why their solar repeaters did not fail in cold weather despite the worry about charging at below-freezing temperatures.

A typical Harbor Breeze battery (seen at right) has a claimed capacity of 1500 mAh and a smaller measured capacity of perhaps 1413 mAh (blog article). According to the “0.05C rule” this means you could safely charge below freezing so long as you have the self-control to do it at no more than about 70 mA.
It is easy, however, to get the notion that the better path is simply to refrain from trying to charge if the battery happens to be at a below-freezing temperature.
This brings us to integrated circuit chips that are designed to handle charging of lithium-ion batteries. There are quite a few chips that are designed to do this. Many such chips are specifically designed to receive charging current from a solar panel that generates 5V (and not some higher voltage). The HB solar panel is 5V. You can look at the specs for just about any commercially available ready-to-use LoRa mesh repeater and what you will see is that its solar panel generates 5V (and not some higher voltage).
There are plenty of people who will tell you that the chip ought to behave like this:
- The chip should be prepared to receive charging current that is 5V.
- There is some amount of current that ought to be the upper limit never to be exceeded, for charging of the battery (usually set by some external resistor connected to a programming pin on the chip).
- If you are charging up the battery and you notice that its voltage has gotten up to 4.2V, stop charging (because this means the battery is fully charged).
- If you are charging up the battery and you notice that its voltage has not yet gotten up to 4.2V, but is getting close to 4.2V, charge at a smaller level of current (because this means the battery is almost fully charged).
- If the battery is really hot, stop charging even if it is not full.
- If the battery is pretty cold (not quite down to freezing but near freezing), charge at a smaller level of current.
- If the battery is below freezing, stop charging even if the battery is not full. (This is what people would say who do not believe “the 0.05C rule”.)
Now let’s look at some actual chips that get used for controlling such charging.

The charging chip in the RAK4631 WisBlock Kit. At right you can see the schematic for the charging circuit for this kit. As you can see, the chip is a TP4054 controller (spec sheet) which is a five-terminal device. (By the way I will admit that this is absolutely the first time I ever encountered an IC with an odd number of pins!) A programming resistor of 2.7KΩ is provided, which tells the chip to limit its charging current to 297 mA. Close study of the spec sheet finds no hint or suggestion that the chip watches for a below-freezing temperature and acts differently by stopping the charging. The alert reader appreciates that the number 297 is bigger than the number 70. One would need to use a battery more than four times higher in capacity than the HB battery to satisfy the “0.05C rule” for below-freezing charging.
I measured the actual charging current with a 5V source and a battery that was at about 3.4V. The charging current was 141 mA. Yes I see that the number 141 is smaller than 297. Maybe this is a result of some “charging curve” programmed into this TP4054 chip, I don’t know.

The charging chip in the Seeed Xiao nRF52840 Kit. At right you can see the schematic for the charging circuit for this kit. As you can see, the chip is a BQ25101 controller (spec sheet) which is a six-terminal device. Just as with the previous chip, a programming resistor of 2.7KΩ is provided, but with this chip the result is supposedly that the chip limits its charging current to 50 mA.
But we also see that there is a second 2.7KΩ resistor which might be placed into service (in parallel with the above-mentioned resistor) if a certain pin AD8 (named as P0.13_HICHG) were pulled low. (I can guess that “HICHG” means “high charge”.)
As with the previous chip, close study of the spec sheet finds no hint or suggestion that the chip watches for a below-freezing temperature and acts differently by stopping the charging.
The alert reader appreciates that the number 50 is smaller than the number 70. It seems the HB battery is safe for below-freezing charging with this kit so long as HICHG is not pulled low.
I measured the actual charging current with a 5V source and a battery that was at about 3.4V. The charging current was 98 mA. This suggests that the firmware (here it was Meshcore 1.15.0) is indeed pulling the HICHG signal low.
And indeed I stumbled upon a Seed web page that discusses this.

The charging chip in the Lowes Harbor Breeze light. At right you can see the circuit board used in the HB light. The charging controller is circled device. There are no markings on this chip, and the marking on the circuit board (“TW1832-80”) is no help. Very close inspection of the chip indicates it is a five-pin device, which might make one think that it is the TP4054 controller mentioned above. If it were, then the resistors R1 and R2 which are in parallel and are 15 ohms each would program the charging current to be 130 mA. But I guess it cannot be the TP4054 because this chip also turns off the light during the day. The light only lights up at night.
I have no reason to think that this chip watches for a below-freezing temperature and acts differently by stopping the charging.
I measured the actual charging current with a 5V source and a battery that was at about 3.4V. The charging current was 57 mA. I note that the number 57 is smaller than 70.
Tentative conclusion. Let’s assume for sake of discussion that the “0.05C rule” can be trusted. If so, then as mentioned above this would mean that even below freezing, with the HB battery (1413mAh capacity) it would be okay to charge at up to 70mA.
- The observed behavior of the HB circuit board is that it charges at 57 mA. The number 57 is smaller than 70, so (again assuming the “0.05C rule” can be trusted) it is okay.
- The observed behavior of the RAK backboard is that it charges at 141 mA. (This is notably smaller than the predicted current from the spec sheet, namely 297 mA.) The number 141 is much bigger than 70, suggesting that below freezing, the battery would be harmed. One workaround would be to purchase and install a more expensive battery with a capacity of 2820 mAh or higher.
- The observed behavior of the Seeed controller is that it charges at 98 mA. The number 98 is bigger than 70, suggesting that below freezing, the battery would be harmed. One workaround would be to purchase and install a more expensive battery with a capacity of 1960 mAh or higher. Another workaround might be to modify the firmware to turn off HICHG.
All of these measurements used a battery that had been intentionally discharged to 3.4V. The alert reader will point out that the observed charging currents might have turned out to be different if the battery had had a lower or higher state-of-charge than 3.4V.
Having said all of this, I do not have independent reason to know whether or not the “0.05C rule” can be trusted. If it can be trusted, then it looks like a safer path (using the HB battery) would be to use the HB circuit board to control charging, and to avoid use of the onboard charging circuitry of either the RAK or Seeed devices. Another path might be to use the Seeed device and turn off HICHG.
The Meshcore firmware and how it handles HICHG? This raises the natural question “how does this part of the Meshcore firmware behave?” What one would hope is that the firmware would switch HICHG on and off as a function of ambient temperature: charge at a higher rate if the temperature is above freezing, but turn off HICHG if it is freezing or below. I clicked around here and the answer seems to be that HICHG is on constantly in certain variants of hardware, and is off for other variants — no temperature-related behavior. And as mentioned above, see the Seed web page that discusses this.
What do you think about this? Please post a comment below.
Leave a Reply