----------------------------------------
PicoGopher Part 5: take the power back
November 25, 2022
----------------------------------------
Written on my laptop after a flu, while
brew upgrade is running
----------------------------------------
Welcome to Part 5 of the PicoGopher journey! If you want to
see how everything started, you can find the previous parts
in my phlog at gopher://gopher.club/1/users/mala/ (also
mirrored at gopher://gopher.3564020356.org). You can find the
project's code at https://github.com/aittalam/PicoGopher.
We now have a tiny server which runs both on Gopher and HTTP
protocols. Both implementations are super simplified and can
definitely be improved, however I decided to postpone this in
favor of another aspect of this project. When I started this
journey [1] I claimed that, being low-power, PicoGopher could
be brought around while being powered with small batteries or
left somewhere indefinitely while being recharged with solar
panels. And in the last weeks you might have seen photos of
my "to go" prototypes on GitHub or Mastodon/Twitter. At the
end, though, a question still remains: how feasible is this?
That is, how much power does PG really take to run, how much
is it going to last on batteries, and is it realistic to
think it will just keep on working when recharged by solar
cells?
To answer these questions, today we will finally talk about
power: not the one which is abused by billionaires ;-) but
the one we will unleash to freely share information with
others (yeah that sounded a bit cheesy, but you got the gist
of it!)
========= Project status =========
Below you can see the current status of the project. The
steps marked as "x" have been completed, while those marked
as "+" are described in this post. The plan for today's post
was to completely cover the "power" section, but as soon as
I started playing with solar I realised that there's so much
to say about it that it deserves an episode on its own. So
please bear with me, and I will make the wait worth it :-)
- [x] connect to the WiFi
- [x] run a simple HTTP server
- [x] run a mockup Gopher server
- [x] load/save files
- [x] make the Gopher server not a mockup anymore:
- [x] translate gophermaps following gopher protocol
- [x] load any file from disk
- [x] set up the pico as an access point for geolocalised
access
- [x] make the server a bit more accessible
- [x] enable async
- [x] enable HTTP
- [x] captive portal with PicoDNS
- [+] powering PicoGopher
- [+] better understand power consumption
- [+] playing with batteries
- [ ] playing with solar
- [ ] better understand power saving
Speaking about worthiness, I do care a lot about making
something that is useful to others, both for what concerns
the project and its documentation which includes these posts.
The main concern I have about this now is that with anything
hardware related I am in uncharted territories, so bear with
me if I am writing something silly that just spawns out of my
inexperience and please please please give me feedback on
that, so I will be able to fix it and make these posts a bit
better!
And now with the uncharted territories...
======== Power consumption ========
The first thing we need to understand is what power the RasPi
needs to run PicoGopher. This splits into two main questions:
1. how can we measure how much power PicoGopher needs?
2. how can we translate this value to some practical metric
such as "I need this amount of batteries to run it for x
hours/days"?
The thread at [2] answers both of these questions and a few
more, such as "what is the simplest way to power a Pico". A
multimeter is used to measure the power consumption while
running code, and a simple back of the envelope calculation
is done to estimate how long it will take to drain a given
set of batteries.
At the cost of stating the obvious, power (P) is measured in
Watts and is the product of voltage (V) and current (I),
respectively measured in Volts and Amperes. This means that
once you have two of them, you can always easily calculate
the third one. Now, the back of the envelope calculation in
the above thread is as follows:
"Power consumption when running this code is approximately
0.1W (19mA at 4.99V), so 4 x AA batteries (@ 2,000mAh each)
would keep the Pico running for well over 4 days"
Note that the calculation is done by simply focusing on the
current (2000mAh / 19mA = ~100hrs). This is perhaps overly
simplified (as eg. it does not take into consideration the
battery efficiency) but I think it is good for a first
estimate. [3] shows a different approach which also takes
efficiency into consideration, to only later realise that
the project lasted ~60% of what they expected! So yeah, there
definitely is a science behind all of this and definitely
other variables we should take into consideration but, once
more, I am okay with something reasonable even if still rough.
About the number of batteries, note that as they are
connected in series (to get to a reasonable voltage for the
Pico) the current is not affected. If you are curious about
the voltage stuff, we'll get there in a sec.
=========== Measurements ==========
For the measurements I used an AT35 multimeter (15GBP on
Amazon, see https://www.youtube.com/watch?v=BK83N3X2oVs for
a review). To make a fair estimation of the consumption in a
real case scenario, I ran as much stuff simultaneously as
possible (not true: just some), spinning up Gopher, HTTP,
and captive portal, and sending requests repeatedly from
three different terminals. Each terminal requested something
different, respectively the main gopherfile, a large (174KB)
text file via Gopher, and the same file via HTTP.
Small trivia: the large file is the txt version of [4], the
11th document in Project Gutenberg and the first novel
uploaded there, aka Alice in Wonderland. The file is now part
of PicoGopher and available in the GitHub repo for testing...
and sharing!
The three commands I ran to measure consumption under heavy
load are:
- while true; do printf "11-0.txt\r\n" | nc 192.168.4.1 70; done
- while true; do printf "\r\n" | nc 192.168.4.1 70; done
- while true; do wget http://192.168.4.1/11-0.txt; done
The outcome of my measurements showed that PicoGopher usually
consumes about 60mA at rest (with WiFi on), and under heavy
load it went up to peaks of ~88mA a few times but in general
it was within a 70~74mA range.
======== Adding batteries =========
There are different methods to power a RasPi Pico on the
move. Pico's datasheet [5] provides a good description of
how to do it with one or multiple power sources or adding a
battery charger). The simplest way is also shown in [2]: you
just connect the power source to pins 39 and 38 (VSYS and
GND)... and that's it. The only problem left is understanding
how many batteries to use and choose the proper ones.
Simplest solution: regular AA/AAA batteries. AA hold some
2000mAH, while AAA about half ot it. Again this is super
approximated, and you might want to check [6] and [7] to get
more info about it (oof no matter what of these tiny details
one looks into, there's a whole new world behind each of
them!). To give you a rough idea, if we take an average
consumption of 80mA, AA batteries should last for 2000/80=25
hours.
How many batteries? The working voltage of the RasPi Pico W
is in the range of ~1.8V to 5.5V. This means that you can
use almost anything in range (neat!). As the voltage is not
constant but decreases while batteries discharge, you will
want to start with something which is way above the lower
threshold. This means you should be fine with 3xAA cells
(~3.0V to ~4.8V) or 3xAAA (smaller fingerprint, but will last
less). You can also use rechargeable ones: 3 or 4 as they
typically have lower voltages (~4.4V to ~5.2V), and you might
get as much as 2800mAh and 1300mAh with NiMH AAs and AAAs
respectively.
Speaking about rechargeable batteries, Li-Ion are a good
choice if you want something compact (you can pack a higher
voltage in a much smaller space) and that you can recharge in
many different ways. One option is using a LiPo SHIM for the
Pico [8]: its main advantage is that it is tiny, quite well
integrated with the Pico, and already manages both battery
overcharge and charging while simultaneously powering the
device. The main cons are that it's a bit pricy (7.50GBP) and
you need headers on the Pico.
A cheaper alternative with a bit less soldering to do
(#SolderItIntoExistence is my hashtag for the week!) is using
a TP4056 (see e.g. [9]) with a Schottky diod as explained in
[10]: we will delve deeper into this project next time as it
has been the reference for my solar prototype, but I wanted
you to know that you can also use it with USB as its main
power source.
=========== Conclusions ===========
We should now be able to estimate how much power PicoGopher
needs to run and for how long it should be able to run on a
given power source among different types of batteries. I have
collected some specs below to get an idea of what the best
choice could be for different applications and while e.g.
rechargeable AAs are great, Li-Ion (perhaps with a bigger
form factor and relative mAh) could be a good choice for a
self-contained, solar solution which what I will describe in
the next post.
Type mAh hrs@80mA
AA (x3-4, r) 2800 35
AA (x3, nr) 2000 25
Li-Ion (r) 1200 15
AAA (x3-4, r) 1100 13.75
Li-Ion (r) 500 6.25
As usual I think I barely scratched the surface here, and
there are many things I would like to delve deeper into (in
addition to solar of course), including
- reading how much charge the battery holds
- using the above, testing whether my prediction of battery
duration were reasonable :-)
- low power mode (e.g. when the battery level drops below
a given point the pico could go in sleep mode and restart
later when hopefully it has been recharged)
... ok, ok, I'll stop here. See you next time!
============ References ===========
[1] gopher://sdf.org:70/0/users/mala/phlog/2022-10-23%20-%20PicoGopher%20-%20Introduction
[2] https://forums.raspberrypi.com/viewtopic.php?t=300676
[3] http://raspi.tv/2013/controlled-shutdown-duration-test-of-pi-model-a-with-2-cell-lipo
[4] https://www.gutenberg.org/ebooks/11
[5] https://datasheets.raspberrypi.com/picow/pico-w-datasheet.pdf
[6] https://www.batteryequivalents.com/aa-batteries-size-types-and-equivalents.html
[7] https://www.batteryequivalents.com/aaa-batteries-size-chemistry-types-and-replacements.html
[8] https://shop.pimoroni.com/products/pico-lipo-shim
[9] https://www.amazon.co.uk/gp/product/B07BSVS842
[10] https://picockpit.com/raspberry-pi/raspberry-pi-pico-w-remote-weather-station-solar-powered-and-softap