68 lines
2 KiB
Python
68 lines
2 KiB
Python
# SPDX-FileCopyrightText: 2019 Anne Barela for Adafruit Industries
|
|
#
|
|
# SPDX-License-Identifier: MIT
|
|
|
|
import os
|
|
import board
|
|
import busio
|
|
import digitalio
|
|
import storage
|
|
import sdcardio
|
|
from adafruit_slideshow import PlayBackOrder, SlideShow, PlayBackDirection
|
|
|
|
# Default location to look is in internal memory
|
|
IMAGE_DIRECTORY = "/images"
|
|
|
|
switch = digitalio.DigitalInOut(board.D3)
|
|
switch.direction = digitalio.Direction.INPUT
|
|
switch.pull = digitalio.Pull.UP
|
|
|
|
spi = busio.SPI(board.SCK, MOSI=board.MOSI, MISO=board.MISO)
|
|
try:
|
|
sdcard = sdcardio.SDCard(spi, board.SD_CS)
|
|
vfs = storage.VfsFat(sdcard)
|
|
storage.mount(vfs, "/sd")
|
|
IMAGE_DIRECTORY = "/sd/images"
|
|
except OSError as error:
|
|
print("No SD card, will only look on internal memory")
|
|
|
|
def print_directory(path, tabs=0):
|
|
for file in os.listdir(path):
|
|
stats = os.stat(path + "/" + file)
|
|
filesize = stats[6]
|
|
isdir = stats[0] & 0x4000
|
|
|
|
if filesize < 1000:
|
|
sizestr = str(filesize) + " by"
|
|
elif filesize < 1000000:
|
|
sizestr = "%0.1f KB" % (filesize / 1000)
|
|
else:
|
|
sizestr = "%0.1f MB" % (filesize / 1000000)
|
|
|
|
prettyprintname = ""
|
|
for _ in range(tabs):
|
|
prettyprintname += " "
|
|
prettyprintname += file
|
|
if isdir:
|
|
prettyprintname += "/"
|
|
print('{0:<20} Size: {1:>6}'.format(prettyprintname, sizestr))
|
|
|
|
# recursively print directory contents
|
|
if isdir:
|
|
print_directory(path + "/" + file, tabs + 1)
|
|
|
|
try:
|
|
print_directory(IMAGE_DIRECTORY)
|
|
except OSError as error:
|
|
raise Exception("No images found on flash or SD Card")
|
|
|
|
# Create the slideshow object that plays through once alphabetically.
|
|
slideshow = SlideShow(board.DISPLAY, None, folder=IMAGE_DIRECTORY, loop=True,
|
|
order=PlayBackOrder.ALPHABETICAL, dwell=0)
|
|
while True:
|
|
if not switch.value:
|
|
print("Click!")
|
|
slideshow.direction = PlayBackDirection.FORWARD
|
|
slideshow.advance()
|
|
while not switch.value:
|
|
pass
|