From b8110f390559fbaa335ae9f517098f4b5b253cc5 Mon Sep 17 00:00:00 2001 From: helgibbons <50950368+helgibbons@users.noreply.github.com> Date: Thu, 25 Aug 2022 17:11:13 +0100 Subject: [PATCH] Update LiPo examples to use PicoGraphics --- .../{battery.py => battery_pico.py} | 43 ++++++------- .../{battery.py => battery_pico_display.py} | 39 ++++++----- .../battery_pico_explorer.py | 64 +++++++++++++++++++ 3 files changed, 102 insertions(+), 44 deletions(-) rename micropython/examples/pico_lipo_shim/{battery.py => battery_pico.py} (53%) rename micropython/examples/pimoroni_pico_lipo/{battery.py => battery_pico_display.py} (59%) create mode 100644 micropython/examples/pimoroni_pico_lipo/battery_pico_explorer.py diff --git a/micropython/examples/pico_lipo_shim/battery.py b/micropython/examples/pico_lipo_shim/battery_pico.py similarity index 53% rename from micropython/examples/pico_lipo_shim/battery.py rename to micropython/examples/pico_lipo_shim/battery_pico.py index 2cd0f659..ad2e1ed8 100644 --- a/micropython/examples/pico_lipo_shim/battery.py +++ b/micropython/examples/pico_lipo_shim/battery_pico.py @@ -1,28 +1,30 @@ -# 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. +# 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. # Remember to 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 +# change to DISPLAY_PICO_DISPLAY_2 for Pico Display 2.0 +from picographics import PicoGraphics, DISPLAY_PICO_DISPLAY +display = PicoGraphics(display=DISPLAY_PICO_DISPLAY, rotate=0) -# 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 as it doesn't have a controllable backlight +display.set_backlight(0.8) -vsys = ADC(29) # reads the system input voltage -charging = Pin(24, Pin.IN) # reading GP24 tells us whether or not USB power is connected +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 # these are our 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 +# Create some pen colours for drawing with +BLACK = display.create_pen(0, 0, 0) +GREY = display.create_pen(190, 190, 190) +GREEN = display.create_pen(0, 255, 0) +RED = display.create_pen(255, 0, 0) + while True: # convert the raw ADC read into a voltage, and then a percentage voltage = vsys.read_u16() * conversion_factor @@ -31,30 +33,25 @@ while True: percentage = 100.00 # draw the battery outline - display.set_pen(0, 0, 0) + display.set_pen(BLACK) display.clear() - display.set_pen(190, 190, 190) + display.set_pen(GREY) display.rectangle(0, 0, 220, 135) display.rectangle(220, 40, 20, 55) - display.set_pen(0, 0, 0) + display.set_pen(GREEN) display.rectangle(3, 3, 214, 129) # draw a green box for the battery level - display.set_pen(0, 255, 0) + display.set_pen(GREEN) display.rectangle(5, 5, round(210 / 100 * percentage), 125) # add text - display.set_pen(255, 0, 0) + display.set_pen(RED) if charging.value() == 1: # if it's plugged into USB power... display.text("Charging!", 15, 55, 240, 4) else: # if not, display the battery stats 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) diff --git a/micropython/examples/pimoroni_pico_lipo/battery.py b/micropython/examples/pimoroni_pico_lipo/battery_pico_display.py similarity index 59% rename from micropython/examples/pimoroni_pico_lipo/battery.py rename to micropython/examples/pimoroni_pico_lipo/battery_pico_display.py index 56e0f79e..373e314a 100644 --- a/micropython/examples/pimoroni_pico_lipo/battery.py +++ b/micropython/examples/pimoroni_pico_lipo/battery_pico_display.py @@ -1,21 +1,17 @@ -# 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. +# 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 Display 2.0). # 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 +# change to DISPLAY_PICO_DISPLAY_2 for Pico Display 2.0 +from picographics import PicoGraphics, DISPLAY_PICO_DISPLAY -# Uncomment one of these lines, depending on what display you have -import picodisplay as display -# import picodisplay2 as display -# import picoexplorer as display +display = PicoGraphics(display=DISPLAY_PICO_DISPLAY, rotate=0) -# 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 +display.set_backlight(0.8) vsys = ADC(29) # reads the system input voltage charging = Pin(24, Pin.IN) # reading GP24 tells us whether or not USB power is connected @@ -24,6 +20,12 @@ 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 +# Create some pen colours for drawing with +BLACK = display.create_pen(0, 0, 0) +GREY = display.create_pen(190, 190, 190) +GREEN = display.create_pen(0, 255, 0) +RED = display.create_pen(255, 0, 0) + while True: # convert the raw ADC read into a voltage, and then a percentage voltage = vsys.read_u16() * conversion_factor @@ -32,30 +34,25 @@ while True: percentage = 100 # draw the battery outline - display.set_pen(0, 0, 0) + display.set_pen(BLACK) display.clear() - display.set_pen(190, 190, 190) + display.set_pen(GREY) display.rectangle(0, 0, 220, 135) display.rectangle(220, 40, 20, 55) - display.set_pen(0, 0, 0) + display.set_pen(BLACK) display.rectangle(3, 3, 214, 129) # draw a green box for the battery level - display.set_pen(0, 255, 0) + display.set_pen(GREEN) display.rectangle(5, 5, int((210 / 100) * percentage), 125) # add text - display.set_pen(255, 0, 0) + display.set_pen(RED) 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) diff --git a/micropython/examples/pimoroni_pico_lipo/battery_pico_explorer.py b/micropython/examples/pimoroni_pico_lipo/battery_pico_explorer.py new file mode 100644 index 00000000..5630141d --- /dev/null +++ b/micropython/examples/pimoroni_pico_lipo/battery_pico_explorer.py @@ -0,0 +1,64 @@ +# 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 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 +from pimoroni import Buzzer +from picographics import PicoGraphics, DISPLAY_PICO_EXPLORER + +display = PicoGraphics(display=DISPLAY_PICO_EXPLORER) + +buzzer = Buzzer(0) + +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 + +# Create some pen colours for drawing with +BLACK = display.create_pen(0, 0, 0) +GREY = display.create_pen(190, 190, 190) +GREEN = display.create_pen(0, 255, 0) +RED = display.create_pen(255, 0, 0) + +while True: + buzzer.set_tone(0) + + # 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(BLACK) + display.clear() + display.set_pen(GREY) + display.rectangle(0, 0, 220, 135) + display.rectangle(220, 40, 20, 55) + display.set_pen(BLACK) + display.rectangle(3, 3, 214, 129) + + # draw a green box for the battery level + display.set_pen(GREEN) + display.rectangle(5, 5, int((210 / 100) * percentage), 125) + + # add text + display.set_pen(RED) + 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) + + # Low battery alarm! (you'll need to have GP0 and AUDIO connected with a jumper wire) + if percentage < 5: # if the battery is less than 5% + buzzer.set_tone(262) # then make an annoying noise + + display.update() + time.sleep(0.5)