aboutsummaryrefslogtreecommitdiff
path: root/rotate.py
diff options
context:
space:
mode:
authorMatt Singleton <matt@xcolour.net>2024-02-03 14:02:03 -0600
committerMatt Singleton <matt@xcolour.net>2024-02-03 14:02:03 -0600
commitbb06503bc6e5e27c4bda3bb4359ec82cfb3b5ed5 (patch)
treec771393004197b698c20b3778829054a1e9b3896 /rotate.py
initial checkin
Diffstat (limited to 'rotate.py')
-rw-r--r--rotate.py81
1 files changed, 81 insertions, 0 deletions
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!")