Installing the Project Code
CIRCUITPYcode.py with the example script.
Thankfully, we can do this in one go. In the example below, click the Download Project Bundle button below to download the necessary libraries and the code.py file in a zip file. Extract the contents of the zip file, open the directory MagTag_Covid_Vaccination/ and then click on the directory that matches the version of CircuitPython you're using and copy the contents of that directory to your CIRCUITPY drive.
CIRCUITPY
Be sure you have the secrets.py file complete and loaded onto the CIRCUITPY drive also or the code will not run properly.
# SPDX-FileCopyrightText: 2021 Eva Herrada for Adafruit Industries
#
# SPDX-License-Identifier: MIT
from adafruit_magtag.magtag import MagTag
from adafruit_progressbar.progressbar import ProgressBar
# Set up where we'll be fetching data from
DATA_SOURCE = "https://raw.githubusercontent.com/owid/covid-19-data/master/public/data/vaccinations/country_data/United%20States.csv" # pylint: disable=line-too-long
# Find data for other countries/states here:
# https://github.com/owid/covid-19-data/tree/master/public/data/vaccinations
magtag = MagTag(url=DATA_SOURCE)
magtag.network.connect()
magtag.add_text(
text_font="/fonts/ncenR14.pcf",
text_position=(
(magtag.graphics.display.width // 2) - 1,
8,
),
text_anchor_point=(0.5, 0.5),
is_data=False,
) # Title
magtag.add_text(
text_font="/fonts/ncenR14.pcf",
text_position=(
(magtag.graphics.display.width // 2) - 1,
23,
),
text_anchor_point=(0.5, 0.5),
is_data=False,
) # Date
magtag.add_text(
text_font="/fonts/ncenR14.pcf",
text_position=(
(magtag.graphics.display.width // 2) - 1,
40,
),
text_anchor_point=(0.5, 0.5),
is_data=False,
) # Vaccinated text
magtag.add_text(
text_font="/fonts/ncenR14.pcf",
text_position=(
(magtag.graphics.display.width // 2) - 1,
85,
),
text_anchor_point=(0.5, 0.5),
is_data=False,
) # Fully vaccinated text
BAR_WIDTH = magtag.graphics.display.width - 80
BAR_HEIGHT = 25
BAR_X = magtag.graphics.display.width // 2 - BAR_WIDTH // 2
progress_bar = ProgressBar(
BAR_X, 50, BAR_WIDTH, BAR_HEIGHT, 1.0, bar_color=0x999999, outline_color=0x000000
)
progress_bar_1 = ProgressBar(
BAR_X, 95, BAR_WIDTH, BAR_HEIGHT, 1.0, bar_color=0x999999, outline_color=0x000000
)
magtag.graphics.root_group.append(progress_bar)
magtag.graphics.root_group.append(progress_bar_1)
magtag.graphics.set_background("/bmps/background.bmp")
def l_split(line):
line_list = []
print(line)
while "," in line:
if line[0] == '"':
temp = line.split('"', 2)[1]
line_list.append(temp)
line = line.split('"', 2)[2][1:]
else:
temp, line = line.split(",", 1)
line_list.append(temp)
line_list.append(line)
return line_list
try:
table = magtag.fetch().split("\n")
columns = l_split(table[0])
latest = l_split(table[-2])
print(columns)
print(latest)
value = dict(zip(columns, latest))
print("Response is", value)
print(value)
vaccinated = int(value["people_vaccinated"]) / 331984513
fully_vaccinated = int(value["people_fully_vaccinated"]) / 331984513
magtag.set_text(f"{value['location']} Vaccination Rates", 0, False)
magtag.set_text(value["date"], 1, False)
magtag.set_text("Vaccinated: {:.2f}%".format(vaccinated * 100), 2, False)
magtag.set_text(
"Fully Vaccinated: {:.2f}%".format(fully_vaccinated * 100), 3, False
)
progress_bar.progress = vaccinated
progress_bar_1.progress = fully_vaccinated
magtag.refresh()
SECONDS_TO_SLEEP = 24 * 60 * 60 # Sleep for one day
except (ValueError, RuntimeError, ConnectionError, OSError) as e:
print("Some error occured, retrying in one hour! -", e)
seconds_to_sleep = 60 * 60 # Sleep for one hour
print(f"Sleeping for {SECONDS_TO_SLEEP} seconds")
magtag.exit_and_deep_sleep(SECONDS_TO_SLEEP)
from adafruit_magtag.magtag import MagTag from adafruit_progressbar import ProgressBar
Next, the code defines where it'll be getting the data from, initializes the MagTag object and tells it to connect to the network defined in secrets.py.
# Set up where we'll be fetching data from DATA_SOURCE = "https://raw.githubusercontent.com/owid/covid-19-data/master/public/data/vaccinations/country_data/United%20States.csv" # Find data for other countries/states here: # https://github.com/owid/covid-19-data/tree/master/public/data/vaccinations magtag = MagTag(url=DATA_SOURCE) magtag.network.connect()
Then, the four text fields are defined. These are individually set by passing the set_text method a number that corresponds to the order the specific text field was created.
magtag.add_text(
text_font="/fonts/ncenR14.pcf",
text_position=((magtag.graphics.display.width // 2) - 1, 8,),
text_anchor_point=(0.5, 0.5),
is_data=False,
) # Title
magtag.add_text(
text_font="/fonts/ncenR14.pcf",
text_position=((magtag.graphics.display.width // 2) - 1, 23,),
text_anchor_point=(0.5, 0.5),
is_data=False,
) # Date
magtag.add_text(
text_font="/fonts/ncenR14.pcf",
text_position=((magtag.graphics.display.width // 2) - 1, 40,),
text_anchor_point=(0.5, 0.5),
is_data=False,
) # Vaccinated text
magtag.add_text(
text_font="/fonts/ncenR14.pcf",
text_position=((magtag.graphics.display.width // 2) - 1, 85,),
text_anchor_point=(0.5, 0.5),
is_data=False,
) # Fully vaccinated text
After that, the progress bars are set up. The top one will track the percent of people who have been partially vaccinated and the bottom one will track the percent of people who have been fully vaccinated.
BAR_WIDTH = magtag.graphics.display.width - 80
BAR_HEIGHT = 25
BAR_X = magtag.graphics.display.width // 2 - BAR_WIDTH // 2
progress_bar = ProgressBar(
BAR_X, 50, BAR_WIDTH, BAR_HEIGHT, 1.0, bar_color=0x999999, outline_color=0x000000
)
progress_bar_1 = ProgressBar(
BAR_X, 95, BAR_WIDTH, BAR_HEIGHT, 1.0, bar_color=0x999999, outline_color=0x000000
)
magtag.graphics.root_group.append(progress_bar)
magtag.graphics.root_group.append(progress_bar_1)
magtag.graphics.set_background("/bmps/background.bmp")
The code now enters the try part of the try/except block. It first gets the csv data from the URL defined above, then splits it by line, gets the latest line, and splits it into a list so it can be used easier. After that, the percent of people who have been partially and fully vaccinated is calculated. The four text fields are then all set to their respective values and the progress bars are updated. Assuming everything has gone well so far, the display is then refreshed.
Finally, the MagTag sleeps for a day, at which point this code will run again.
try:
value = magtag.fetch().split("\n")[-2].split(",")
print("Response is", value)
vaccinated = int(value[-2]) / 331984513
fully_vaccinated = int(value[-1]) / 331984513
magtag.set_text(f"{value[0]} Vaccination Rates", 0, False)
magtag.set_text(value[1], 1, False)
magtag.set_text("Vaccinated: {:.2f}%".format(vaccinated * 100), 2, False)
magtag.set_text(
"Fully Vaccinated: {:.2f}%".format(fully_vaccinated * 100), 3, False
)
progress_bar.progress = vaccinated
progress_bar_1.progress = fully_vaccinated
magtag.refresh()
seconds_to_sleep = 24 * 60 * 60 # Sleep for one day
print(f"Sleeping for {seconds_to_sleep} seconds")
magtag.exit_and_deep_sleep(seconds_to_sleep)
However, if an issue has occurred, the code prints it out and tries again.
except (ValueError, RuntimeError) as e:
print("Some error occured, retrying! -", e)
Page last edited July 28, 2025
Text editor powered by tinymce.