Add Pimoroni Pico LiPo battery example

pull/251/head
helgibbons 2022-02-17 11:16:49 +00:00
rodzic 2aace8cac9
commit 14cb47b4bb
2 zmienionych plików z 81 dodań i 6 usunięć

Wyświetl plik

@ -1,10 +1,15 @@
# This example shows how to read the voltage from a lipo battery connected to a Raspberry Pi Pico via our Pico Lipo SHIM, and uses this reading to calculate how much charge is left in the battery. # This example shows how to read the voltage from a LiPo battery connected to a Raspberry Pi Pico via our Pico Lipo SHIM...
# ...and uses this reading to calculate how much charge is left in the battery.
# It then displays the info on the screen of Pico Display or Pico Explorer. # It then displays the info on the screen of Pico Display or Pico Explorer.
# Remember to save this code as main.py on your Pico if you want it to run automatically! # Remember to save this code as main.py on your Pico if you want it to run automatically!
from machine import ADC, Pin from machine import ADC, Pin
import utime import time
import picodisplay as display # change "picodisplay" to "picoexplorer" if you're using a Pico Explorer
# Uncomment one of these lines, depending on what display you have
import picodisplay as display
# import picodisplay2 as display
# import picoexplorer as display
# Set up and initialise display # Set up and initialise display
buf = bytearray(display.get_width() * display.get_height() * 2) buf = bytearray(display.get_width() * display.get_height() * 2)
@ -19,12 +24,13 @@ full_battery = 4.2 # these are our reference voltages for a ful
empty_battery = 2.8 # the values could vary by battery size/manufacturer so you might need to adjust them empty_battery = 2.8 # the values could vary by battery size/manufacturer so you might need to adjust them
while True: while True:
# convert the raw ADC read into a voltage, and then a percentage
voltage = vsys.read_u16() * conversion_factor voltage = vsys.read_u16() * conversion_factor
percentage = 100 * ((voltage - empty_battery) / (full_battery - empty_battery)) percentage = 100 * ((voltage - empty_battery) / (full_battery - empty_battery))
if percentage > 100: if percentage > 100:
percentage = 100.00 percentage = 100.00
# draws the battery # draw the battery outline
display.set_pen(0, 0, 0) display.set_pen(0, 0, 0)
display.clear() display.clear()
display.set_pen(190, 190, 190) display.set_pen(190, 190, 190)
@ -32,10 +38,12 @@ while True:
display.rectangle(220, 40, 20, 55) display.rectangle(220, 40, 20, 55)
display.set_pen(0, 0, 0) display.set_pen(0, 0, 0)
display.rectangle(3, 3, 214, 129) display.rectangle(3, 3, 214, 129)
# draw a green box for the battery level
display.set_pen(0, 255, 0) display.set_pen(0, 255, 0)
display.rectangle(5, 5, round(210 / 100 * percentage), 125) display.rectangle(5, 5, round(210 / 100 * percentage), 125)
# adding text # add text
display.set_pen(255, 0, 0) display.set_pen(255, 0, 0)
if charging.value() == 1: # if it's plugged into USB power... if charging.value() == 1: # if it's plugged into USB power...
display.text("Charging!", 15, 55, 240, 4) display.text("Charging!", 15, 55, 240, 4)
@ -43,5 +51,10 @@ while True:
display.text('{:.2f}'.format(voltage) + "v", 15, 10, 240, 5) display.text('{:.2f}'.format(voltage) + "v", 15, 10, 240, 5)
display.text('{:.0f}%'.format(percentage), 15, 50, 240, 5) display.text('{:.0f}%'.format(percentage), 15, 50, 240, 5)
# uncomment for low battery alarm (Pico Explorer only, you'll need to have GP0 and AUDIO connected with a jumper wire)
# display.set_audio_pin(0)
# if percentage < 5: # if the battery is less than 5%
# display.set_tone(262) # then make an annoying noise
display.update() display.update()
utime.sleep(1) time.sleep(0.5)

Wyświetl plik

@ -0,0 +1,62 @@
# This example reads the voltage from a LiPo battery connected to Pimoroni Pico LiPo...
# ...and uses this reading to calculate how much charge is left in the battery.
# It then displays the info on the screen of Pico Display or Pico Explorer.
# With Pimoroni Pico LiPo, you can read the battery percentage while it's charging.
# Save this code as main.py on your Pico if you want it to run automatically!
from machine import ADC, Pin
import time
# Uncomment one of these lines, depending on what display you have
import picodisplay as display
# import picodisplay2 as display
# import picoexplorer as display
# Set up and initialise display
buf = bytearray(display.get_width() * display.get_height() * 2)
display.init(buf)
display.set_backlight(0.8) # comment out this line if you have a Pico Explorer, it doesn't have a controllable backlight
vsys = ADC(29) # reads the system input voltage
charging = Pin(24, Pin.IN) # reading GP24 tells us whether or not USB power is connected
conversion_factor = 3 * 3.3 / 65535
full_battery = 4.2 # reference voltages for a full/empty battery, in volts
empty_battery = 2.8 # the values could vary by battery size/manufacturer so you might need to adjust them
while True:
# convert the raw ADC read into a voltage, and then a percentage
voltage = vsys.read_u16() * conversion_factor
percentage = 100 * ((voltage - empty_battery) / (full_battery - empty_battery))
if percentage > 100:
percentage = 100
# draw the battery outline
display.set_pen(0, 0, 0)
display.clear()
display.set_pen(190, 190, 190)
display.rectangle(0, 0, 220, 135)
display.rectangle(220, 40, 20, 55)
display.set_pen(0, 0, 0)
display.rectangle(3, 3, 214, 129)
# draw a green box for the battery level
display.set_pen(0, 255, 0)
display.rectangle(5, 5, int((210 / 100) * percentage), 125)
# add text
display.set_pen(255, 0, 0)
if charging.value() == 1: # if it's plugged into USB power...
display.text("Charging!", 15, 90, 240, 4)
display.text('{:.2f}'.format(voltage) + "v", 15, 10, 240, 5)
display.text('{:.0f}%'.format(percentage), 15, 50, 240, 5)
# uncomment for low battery alarm (Pico Explorer only, you'll need to have GP0 and AUDIO connected with a jumper wire)
# display.set_audio_pin(0)
# if percentage < 5: # if the battery is less than 5%
# display.set_tone(262) # then make an annoying noise
display.update()
time.sleep(0.5)