I had the pleasure of getting my hands on a PyBadge at PyCon 2019, thanks to the wonderful Nina.

She gave me a run through of how to get this piece of kit setup to be a lanyard, the process I will document here to hopefully help out others :)


  • PyBadge
  • Desktop/Laptop [0]
  • Known good text editor[1]
  • Known good microUSB data cable[2]

[0] I use a 2015 MacBook Pro running OSX Mojave. This is important for both the Finder methods I describe for showing the external drives, and also because a USB-A to MicroUSB cable is much easier to find than a USB-C to MicroUSB, adapters aside.

[1] you need a text editor that does not stream data to file, but writes it in it’s entirely. CircuitPython’s auto-reload does not play nicely with some text editors. Try Visual Studio Code, or Mu

[2] your cable needs to write both data and provide power.


Flash PyBadge

Making sure the bootloader on the device is good is a very important first step. Ensuring it is also the latest version available is also important to ensure any bugs that have been fixed in the interrum have been corrected.

  • Download the latest CircuitPython (in my case, 4.0.0-rc.1)
  • Connect your PyBadge to your laptop
  • Double-click the [RESET] button on the back of the board
    • a new volume will appear in Finder
    • the badge face will show a cool interface showing that it’s in a different mode (in this case, the boot loader)
  • Drag-and-drop the .uf2 file downloaded earlier to this volume.

Introspect code

We’ll be using Nametag by makermelissa

git clone this repo locally, then check out the top of the code.py file. It’ll show a bunch of import statements which relate to required libraries, some of which we need to import.

Acquire Libraries

At this point, there’s no good package management for CircuitPython, so this process is manual.

  • Download the Bundle Version 4.x zip file
  • Extract this zip file

Manual import

For each of the libraries from code.py, manually copy the relative files from the zip file into the /Volumes/CIRCUITPYTHON filesystem in a new folder called lib/

In our case:

  • adafruit_bitmap_font/
  • adafruit_display_shapes/
  • adafruit_display_text/
  • neopixel.py

Onto the code

Finally, copy the fonts/ and code.py file from Nametag onto the /Volumes/CIRCUITPYTHON folder.

Spot check - file system

Your /Volumes/CIRCUITPYTHON should now look something like this:

 - adafruit_bitmap_font/
 - adafruit_display_shapes/
 - adafruit_display_text/
 - neopixel.py


The system will automatically reload, and given a few seconds to load the program, will provide a nametag


Your name probably isn’t MakerMelissa, so you should change the NAME_STRING variable to your name.

You could also extend the app to do things with the LEDs. By default there’s a rainbow pattern, which can be decreased in brightness by pressing the [B] button on the board.

Personally, I want to do some hacking where I can have a one-click button to change the badge to show my current socialness. I’ve seen this done before, where there’s a badge of a piece of paper that can be manually changed from “I’m feeling social! Please talk to me!” to “Please let me be alone now”, or similar. Now, the major problem with this plan on the badge is that even if it says “Do not disturb” people will want to ask questions about the badge, but hopefully the message can come across.

Also, thinking about it more, it’d be awesome to have a counter of how many hours I’ve been “on”/”off”. Saving this data to the device would be useful (saving timestamp/s to file) to overcome any auto-reloading, and then I could also know how long I’ve been “on” for, without having to otherwise take note.

I’m a child of the FunWay era, and this project is absolutely reawakening my childlike wonder for electronics 💖