This is the basic version of the code. You set predefined message text and heart colors. Then, you can cycle through them using either of the buttons on the Circuit Playground Bluefruit.
Connect your Circuit Playground Bluefruit to your computer via a known good data USB cable. The board should show up in your operating system file explorer/finder as a flash drive named CIRCUITPY. Time to copy over some files for this project.
Libraries
First, make sure you have these libraries copied over to the board following this guide page:
Code
Here's the code for the basic version. We'll go in to more detail about how it works in the following pages.
This code uses a custom font file and a BMP file for the heart image. To get those as well as the code, click the Project Zip link in the embedded code listing below. This will download all the files you need at once.
In addition to the code, be sure to copy the Multicolore_36.bdf and heart_bw.bmp file to you CIRCUITPY folder.
# SPDX-FileCopyrightText: 2020 Carter Nelson for Adafruit Industries
#
# SPDX-License-Identifier: MIT
import time
from random import choice
import displayio
import adafruit_imageload
from adafruit_bitmap_font import bitmap_font
from adafruit_display_text import label
from adafruit_gizmo import tft_gizmo
from adafruit_circuitplayground import cp
#---| User Config |--------------------------------------------------
HEART_MESSAGES = (
("I LUV", "YOU"),
("SAY", "YES"),
("HUG", "ME"),
("BE", "MINE"),
("TEXT","ME"),
("OMG","LOL"),
("PEACE",""),
)
HEART_COLORS = (
0xEAFF50, # yellow
0xFFAD50, # orange
0x9D50FF, # purple
0x13B0FE, # blue
0xABFF96, # green
0xFF96FF, # pink
)
MESSAGE_COLORS = (
0xFF0000, # red
)
#---| User Config |--------------------------------------------------
# Create the TFT Gizmo display
display = tft_gizmo.TFT_Gizmo()
# Load the candy heart BMP
bitmap, palette = adafruit_imageload.load("/images/heart_bw.bmp",
bitmap=displayio.Bitmap,
palette=displayio.Palette)
heart = displayio.TileGrid(bitmap, pixel_shader=palette)
# Set up message text
font = bitmap_font.load_font("/fonts/Multicolore_36.bdf")
line1 = label.Label(font, text="?"*9)
line2 = label.Label(font, text="?"*5)
line1.anchor_point = (0.5, 0) # middle top
line2.anchor_point = (0.5, 1.0) # middle bottom
# Set up group and add to display
group = displayio.Group()
group.append(heart)
group.append(line1)
group.append(line2)
display.root_group = group
while True:
# turn off auto refresh while we change some things
display.auto_refresh = False
# pick a random message
line1.text, line2.text = choice(HEART_MESSAGES)
# update location for new text bounds
line1.anchored_position = (120, 85)
line2.anchored_position = (120, 175)
# pick a random text color
line1.color = line2.color = choice(MESSAGE_COLORS)
# pick a random heart color
palette[1] = choice(HEART_COLORS)
# OK, now turn auto refresh back on to display
display.auto_refresh = True
# wait for button press
while not cp.button_a and not cp.button_b:
pass
# just a little debounce
time.sleep(0.25)
Page last edited January 21, 2025
Text editor powered by tinymce.