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 PyPortal_ObliqueStrategies.

Copy the contents of the PyPortal_ObliqueStrategies directory to your PyPortal's CIRCUITPY drive, and then be sure to rename the oblique.py file to code.py so it will automatically run when the PyPortal restarts.

circuitpython_Screen_Shot_2019-03-25_at_11.45.36_PM.png
Note: this lib folder contains only the libraries required for this project. It's ok if you have more.
"""
This code will display a random strategy from strategies.py when the
PyPortal screen is pressed. See the original Oblique Strategies
by Brian Eno & Peter Schmidt here: https://www.enoshop.co.uk/product/oblique-strategies
"""
import random
import board
from strategies import strategies
from adafruit_pyportal import PyPortal

cwd = ("/"+__file__).rsplit('/', 1)[0] # the current working directory (where this file is)

# create pyportal object w no data source (we'll feed it text later)
pyportal = PyPortal(url = None,
                    json_path = None,
                    status_neopixel = board.NEOPIXEL,
                    default_bg = None,
                    text_font = cwd+"fonts/Arial-ItalicMT-17.bdf",
                    text_position = (30, 120),
                    text_color = 0xFFFFFF,
                   )

pyportal.set_text("loading ...") # display while user waits
pyportal.preload_font() # speed things up by preloading font
pyportal.set_text("OBLIQUE STRATEGIES\nBrian Eno / Peter Schmidt") # show title

while True:
    if pyportal.touchscreen.touch_point:
        # get random string from array and wrap w line breaks
        strat = pyportal.wrap_nicely(random.choice(strategies), 35)
        outstring = '\n'.join(strat)
        # display new text
        pyportal.set_text(outstring, 0)
        # don't repeat until a new touch begins
        while pyportal.touchscreen.touch_point:
            continue

How it works

The code.py file is relatively simple, performing a few basic operations …

Import strategies text

from strategies import strategies

All of the strategy text that will be displayed is stored in strategies.py, so we'll import it all as an array of strings at the start.

PyPortal object

pyportal = PyPortal

The pyportal object is created with font path and text formatting info, but no URL or json path - we omit these because we'll be setting the display text within the main loop

Startup Text

pyportal.set_text("loading ...")

Next, we display loading … on the PyPortal and begin preloading the font so all characters can be displayed quickly from now on. Once preloading is finished, title & author text is displayed.

Main loop

while True:

In the repeating main loop, the following actions are performed:

  1. Check to see if the screen was touched
  2. If screen was touched, get a random string from the strategies array and format it so it wraps properly on the display.
  3. Display the text on PyPortal

Debounce

Lastly, you'll see these two lines at the bottom:

while pyportal.touchscreen.touch_point:
    continue

This ensures that the code loads only one new strategy when the user touches the screen - even if they keep their finger held down.

This guide was first published on Mar 27, 2019. It was last updated on Mar 27, 2019.

This page (Project Files) was last updated on Jun 10, 2021.

Text editor powered by tinymce.