From 5f676e6e62515a7efd9f113c180895008562bbf9 Mon Sep 17 00:00:00 2001 From: foamyguy Date: Fri, 11 Oct 2024 16:36:44 -0500 Subject: [PATCH 1/3] 1st version tft spirit board project --- .../code.py | 92 +++++ .../esp32s3_s2_tft_featherwing_480x320/lib | 1 + .../planchette_v1.bmp | Bin 0 -> 3462 bytes .../spirit_board.py | 1 + .../spirit_board_480x320.bmp | Bin 0 -> 154758 bytes .../shared/lib/anchored_tilegrid.py | 51 +++ TFT_Spirit_Board/shared/spirit_board.py | 346 ++++++++++++++++++ 7 files changed, 491 insertions(+) create mode 100644 TFT_Spirit_Board/esp32s3_s2_tft_featherwing_480x320/code.py create mode 120000 TFT_Spirit_Board/esp32s3_s2_tft_featherwing_480x320/lib create mode 100644 TFT_Spirit_Board/esp32s3_s2_tft_featherwing_480x320/planchette_v1.bmp create mode 120000 TFT_Spirit_Board/esp32s3_s2_tft_featherwing_480x320/spirit_board.py create mode 100644 TFT_Spirit_Board/esp32s3_s2_tft_featherwing_480x320/spirit_board_480x320.bmp create mode 100644 TFT_Spirit_Board/shared/lib/anchored_tilegrid.py create mode 100644 TFT_Spirit_Board/shared/spirit_board.py diff --git a/TFT_Spirit_Board/esp32s3_s2_tft_featherwing_480x320/code.py b/TFT_Spirit_Board/esp32s3_s2_tft_featherwing_480x320/code.py new file mode 100644 index 000000000..6e2f00164 --- /dev/null +++ b/TFT_Spirit_Board/esp32s3_s2_tft_featherwing_480x320/code.py @@ -0,0 +1,92 @@ +# SPDX-FileCopyrightText: 2024 Tim Cocks +# +# SPDX-License-Identifier: MIT +""" +SpiritBoard code.py +Feather ESP32-S3 or S2 + TFT Featherwing 3.5" 480x320 pixels + +Receive and display messages from the spirits. +""" +import os +import displayio +import board +from digitalio import DigitalInOut +import adafruit_connection_manager +import wifi +import adafruit_requests +from adafruit_io.adafruit_io import IO_HTTP, AdafruitIO_RequestError +from adafruit_hx8357 import HX8357 # TFT Featherwing 3.5" 480x320 display driver +from spirit_board import SpiritBoard +import adafruit_tsc2007 + + +# 3.5" TFT Featherwing is 480x320 +displayio.release_displays() +DISPLAY_WIDTH = 480 +DISPLAY_HEIGHT = 320 + +# Initialize TFT Display +spi = board.SPI() +tft_cs = board.D9 +tft_dc = board.D10 +display_bus = displayio.FourWire(spi, command=tft_dc, chip_select=tft_cs) +display = HX8357(display_bus, width=DISPLAY_WIDTH, height=DISPLAY_HEIGHT) +display.rotation = 0 +_touch_flip = (False, True) + +# Initialize 3.5" TFT Featherwing Touchscreen +ts_cs_pin = DigitalInOut(board.D6) +i2c = board.I2C() +irq_dio = None +tsc = adafruit_tsc2007.TSC2007(i2c, irq=irq_dio) + +# Initialize a requests session +pool = adafruit_connection_manager.get_radio_socketpool(wifi.radio) +ssl_context = adafruit_connection_manager.get_radio_ssl_context(wifi.radio) +requests = adafruit_requests.Session(pool, ssl_context) + +# Set your Adafruit IO Username and Key in secrets.py +# (visit io.adafruit.com if you need to create an account, +# or if you need your Adafruit IO key.) +aio_username = os.getenv("AIO_USERNAME") +aio_key = os.getenv("AIO_KEY") + +# Initialize an Adafruit IO HTTP API object +io = IO_HTTP(aio_username, aio_key, requests) + +# initialize the SpiritBoard class +spirit_board = SpiritBoard(display) + +# get messages from io or the local file +messages = spirit_board.get_messages(io) + +# The planchette is already at the home position. +# Slide it to home again to make it jump, in order +# indicate the message is ready to be received. +spirit_board.slide_planchette(SpiritBoard.LOCATIONS["home"], + delay=0.02, step_size=6) + +# current message index +message_index = 0 +while True: + # if the display was touched + if tsc.touched: + # write the message at the current index + spirit_board.write_message(messages[message_index], step_size=8) + + # if there are more messages in the list inside of context + if message_index < len(messages) - 1: + # increment the message index + message_index += 1 + + else: # there are no more messages in the list + # reset the index to 0 + message_index = 0 + print("fetching next") + + # fetch new messages + messages = spirit_board.get_messages(io) + + # make the planchette jump to indicate messages are ready to display + spirit_board.slide_planchette(SpiritBoard.LOCATIONS["home"], + delay=0.02, step_size=6) diff --git a/TFT_Spirit_Board/esp32s3_s2_tft_featherwing_480x320/lib b/TFT_Spirit_Board/esp32s3_s2_tft_featherwing_480x320/lib new file mode 120000 index 000000000..6e954ff30 --- /dev/null +++ b/TFT_Spirit_Board/esp32s3_s2_tft_featherwing_480x320/lib @@ -0,0 +1 @@ +../shared/lib/ \ No newline at end of file diff --git a/TFT_Spirit_Board/esp32s3_s2_tft_featherwing_480x320/planchette_v1.bmp b/TFT_Spirit_Board/esp32s3_s2_tft_featherwing_480x320/planchette_v1.bmp new file mode 100644 index 0000000000000000000000000000000000000000..b36ff9c82e9987f086dce61f2c55a2fdc51de0d0 GIT binary patch literal 3462 zcmbtVF_P3U5R`$Ct7G|rmz+mza6}{*6Or%$QevLK%XkPsfa&RJ&B&Hrb*$^wmRdbM zJtNC^`~35v`Sr{0KkWBpzc2P%+8evK_UCPDA3pN;+UEGR_E&#CyM228?t>THUTwG! zzaQJz_S_zC-(uy0>s_HOj_d$KJLZfUW-;%tb|uM10M^td;26^_jPWo^FCK$93v{Sc zOq)>!Ayk4Qsv?AH5TgbJ&=3?+?nJlMI9{ZHt6B6YpjW5+er`r4T1E=OD9P%I2(sMJ{uy_k#r)Thby;-};LFEcecv@@J{>qgcZCSaJqbbLW@g^SU zV&7o@E>0AT5)XA^0jBTb#2%rrLmigoJAV(S@1qsg$FiXdZ&o@?QhZi>NTftEkjjUClPXShCxJiK04cA-mvr07#79Ewcy8THgeEc} zl$JMzvovqf>LhQLdd1b?U_Ux%nyMz7JBAdu(USSz)f8pSMdwTkCs9I3RYJ$1zeT61 z=z86~Zley8fpbte$;e}WhmOH=*JqAFf|>JF>h)}^pumf+H9L5k>r=-FTP~-CQ~5G| XxyGz{5J$YumgDVA+Iiv0`;XB-Pn)(0 literal 0 HcmV?d00001 diff --git a/TFT_Spirit_Board/esp32s3_s2_tft_featherwing_480x320/spirit_board.py b/TFT_Spirit_Board/esp32s3_s2_tft_featherwing_480x320/spirit_board.py new file mode 120000 index 000000000..a41e6a6d5 --- /dev/null +++ b/TFT_Spirit_Board/esp32s3_s2_tft_featherwing_480x320/spirit_board.py @@ -0,0 +1 @@ +../shared/spirit_board.py \ No newline at end of file diff --git a/TFT_Spirit_Board/esp32s3_s2_tft_featherwing_480x320/spirit_board_480x320.bmp b/TFT_Spirit_Board/esp32s3_s2_tft_featherwing_480x320/spirit_board_480x320.bmp new file mode 100644 index 0000000000000000000000000000000000000000..1848c95065a069cf4084273a92e464fc921941c9 GIT binary patch literal 154758 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

lYbQNo{_#Kg|# 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 literal 0 HcmV?d00001 diff --git a/TFT_Spirit_Board/shared/lib/anchored_tilegrid.py b/TFT_Spirit_Board/shared/lib/anchored_tilegrid.py new file mode 100644 index 000000000..d5a443029 --- /dev/null +++ b/TFT_Spirit_Board/shared/lib/anchored_tilegrid.py @@ -0,0 +1,51 @@ +try: + from typing import Tuple +except ImportError: + pass + +from displayio import TileGrid + + +class AnchoredTileGrid(TileGrid): + def __init__(self, bitmap, **kwargs): + super().__init__(bitmap, **kwargs) + self._anchor_point = (0, 0) + + self._anchored_position = ( + 0 if "x" not in kwargs else kwargs["x"], + 0 if "y" not in kwargs else kwargs["y"] + ) + + @property + def anchor_point(self): + return self._anchor_point + + @anchor_point.setter + def anchor_point(self, new_anchor_point: Tuple[float, float]) -> None: + self._anchor_point = new_anchor_point + # update the anchored_position using setter + self.anchored_position = self._anchored_position + + @property + def anchored_position(self) -> Tuple[int, int]: + """Position relative to the anchor_point. Tuple containing x,y + pixel coordinates.""" + return self._anchored_position + + @anchored_position.setter + def anchored_position(self, new_position: Tuple[int, int]) -> None: + self._anchored_position = new_position + # Calculate (x,y) position + if (self._anchor_point is not None) and (self._anchored_position is not None): + new_x = int(new_position[0] + - round(self._anchor_point[0] * (self.tile_width * self.width))) + + self.x = int( + new_position[0] + - round(self._anchor_point[0] * (self.tile_width * self.width)) + ) + + self.y = int( + new_position[1] + - round(self._anchor_point[1] * (self.tile_height * self.height)) + ) diff --git a/TFT_Spirit_Board/shared/spirit_board.py b/TFT_Spirit_Board/shared/spirit_board.py new file mode 100644 index 000000000..9c2cbc19c --- /dev/null +++ b/TFT_Spirit_Board/shared/spirit_board.py @@ -0,0 +1,346 @@ +import math +import os +import random +import time + +import displayio +from anchored_tilegrid import AnchoredTileGrid + +class SpiritBoard(displayio.Group): + """ + DisplayIO Based SpiritBoard + + Holds and manages everything needed to draw the spirit board and planchette, as well + as move the planchette around to output messages from the spirits. + """ + + # Mapping of letters and words on the board to their pixel coordinates. + # Points are centered on the target letter. + # Words can contain a list of points, the planchette will move between them. + LOCATIONS = {"a": (42, 145), "b": (63, 115), "c": (97, 97), "d": (133, 85), + "e": (172, 78), "f": (207, 75), "g": (245, 74), "h": (284, 75), + "i": (319, 80), "j": (345, 85), "k": (375, 95), "l": (410, 111), + "m": (435, 140), "n": (78, 190), "o": (96, 162), "p": (122, 145), + "q": (149, 132), "r": (179, 123), "s": (208, 118), "t": (235, 116), + "u": (267, 116), "v": (302, 119), "w": (334, 130), "x": (368, 147), + "y": (393, 168), "z": (405, 194), + " ": (151, 201), "<3": (247, 20), "?": (162, 18), "&": (339, 18), + "home": (234, 246), "yes": [(26, 20), (82, 20)], "no": [(418, 20), (450, 20)], + "hello": [(20, 300), (123, 300)], "goodbye": [(314, 300), (456, 300)]} + + # List of full words on the board (multi-character strings) + # used to know whether to parse the message + # one letter at a time, or with a full word. + FULL_WORDS = ["yes", "no", "hello", "goodbye", "home", "<3"] + + def __init__(self, display): + """ + Create a SpiritBoard instance and put it in the displays root_group to make it visible. + + :param displayio.Display display: Display object to show the spirit board on. + """ + self._display = display + super().__init__() + + # board image file + self.spirit_board_odb = displayio.OnDiskBitmap("spirit_board_480x320.bmp") + self.spirit_board_tilegrid = displayio.TileGrid(bitmap=self.spirit_board_odb, pixel_shader=self.spirit_board_odb.pixel_shader) + self.append(self.spirit_board_tilegrid) + + # planchette image file + self.planchette_odb = displayio.OnDiskBitmap("planchette_v1.bmp") + self.planchette_odb.pixel_shader.make_transparent(0) + self.planchette_tilegrid = AnchoredTileGrid(bitmap=self.planchette_odb, pixel_shader=self.planchette_odb.pixel_shader) + + # AnchoredTileGrid is used so that we can move the planchette + # relative to the cetner of the window. + self.planchette_tilegrid.anchor_point = (0.5, 0.5) + + # move the planchette to it's home to start + self.planchette_tilegrid.anchored_position = SpiritBoard.LOCATIONS['home'] + + # append the planchette to the self Group instance + self.append(self.planchette_tilegrid) + + # set the self Group instance to root_group, so it's shown on the display. + display.root_group = self + + @staticmethod + def dist(pointA, pointB): + """ + Calculate the distance between two points. + + :param tuple pointA: x,y pair of the first point + :param pointB: x,y pair of the second point + :return: the distance between the two points + """ + return math.sqrt((pointB[0] - pointA[0]) ** 2 + (pointB[1] - pointA[1]) ** 2) + + def slide_planchette(self, target_location, delay=0.1, step_size=4): + """ + Slide the planchette to the target location. + + delay and step_size parameters can be used to control the speed of the sliding. + + If the planchette is already at the target_location it will jump up slightly and + then return to the target location. This helps to clarify messages that contain + consecutive matching letters. + + :param tuple target_location: x,y pair of the target location + :param float delay: length of time to sleep inbetween each movement step + :param int step_size: how big of a step to take with each movement. + :return: None + """ + # disable auto_refresh during sliding, we refresh manually for each step + self._display.auto_refresh = False + + # current location + current_location = self.planchette_tilegrid.anchored_position + + # get the distance between the two + distance = SpiritBoard.dist(current_location, target_location) + + # if the planchette is already at the target location + if distance == 0: + # cannot slide to the location we're already at. + # slide up a tiny bit and then back to where we were. + self.slide_planchette((current_location[0], current_location[1] - 20), delay, step_size) + + # update the current location to where we moved to + current_location = self.planchette_tilegrid.anchored_position + + distance = SpiritBoard.dist(current_location, target_location) + + # variables used to calculate where the next point + # between where we are at and where we are going is. + distance_ratio = step_size / distance + one_minus_distance_ratio = (1 - distance_ratio) + + # calculate the next point + next_point = ( + round(one_minus_distance_ratio * current_location[0] + distance_ratio * target_location[0]), + round(one_minus_distance_ratio * current_location[1] + distance_ratio * target_location[1]) + ) + # print(current_location) + # print(next_point) + + # update the anchored_position of the planchette to move it to + # the next point. + self.planchette_tilegrid.anchored_position = next_point + + # refresh the display + self._display.refresh() + + # wait for delay amount of time (seconds) + time.sleep(delay) + + # while we haven't made it to the target location + while 0 < distance_ratio < 1: + # update current location variable + current_location = self.planchette_tilegrid.anchored_position + + # calculate distance between new current location and target location + distance = SpiritBoard.dist(current_location, target_location) + + # if we have arrived at the target location + if distance == 0: + # break out of the function + break + + # distance ratio variables used to calculate next point + distance_ratio = step_size / distance + one_minus_distance_ratio = (1 - distance_ratio) + + # calculate the next point + next_point = ( + round(one_minus_distance_ratio * current_location[0] + distance_ratio * target_location[0]), + round(one_minus_distance_ratio * current_location[1] + distance_ratio * target_location[1]) + ) + + # if we have not arrived at the target location yet + if 0 < distance_ratio < 1: + + # update the anchored position to move the planchette to the + # next point + self.planchette_tilegrid.anchored_position = next_point + + # refresh the display + self._display.refresh() + + # wait for delay amount of time (seconds) + time.sleep(delay) + + # update the anchored position to move the planchette to the + # target_location. This is needed in-case we undershot + # the target location due to a step size that does not + # divide into the total distance evenly. + self.planchette_tilegrid.anchored_position = target_location + + # refresh the display + self._display.refresh() + + # re-enable auto_refresh in case any other parts of the program + # want to update the display + self._display.auto_refresh = True + + def write_message(self, message, skip_spaces=True, step_size=6): + """ + + :param string message: The message to output with the planchette + :param skip_spaces: Whether to skip space characters + :param step_size: How big of a step to take with each movement + :return: None + """ + # ignore empty messages + if message == "": + return + + # split the message on space to get a list of words + message_words = message.split(" ") + + # loop over the words in the message + for index, word in enumerate(message_words): + print(f"index: {index}, word: {word}") + + # if the current word is one of the full words on the board + if word in SpiritBoard.FULL_WORDS: + + # if the word on the board has multiple points + if isinstance(SpiritBoard.LOCATIONS[word], list): + # loop over the points for the word + for location in SpiritBoard.LOCATIONS[word]: + print(f"sliding to: {location}") + # slide the planchette to each point + self.slide_planchette(location, delay=0.02, step_size=step_size) + + # pause at each point + time.sleep(0.25) + + # if the word has only a single point + elif isinstance(SpiritBoard.LOCATIONS[word], tuple): + # slide the planchette to the point + self.slide_planchette(SpiritBoard.LOCATIONS[word], delay=0.02, step_size=step_size) + + # pause at the point + time.sleep(0.5) + + else: # the current word is not one of the full words + # go one character at a time + + # loop over each character in the word + for character in word: + # slide the planchette to the current characters location + self.slide_planchette(SpiritBoard.LOCATIONS[character], delay=0.02, step_size=step_size) + + # pause after we arrive + time.sleep(0.5) + + # if we are not skipping spaces, and we are not done with the message + if not skip_spaces and index < len(message_words) - 1: + # handle the space + # slide the planchette to the empty space location. + self.slide_planchette(SpiritBoard.LOCATIONS[" "], delay=0.02, step_size=step_size) + + # pause after we arrive + time.sleep(0.5) + + # after we've shown the whole message + # slide the planchette back to it's home location + self.slide_planchette(SpiritBoard.LOCATIONS["home"], delay=0.02, step_size=6) + + @staticmethod + def sync_with_io(io) -> list: + """ + Fetch messages from AdafruitIO and store them in the context variable. + + You must create the "SpiritBoard" feed object inside AdafruitIO for + this to succeed. + + Will raise an exception if connecting or fetching failed. + + :param io: The initialized adafruit IO object + + :return: List of messages + """ + + # fetch the latest data in the feed + incoming_message = io.receive_data("spiritboard") + + # if it's multiple messages seperated by commas + if "," in incoming_message["value"]: + # split on the commas to seperate the messages + # and put them in context + messages = incoming_message["value"].split(",") + + else: # it's only a single message + # set the single message into the context + messages = [incoming_message["value"]] + + # print if successful + if len(messages) > 0: + print("io fetch success") + + return messages + + + @staticmethod + def read_local_messages_file(shuffle=False) -> list: + """ + Read messages from the local spirit_messages.txt file on the CIRCUITPY drive. + Each message should be on its own line within that file. + + :param boolean shuffle: Whether to shuffle the messages. Default is False + which will keep them in the same order they appear in the file. + + :return: List of messages + """ + + # if the spirit_messages.txt file exists + if "spirit_messages.txt" in os.listdir("/"): + # open the file + with open("/spirit_messages.txt", "r") as f: + # split on newline and set the messages found into the context + messages = f.read().split("\n") + + # if there are no messages + if len(messages) == 0: + # raise an error and tell the user to set some up + raise RuntimeError("Connection to adafruit.io failed, and there were " + "no messages in spirit_messages.txt. Enter your WIFI " + "credentials, aio username, and token in settings.toml, or add " + "messages to spirit_messages.txt.") + + # if there are messages and we need to shuffle them + elif shuffle: + # temporary list to hold them + shuffled_list = [] + + # while there are still messages in the context messages list + while len(messages) > 0: + # pop a randomly chosen message from the context and + # put it into the temporary list + shuffled_list.append(messages.pop( + random.randint(0, len(messages) - 1))) + + # update the context list to the shuffled one + messages = shuffled_list + + return messages + + @staticmethod + def get_messages(io) -> list: + """ + Higher level get messages function. It will first attempt to + fetch the messages from Adafruit IO. If that doesn't work, + it will read them from the local spirit_messages.txt file. + + :param io: The initialized adafruit IO object + + :return: List of messages + """ + try: + return SpiritBoard.sync_with_io(io) + except OSError: + print("Caught OSError. Will try again next time.\n" + "Falling back to spirit_messages.txt file.") + return SpiritBoard.read_local_messages_file() From 0168375d8b25677fb4db06760835fa8e07fe5649 Mon Sep 17 00:00:00 2001 From: foamyguy Date: Fri, 11 Oct 2024 17:00:48 -0500 Subject: [PATCH 2/3] pylint fixes --- .../code.py | 10 ++-- .../shared/lib/anchored_tilegrid.py | 17 ++++-- TFT_Spirit_Board/shared/spirit_board.py | 52 ++++++++++++------- 3 files changed, 52 insertions(+), 27 deletions(-) diff --git a/TFT_Spirit_Board/esp32s3_s2_tft_featherwing_480x320/code.py b/TFT_Spirit_Board/esp32s3_s2_tft_featherwing_480x320/code.py index 6e2f00164..b2fccb9ab 100644 --- a/TFT_Spirit_Board/esp32s3_s2_tft_featherwing_480x320/code.py +++ b/TFT_Spirit_Board/esp32s3_s2_tft_featherwing_480x320/code.py @@ -7,6 +7,7 @@ Receive and display messages from the spirits. """ +# pylint: disable=import-error, invalid-name import os import displayio import board @@ -14,11 +15,13 @@ import adafruit_connection_manager import wifi import adafruit_requests -from adafruit_io.adafruit_io import IO_HTTP, AdafruitIO_RequestError +from adafruit_io.adafruit_io import IO_HTTP from adafruit_hx8357 import HX8357 # TFT Featherwing 3.5" 480x320 display driver -from spirit_board import SpiritBoard import adafruit_tsc2007 +from spirit_board import SpiritBoard + + # 3.5" TFT Featherwing is 480x320 displayio.release_displays() @@ -37,8 +40,7 @@ # Initialize 3.5" TFT Featherwing Touchscreen ts_cs_pin = DigitalInOut(board.D6) i2c = board.I2C() -irq_dio = None -tsc = adafruit_tsc2007.TSC2007(i2c, irq=irq_dio) +tsc = adafruit_tsc2007.TSC2007(i2c, irq=None) # Initialize a requests session pool = adafruit_connection_manager.get_radio_socketpool(wifi.radio) diff --git a/TFT_Spirit_Board/shared/lib/anchored_tilegrid.py b/TFT_Spirit_Board/shared/lib/anchored_tilegrid.py index d5a443029..8f1fd2918 100644 --- a/TFT_Spirit_Board/shared/lib/anchored_tilegrid.py +++ b/TFT_Spirit_Board/shared/lib/anchored_tilegrid.py @@ -1,3 +1,6 @@ +""" +AnchoredTilegrid helper class +""" try: from typing import Tuple except ImportError: @@ -7,6 +10,10 @@ class AnchoredTileGrid(TileGrid): + """ + AnchoredTileGrid extends TileGrid and allows placing the TileGrid + relative to an arbitrary anchor point. + """ def __init__(self, bitmap, **kwargs): super().__init__(bitmap, **kwargs) self._anchor_point = (0, 0) @@ -18,6 +25,10 @@ def __init__(self, bitmap, **kwargs): @property def anchor_point(self): + """ + The anchor point. tuple containing x and y values ranging + from 0 to 1. + """ return self._anchor_point @anchor_point.setter @@ -35,11 +46,9 @@ def anchored_position(self) -> Tuple[int, int]: @anchored_position.setter def anchored_position(self, new_position: Tuple[int, int]) -> None: self._anchored_position = new_position - # Calculate (x,y) position - if (self._anchor_point is not None) and (self._anchored_position is not None): - new_x = int(new_position[0] - - round(self._anchor_point[0] * (self.tile_width * self.width))) + if (self._anchor_point is not None) and (self._anchored_position is not None): + # Calculate (x,y) position self.x = int( new_position[0] - round(self._anchor_point[0] * (self.tile_width * self.width)) diff --git a/TFT_Spirit_Board/shared/spirit_board.py b/TFT_Spirit_Board/shared/spirit_board.py index 9c2cbc19c..235d96811 100644 --- a/TFT_Spirit_Board/shared/spirit_board.py +++ b/TFT_Spirit_Board/shared/spirit_board.py @@ -1,11 +1,16 @@ +""" +SpiritBoard helper class +""" import math import os import random import time - import displayio + +# pylint: disable=import-error from anchored_tilegrid import AnchoredTileGrid + class SpiritBoard(displayio.Group): """ DisplayIO Based SpiritBoard @@ -13,7 +18,6 @@ class SpiritBoard(displayio.Group): Holds and manages everything needed to draw the spirit board and planchette, as well as move the planchette around to output messages from the spirits. """ - # Mapping of letters and words on the board to their pixel coordinates. # Points are centered on the target letter. # Words can contain a list of points, the planchette will move between them. @@ -44,13 +48,16 @@ def __init__(self, display): # board image file self.spirit_board_odb = displayio.OnDiskBitmap("spirit_board_480x320.bmp") - self.spirit_board_tilegrid = displayio.TileGrid(bitmap=self.spirit_board_odb, pixel_shader=self.spirit_board_odb.pixel_shader) + self.spirit_board_tilegrid = displayio.TileGrid( + bitmap=self.spirit_board_odb, pixel_shader=self.spirit_board_odb.pixel_shader) + self.append(self.spirit_board_tilegrid) # planchette image file self.planchette_odb = displayio.OnDiskBitmap("planchette_v1.bmp") self.planchette_odb.pixel_shader.make_transparent(0) - self.planchette_tilegrid = AnchoredTileGrid(bitmap=self.planchette_odb, pixel_shader=self.planchette_odb.pixel_shader) + self.planchette_tilegrid = AnchoredTileGrid( + bitmap=self.planchette_odb, pixel_shader=self.planchette_odb.pixel_shader) # AnchoredTileGrid is used so that we can move the planchette # relative to the cetner of the window. @@ -66,15 +73,15 @@ def __init__(self, display): display.root_group = self @staticmethod - def dist(pointA, pointB): + def dist(point_a, point_b): """ Calculate the distance between two points. - :param tuple pointA: x,y pair of the first point - :param pointB: x,y pair of the second point + :param tuple point_a: x,y pair of the first point + :param point_b: x,y pair of the second point :return: the distance between the two points """ - return math.sqrt((pointB[0] - pointA[0]) ** 2 + (pointB[1] - pointA[1]) ** 2) + return math.sqrt((point_b[0] - point_a[0]) ** 2 + (point_b[1] - point_a[1]) ** 2) def slide_planchette(self, target_location, delay=0.1, step_size=4): """ @@ -114,12 +121,14 @@ def slide_planchette(self, target_location, delay=0.1, step_size=4): # variables used to calculate where the next point # between where we are at and where we are going is. distance_ratio = step_size / distance - one_minus_distance_ratio = (1 - distance_ratio) + one_minus_distance_ratio = 1 - distance_ratio # calculate the next point next_point = ( - round(one_minus_distance_ratio * current_location[0] + distance_ratio * target_location[0]), - round(one_minus_distance_ratio * current_location[1] + distance_ratio * target_location[1]) + round(one_minus_distance_ratio * current_location[0] + + distance_ratio * target_location[0]), + round(one_minus_distance_ratio * current_location[1] + + distance_ratio * target_location[1]) ) # print(current_location) # print(next_point) @@ -149,12 +158,14 @@ def slide_planchette(self, target_location, delay=0.1, step_size=4): # distance ratio variables used to calculate next point distance_ratio = step_size / distance - one_minus_distance_ratio = (1 - distance_ratio) + one_minus_distance_ratio = 1 - distance_ratio # calculate the next point next_point = ( - round(one_minus_distance_ratio * current_location[0] + distance_ratio * target_location[0]), - round(one_minus_distance_ratio * current_location[1] + distance_ratio * target_location[1]) + round(one_minus_distance_ratio * current_location[0] + + distance_ratio * target_location[0]), + round(one_minus_distance_ratio * current_location[1] + + distance_ratio * target_location[1]) ) # if we have not arrived at the target location yet @@ -219,7 +230,8 @@ def write_message(self, message, skip_spaces=True, step_size=6): # if the word has only a single point elif isinstance(SpiritBoard.LOCATIONS[word], tuple): # slide the planchette to the point - self.slide_planchette(SpiritBoard.LOCATIONS[word], delay=0.02, step_size=step_size) + self.slide_planchette(SpiritBoard.LOCATIONS[word], + delay=0.02, step_size=step_size) # pause at the point time.sleep(0.5) @@ -230,7 +242,8 @@ def write_message(self, message, skip_spaces=True, step_size=6): # loop over each character in the word for character in word: # slide the planchette to the current characters location - self.slide_planchette(SpiritBoard.LOCATIONS[character], delay=0.02, step_size=step_size) + self.slide_planchette(SpiritBoard.LOCATIONS[character], + delay=0.02, step_size=step_size) # pause after we arrive time.sleep(0.5) @@ -239,7 +252,8 @@ def write_message(self, message, skip_spaces=True, step_size=6): if not skip_spaces and index < len(message_words) - 1: # handle the space # slide the planchette to the empty space location. - self.slide_planchette(SpiritBoard.LOCATIONS[" "], delay=0.02, step_size=step_size) + self.slide_planchette(SpiritBoard.LOCATIONS[" "], + delay=0.02, step_size=step_size) # pause after we arrive time.sleep(0.5) @@ -298,7 +312,7 @@ def read_local_messages_file(shuffle=False) -> list: # if the spirit_messages.txt file exists if "spirit_messages.txt" in os.listdir("/"): # open the file - with open("/spirit_messages.txt", "r") as f: + with open("/spirit_messages.txt", "r", encoding="utf-8") as f: # split on newline and set the messages found into the context messages = f.read().split("\n") @@ -311,7 +325,7 @@ def read_local_messages_file(shuffle=False) -> list: "messages to spirit_messages.txt.") # if there are messages and we need to shuffle them - elif shuffle: + if shuffle: # temporary list to hold them shuffled_list = [] From de62cdf3ebb99d70259fd80db66ffd6811dcfa0c Mon Sep 17 00:00:00 2001 From: foamyguy Date: Fri, 11 Oct 2024 17:05:52 -0500 Subject: [PATCH 3/3] license declarations --- TFT_Spirit_Board/shared/lib/anchored_tilegrid.py | 3 +++ TFT_Spirit_Board/shared/spirit_board.py | 3 +++ 2 files changed, 6 insertions(+) diff --git a/TFT_Spirit_Board/shared/lib/anchored_tilegrid.py b/TFT_Spirit_Board/shared/lib/anchored_tilegrid.py index 8f1fd2918..908386464 100644 --- a/TFT_Spirit_Board/shared/lib/anchored_tilegrid.py +++ b/TFT_Spirit_Board/shared/lib/anchored_tilegrid.py @@ -1,3 +1,6 @@ +# SPDX-FileCopyrightText: 2024 Tim Cocks +# +# SPDX-License-Identifier: MIT """ AnchoredTilegrid helper class """ diff --git a/TFT_Spirit_Board/shared/spirit_board.py b/TFT_Spirit_Board/shared/spirit_board.py index 235d96811..9211d03de 100644 --- a/TFT_Spirit_Board/shared/spirit_board.py +++ b/TFT_Spirit_Board/shared/spirit_board.py @@ -1,3 +1,6 @@ +# SPDX-FileCopyrightText: 2024 Tim Cocks +# +# SPDX-License-Identifier: MIT """ SpiritBoard helper class """