ScrollKit 3.0

Flash & set up

Once the box is assembled, three short stages get it running: flash CircuitPython, copy the app, then set up WiFi and pick your parks from a web page the sign hosts itself. After that it runs on its own, and new parks arrive without you doing anything.

Already have a sign? Skip this page. Whether you bought a finished box back when this was a product or built one yourself, updating is a swap of the app over USB with no flashing involved, and Update your sign walks through it step by step, including what to do with the files already on the drive.
1

Flash CircuitPython 9.2.8

The app runs on CircuitPython 9.2.8. Connect the board over USB-C and double-tap its RESET button to enter the bootloader. A drive named MATRIXS3BOOT (or similar) appears. Drag the CircuitPython .uf2 onto it; the board reboots and remounts as CIRCUITPY.

Download CircuitPython 9.2.8 (.uf2)

Use 9.2.8, not CircuitPython 10. CircuitPython 10.2.1 has a bug in its networking code: after a while the board stops being able to open new connections, and the sign can’t fetch theme park ride wait times until it reboots. Until that’s fixed upstream, 9.2.8 is the version this app ships on. Download the file above rather than the newest release from adafruit.com.
2

Copy the app

Download the app (one zip, built from the current release), unzip it, and copy the contents of the folder onto the CIRCUITPY drive. When the copy is done the drive should look exactly like this:

Right
CIRCUITPY
  • boot_out.txt
  • boot.py
  • code.py
  • lib
  • README.txt
  • safemode.py
  • src
Wrong
CIRCUITPY
  • themeparkwaits-3.5.x

When the copy finishes, eject the drive, unplug the board, wait five seconds, and plug it back in; the sign boots. Finish with the unplug, not the RESET button, which can leave the WiFi radio in a bad state.

Tip: if the drive is read-only, hold the DOWN button while pressing RESET to put it in “computer can write” mode while you copy. (In a printed case the buttons sit recessed behind the small holes on the side; a straightened paperclip or thin screwdriver reaches them.)

Download the 3.0 app (zip) Browse the source on GitHub →

Installing from the GitHub repos instead of the zip? One layout difference trips people up: the app repo has no top-level lib folder. The lib in the picture above holds the ScrollKit library, which lives in its own repo. The src/lib folder inside the app repo is a different thing (the Adafruit driver bundle) and stays where it is, inside src. A by-hand install is: code.py, boot.py, and src from the app repo, plus the ScrollKit repo’s src/scrollkit folder copied onto the drive as lib/scrollkit (skip its simulator and dev folders; the board never uses them). The zip already has all of this laid out, which is why it’s the easy path.

Want to change something first? Make It Yours shows how to tweak the code or add your own ride animation, then copy your version instead.

3

Connect WiFi from your phone

On first boot with no saved network, the sign scrolls join instructions and opens its own WiFi access point. Connect your phone to it, and a setup page appears at http://192.168.4.1. Pick your home network, enter the password, and the sign saves it and reconnects on its own. No cables, no editing files.

Power cut later? It reconnects by itself, falling back to the setup portal only if the network is truly gone.

WiFi setup card (PDF)

4

Pick your parks & style

Once it’s online, the sign advertises itself on your network as http://themeparkwaits.local. Open that in any browser to choose up to four parks, set brightness and colors, pick a scroll speed and number-reveal effect, sort or group rides, and hide closed rides or character meets. Save, and the display rebuilds with your picks.

The on-device configuration web page with dropdowns for colors, scroll speed, brightness, and parks

How updates work

Two things change over time, and they update differently. Parks and wait times come from a server that already tracks them, so the sign fetches a small file every ten minutes and new parks appear on their own. Nothing to install, nothing to click.

The app itself, meaning new features and ride art, ships as a zip you copy to the board over USB, the same way you installed it just now. It takes about ten minutes and you do it when you feel like it. There is no subscription and no account: the zip is just the latest release of the public GitHub project, and if you are running your own customized copy you can ignore it and pull changes yourself.

The sign used to update itself over the internet. That feature is gone, and the reason is worth stating plainly: downloading over an encrypted connection eventually leaves the board unable to open a new connection to anything until it reboots. It is a bug in CircuitPython, below our code, and we cannot fix it from here. Avoiding encrypted downloads entirely is what makes the sign stable, so that is what it does now, and USB is how every update arrives.

Update your sign is the walkthrough for that USB session: every step, every button, and what to do when the drive shows up read-only. Worth a bookmark, because it is the page you will use for every release from here.

Coming from 2.x

Already have an older Theme Park Waits box, bought or built? It already runs the CircuitPython 3.x wants, so there’s no flashing to do. The 2.x app can’t fetch 3.x by itself, so the jump is the same USB session as any other update, plus reconnecting WiFi and re-picking your parks at the end. About ten minutes, once. Every update after that keeps your settings.

Not sure which version you’re on, or want a hand updating? Get in touch. Happy to help you through it.

Want to see it in action first?

The 3.0 animations, transitions, and effects, rendered straight from the CircuitPython app.

What’s new in 3.0 →