Once you've finished setting up your Adafruit CLUE with CircuitPython, you can access the code and necessary libraries by downloading the Project Bundle.

To do this, click on the Download Project Bundle button in the window below. It will download as a zipped folder.

# SPDX-FileCopyrightText: 2021 Jeff Epler for Adafruit Industries
# SPDX-License-Identifier: MIT

import os

import board
import keypad
import ulab.numpy as np

from adafruit_ble import BLERadio
from adafruit_ble.advertising import Advertisement

from thermalprinter import CatPrinter
from seekablebitmap import imageopen

ble = BLERadio()  # pylint: disable=no-member

buttons = keypad.Keys([board.BUTTON_A, board.BUTTON_B], value_when_pressed=False)

def wait_for_press(kbd):
    Wait for a keypress and return the event
    while True:
        event = kbd.events.get()
        if event and event.pressed:
            return event

def show(s):
    Display a message on the screen
    board.DISPLAY.auto_refresh = False
    print("\n" * 24)
    board.DISPLAY.auto_refresh = True

def show_error(s):
    Display a message on the screen and wait for a button press
    show(s + "\nPress a button to continue")

def find_cat_printer(radio):
    Connect to the cat printer device using BLE
    while True:
        show("Scanning for GB02 device...")
        for adv in radio.start_scan(Advertisement):
            complete_name = getattr(adv, "complete_name")
            if complete_name is not None:
                print(f"Saw {complete_name}")
            if complete_name == "GB02":
                return radio.connect(adv, timeout=10)[CatPrinter]

image_files = [
    for i in os.listdir("/")
    if i.lower().endswith(".pbm") or i.lower().endswith(".bmp")
image_files.sort(key=lambda filename: filename.lower())

def select_image():
    i = 0
    while True:
            f"Select image file\nA: next image\nB: print this image\n\n{image_files[i]}"
        event = wait_for_press(buttons)
        if event.key_number == 0:  # button "A"
            i = (i + 1) % len(image_files)
        if event.key_number == 1:  # button "B"
            return image_files[i]

printer = find_cat_printer(ble)

def main():
        filename = select_image()

        show(f"Loading {filename}")

        image = imageopen(filename)
        if image.width != 384:
            raise ValueError("Invalid image.  Must be 384 pixels wide")
        if image.bits_per_pixel != 1:
            raise ValueError("Invalid image.  Must be 1 bit per pixel (black & white)")

        invert_image = image.palette and image.palette[0] == 0

        show(f"Printing {filename}")

        for i in range(image.height):
            row_data = image.get_row(i)
            if invert_image:
                row_data = ~np.frombuffer(row_data, dtype=np.uint8)

        # Print blank lines until the paper can be torn off
        for i in range(80):
            printer.print_bitmap_row(b"\0" * 48)

    except Exception as e: # pylint: disable=broad-except

while True:

After downloading the Project Bundle, plug your Adafruit CLUE into the computer's USB port. You should see a new flash drive appear in the computer's File Explorer or Finder (depending on your operating system) called CIRCUITPY. Unzip the folder and copy the following items to the CLUE's CIRCUITPY drive.

Several sample images are included, continue on to "Using The Code" to print them. To prepare your own images, visit "Creating Images".


This guide was first published on Sep 28, 2021. It was last updated on Jul 19, 2024.

This page (Installing The Code) was last updated on Jul 19, 2024.

Text editor powered by tinymce.