From 7915389f10bd2e75463f1d641f60c7c7b27afb9a Mon Sep 17 00:00:00 2001 From: Anne Barela <1911920+TheKitty@users.noreply.github.com> Date: Tue, 11 Apr 2023 14:29:02 -0400 Subject: [PATCH] Add correct code --- .../Feather/code-multi-feather-direct.py | 71 +++++++++++++++++++ 1 file changed, 71 insertions(+) create mode 100644 CircuitPython_gifio/Feather/code-multi-feather-direct.py diff --git a/CircuitPython_gifio/Feather/code-multi-feather-direct.py b/CircuitPython_gifio/Feather/code-multi-feather-direct.py new file mode 100644 index 000000000..879a73c0f --- /dev/null +++ b/CircuitPython_gifio/Feather/code-multi-feather-direct.py @@ -0,0 +1,71 @@ +# SPDX-FileCopyrightText: 2023 Anne Barela for Adafruit Industries +# +# SPDX-License-Identifier: MIT +# +# Play Multiple GIF files on an ESP32-S2 Feather TFT +# Requires CircuitPython 8.1.0-beta.1 or later +# Updated 4/4/2023 + +import time +import gc +import os +import struct +import board +import gifio +import digitalio + +# Get a dictionary of GIF filenames at the passed base directory +def get_files(base): + allfiles = os.listdir(base) + file_names = [] + for _, filetext in enumerate(allfiles): + if not filetext.startswith("."): + if filetext not in ('boot_out.txt', 'System Volume Information'): + if filetext.endswith(".gif"): + file_names.append(filetext) + return file_names + +# Set BOOT button on ESP32-S2 Feather TFT to advance to next GIF +button = digitalio.DigitalInOut(board.BUTTON) +button.switch_to_input(pull=digitalio.Pull.UP) + +display = board.DISPLAY +display.auto_refresh = False + +COL_OFFSET = 40 # The Feather TFT needs to have the display +ROW_OFFSET = 53 # offset by these values for direct writes + +files = get_files("/") +for i in range(len(files)): + + odg = gifio.OnDiskGif(files[i]) + # Skip PyPortal GIFs if put on ESP32-S2 Feather TFT + if odg.width != board.DISPLAY.width: + print("File "+files[i]+" not right width, skipping\n") + continue + + start = time.monotonic() + next_delay = odg.next_frame() # Load the first frame + end = time.monotonic() + call_delay = end - start + + # Display GIF file frames until screen touched (for PyPortal) + while True: + sleeptime = max(0, next_delay - call_delay) + time.sleep(sleeptime) + # If the BOOT button is pressed, advance to next GIF file + if button.value is False: + print("Button Press, Advance\n") + break + next_delay = odg.next_frame() + display.bus.send(42, struct.pack(">hh", COL_OFFSET, + odg.bitmap.width - 1 + COL_OFFSET)) + display.bus.send(43, struct.pack(">hh", ROW_OFFSET, + odg.bitmap.height - 1 + ROW_OFFSET)) + display.bus.send(44, odg.bitmap) + # End while + # Clean up memory + odg.deinit() + odg = None + gc.collect() +# End for