From 4abcce013c9ee3053badf2abda77190233066676 Mon Sep 17 00:00:00 2001 From: Mitja Felicijan Date: Fri, 23 Feb 2024 10:35:22 +0100 Subject: Testing thoughts page --- _posts/posts/2021-06-26-simple-world-clock.md | 108 ++++++++++++++++++++++++++ 1 file changed, 108 insertions(+) create mode 100644 _posts/posts/2021-06-26-simple-world-clock.md (limited to '_posts/posts/2021-06-26-simple-world-clock.md') diff --git a/_posts/posts/2021-06-26-simple-world-clock.md b/_posts/posts/2021-06-26-simple-world-clock.md new file mode 100644 index 0000000..d1b53b4 --- /dev/null +++ b/_posts/posts/2021-06-26-simple-world-clock.md @@ -0,0 +1,108 @@ +--- +title: Simple world clock with eInk display and Raspberry Pi Zero +permalink: /simple-world-clock-with-eiink-display-and-raspberry-pi-zero.html +date: 2021-06-26T12:00:00+02:00 +layout: post +type: post +draft: false +--- + +Our team is spread across the world, from the USA all the way to Australia, so +having some sort of world clock makes sense. + +Currently, I am using an extension for Gnome called [Timezone +extension](https://extensions.gnome.org/extension/2657/timezones-extension/), +and it serves the purpose quite well. + +But I also have a bunch of electronics that I bought through the time, and I am +not using any of them, and it's time to stop hording this stuff and use it in a +project. + +A while ago I bought a small eInk display [Inky +pHAT](https://shop.pimoroni.com/products/inky-phat?variant=12549254217811) and I +have a bunch of [Raspberry Pi's +Zero](https://www.raspberrypi.org/products/raspberry-pi-zero/) lying around that +I really need to use. + +![Inky pHAT, Raspberry Pi Zero](/assets/posts/world-clock/hardware.jpg){:loading="lazy"} + +Since the Inky [Inky +pHAT](https://shop.pimoroni.com/products/inky-phat?variant=12549254217811) is +essentially a HAT, it can easily be added on top of the [Raspberry Pi +Zero](https://www.raspberrypi.org/products/raspberry-pi-zero/). + +First, I installed the necessary software on Raspberry Pi with `pip3 install +inky`. + +And then I created a file `clock.py` in home directory `/home/pi`. + +```python +#!/usr/bin/env python +# -*- coding: utf-8 -*- + +import sys +import os +from inky.auto import auto +from PIL import Image, ImageFont, ImageDraw +from font_fredoka_one import FredokaOne + +clocks = [ + 'America/New_York', + 'Europe/Ljubljana', + 'Australia/Brisbane', +] + +board = auto() +board.set_border(board.WHITE) +board.rotation = 90 + +img = Image.new('P', (board.WIDTH, board.HEIGHT)) +draw = ImageDraw.Draw(img) + +big_font = ImageFont.truetype(FredokaOne, 18) +small_font = ImageFont.truetype(FredokaOne, 13) + +x = board.WIDTH / 3 +y = board.HEIGHT / 3 + +idx = 1 +for clock in clocks: + ctime = os.popen('TZ="{}" date +"%a,%H:%M"'.format(clock)) + ctime = ctime.read().strip().split(',') + city = clock.split('/')[1].replace('_', ' ') + + draw.text((15, (idx*y)-y+10), city, fill=board.BLACK, font=small_font) + draw.text((110, (idx*y)-y+7), str(ctime[0]), fill=board.BLACK, font=big_font) + draw.text((155, (idx*y)-y+7), str(ctime[1]), fill=board.BLACK, font=big_font) + + idx += 1 + +board.set_image(img) +board.show() +``` + +And because eInk displays are rather slow to refresh and the clock requires +refreshing only once a minute, this can be done through cronjob. + +Before we add this job to cron we need to make `clock.py` executable with `chmod ++x clock.py`. + +Then we add a cronjob with `crontab -e`. + +```txt +* * * * * /home/pi/clock.py +``` + +So, we end up with a result like this. + +![World Clock](/assets/posts/world-clock/world-clock.jpg){:loading="lazy"} + +And for the enclosure that can be 3D printed, but I haven't yet something like +this can be used. + + + +You can download my [STL file for the enclosure +here](/assets/posts/world-clock/enclosure.stl), but make sure that dimensions make +sense and also opening for USB port should be added or just use a drill and some +hot glue to make it stick in the enclosure. -- cgit v1.2.3