Code PyPortal with CircuitPython

In the embedded code element below, click on the Download: Project Zip link, and save the .zip archive file to your computer.

Then, uncompress the .zip file, it will unpack to a folder named Dashblock_API.

Copy the contents of the Dashblock_API directory to your PyPortal's CIRCUITPY drive.

Rename dashblock_learn.py to code.py

"""
Dashblock API Adafruit Learn Guide Count demo
Use Dashblock to create a custom API for learn.adafruit.com,
then display the number of learn guides on the site
"""

import time
import board
from adafruit_pyportal import PyPortal

# Get wifi details and more from a secrets.py file
try:
    from secrets import secrets
except ImportError:
    print("WiFi settings are kept in settings.py, please add them there!")
    raise

# Set up where we'll be fetching data from
DATA_SOURCE = "https://api.dashblock.io/model/v1?api_key=" + secrets['dashblock_key']
GUIDE_COUNT = ['entities', 0, 'guide count']
CAPTION = 'total tutorials:'

# determine the current working directory
# needed so we know where to find files
cwd = ("/"+__file__).rsplit('/', 1)[0]

# Initialize the pyportal object and let us know what data to fetch and where
# to display it
pyportal = PyPortal(url=DATA_SOURCE,
                    json_path = (GUIDE_COUNT),
                    status_neopixel=board.NEOPIXEL,
                    default_bg=cwd+"/adabot_cover.bmp",
                    text_font=cwd+"/fonts/Collegiate-50.bdf",
                    text_position=((40, 100)),
                    text_color=(0x8080FF),
                    text_maxlen=(4), # max text length, only want first 4 chars for number of guides
                    caption_text=CAPTION,
                    caption_font=cwd+"/fonts/Collegiate-24.bdf",
                    caption_position=(40, 60),
                    caption_color=0xFFFFFF)

# track the last value so we can play a sound when it updates
last_value = 0

while True:
    try:
        value = pyportal.fetch()
        print("Response is", value)
        int_value = int(value[:4]) # save only first 4 chars and cast to int
        if last_value < int_value:  # ooh it went up!
            print("New guide!")
            pyportal.play_file(cwd+"/coin.wav")  # make a noise!
        last_value = int_value
    except RuntimeError as e:
        print("Some error occured, retrying! -", e)
    except ValueError as e:
        print("Value error occured, retrying! -", e)
        continue

    time.sleep(600) #update every 10 mins

Downloading the libraries

Make sure to add the necessary libraries to the lib folder, info on how to do this can be found in the "PyPortal CircuitPython Setup" section

This project uses the following CircuitPython libraries:

  • adafruit_bitmap_font (directory)
  • adafruit_bus_device (directory)
  • adafruit_display_shapes (directory)
  • adafruit_display_text (directory)
  • adafruit_esp32spi (directory)
  • adafruit_imageload (directory)
  • adafruit_io (directory)
  • adafruit_pyportal.mpy (file)
  • adafruit_requests (file)
  • adafruit_sdcard.mpy (file)
  • adafruit_touchscreen.mpy (file)
  • neopixel.mpy (file)

Secrets file

The secrets file needs some edits before the project will work.

Your Dashblock account is tied to your API requests, thus you have a limited number of credits or requests for data. Each user has their own API key associated with their account. You can find your key by looking at the URL we extracted earlier from Dashblock.

It looks like this:

https://api.dashblock.io/model/v1?api_key=yourSuperLongDashblockKeyHere

Go into your secrets file, and add the following line:

'dashblock_key' : 'yourSuperLongDashblockKeyHere'

Make sure to change 'yourSuperLongDashblockKeyHere' with your key

Save the file and you are good to go!

This is what the final contents of the CIRCUITPY drive will look like:

This guide was first published on Sep 09, 2019. It was last updated on 2019-09-09 18:48:19 -0400. This page (Code PyPortal with CircuitPython) was last updated on Sep 19, 2019.