Adafruit PyPortal : CircuitPython Powered Internet Display

I’ve been playing with the Adafruit PyPortal recently, a 3.5 inch touchscreen display with in built functionality to quickly build Internet of Things, IoT, projects.

The first thing I built was a viewer for my Luftdaten Air Quality Sensor. I had connected my sensor to opensensemap as I liked the way that they displayed data. They also provide a really nice API interface.

The code I used to access my sensor is provided below

This example will access the opensensemap API, grab the air quality values
pm10, pm2.5, temperature... and display it on a screen!
if you can find something that spits out JSON data, we can display it
import time
import board
from adafruit_pyportal import PyPortal

# Set up where we'll be fetching data from
DATA_SOURCE = ""   # pylint: disable=line-too-long
PM10 = ["sensors",0, "lastMeasurement","value"]
PM25 = ["sensors",1, "lastMeasurement","value"]
TEMP = ["sensors",2, "lastMeasurement","value"]

# the current working directory (where this file is)
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=(PM10, PM25, TEMP),
                    text_position=((50, 225), (100, 225), (160, 225)),
                    caption_text="PM10, PM2.5, Temperature",

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

while True:
        value = pyportal.fetch()
        print("Response is", value)
    except (ValueError, RuntimeError) as e:
        print("Some error occured, retrying! -", e)

    time.sleep(180)  # wait a minute before getting again

It’s all done with CircuitPython.

I quite liked the result shown below. The picture in the background is of a local lake.