From bb06503bc6e5e27c4bda3bb4359ec82cfb3b5ed5 Mon Sep 17 00:00:00 2001 From: Matt Singleton Date: Sat, 3 Feb 2024 14:02:03 -0600 Subject: initial checkin --- rotate.py | 81 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 81 insertions(+) create mode 100644 rotate.py (limited to 'rotate.py') diff --git a/rotate.py b/rotate.py new file mode 100644 index 0000000..dabedf4 --- /dev/null +++ b/rotate.py @@ -0,0 +1,81 @@ +#!/usr/bin/python +# -*- coding:utf-8 -*- + +import argparse +import contextlib +import itertools +import logging +import os +import random +import sys +import time + +from PIL import Image,ImageDraw,ImageFont + +parser = argparse.ArgumentParser() +parser.add_argument("imgdir", help="location of dithered bmps to rotate") +parser.add_argument("--debug", action="store_true") +parser.add_argument("--delay", default=600, type=int) +parser.add_argument("--simulate", action="store_true") +parser.add_argument("--clear", action="store_true", help="clear panel first run") +args = parser.parse_args() + +if args.simulate: + import mock_epd as epd7in3f +else: + from waveshare_epd import epd7in3f + +log_format = "%(asctime)s %(levelname)s %(name)s: %(message)s" +if args.debug is True: + logging.basicConfig(level=logging.DEBUG, format=log_format) +else: + logging.basicConfig(level=logging.INFO, format=log_format) +logger = logging.getLogger(__name__) + +paths = [os.path.join(args.imgdir, f) for f in os.listdir(args.imgdir) + if f.endswith(".bmp") + and os.path.isfile(os.path.join(args.imgdir, f))] +random.shuffle(paths) +if args.simulate is True: + delay = args.delay +else: + delay = max(args.delay, 180) + +logger.info("hello!") +logger.info(f"rotating images in {args.imgdir} every {delay}s") + +@contextlib.contextmanager +def EPD(): + epd = epd7in3f.EPD() + try: + epd.init() + yield epd + finally: + epd.sleep() + +try: + iteration = 1 + for filename in itertools.cycle(paths): + with EPD() as epd: + if iteration == 1 and args.clear: + epd.Clear() + logger.info(f"displaying {filename}") + Himage = Image.open(filename) + epd.display(epd.getbuffer(Himage)) + logger.info(f"sleeping for {delay}s...") + time.sleep(delay) + iteration += 1 + +except IOError as e: + logger.info(e) + +except KeyboardInterrupt: + logger.info("ctrl + c") + logger.info("clearing the screen") + with EPD() as epd: + epd.Clear() + +finally: + logger.info("cleaning up") + epd7in3f.epdconfig.module_exit(cleanup=True) + logger.info("bye!") -- cgit v1.2.3