{"id":17682983,"url":"https://github.com/ytisf/kindler","last_synced_at":"2025-05-12T23:50:54.361Z","repository":{"id":73638293,"uuid":"247021112","full_name":"ytisf/Kindler","owner":"ytisf","description":"An E-Ink Raspberry Pi PhotoFrame DIY Project","archived":false,"fork":false,"pushed_at":"2020-03-13T11:26:55.000Z","size":13259,"stargazers_count":11,"open_issues_count":0,"forks_count":2,"subscribers_count":3,"default_branch":"master","last_synced_at":"2024-05-02T05:18:30.297Z","etag":null,"topics":["diy","e-ink","eink","home-improvement","photo-frame","photoframe","raspberry-pi"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ytisf.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2020-03-13T08:20:22.000Z","updated_at":"2024-08-01T16:32:39.483Z","dependencies_parsed_at":null,"dependency_job_id":"c1b46a9b-d27a-4b3e-9191-6e0203e224c3","html_url":"https://github.com/ytisf/Kindler","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ytisf%2FKindler","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ytisf%2FKindler/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ytisf%2FKindler/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ytisf%2FKindler/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ytisf","download_url":"https://codeload.github.com/ytisf/Kindler/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":253843167,"owners_count":21972868,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["diy","e-ink","eink","home-improvement","photo-frame","photoframe","raspberry-pi"],"created_at":"2024-10-24T09:44:00.741Z","updated_at":"2025-05-12T23:50:54.343Z","avatar_url":"https://github.com/ytisf.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Kindler - An E-Ink Display Frame In Your Photo Frame\n\n## Introduction\n\nA couple of months ago I've started a little project that involved some Raspberry Pis and some of that type of equipment. One of the items we've purchase is a small [E-Ink display, 2.13\",](https://www.waveshare.com/wiki/2.13inch_e-Paper_HAT_(D)) to be used as a diagnostics pane. So about a week ago i was cleaning up my work space to remove all those fancy useless bits from the work surface coming upon this little E-Ink display. That night i was trying to think about what to do with it.\n\nThis is what i came up with and how to build one yourself really fast:\n\nTake a photo frame you already have of your loved ones and add a little caption to it with changing texts. In this case i took our family's photo and added some alternating quotes.\n\n**Disclaimer** - This is **not** a sponsored post neither are any of the products promoted in anyway. Other than the Raspberry Pi because i love it.\n\n\u003cimg src=\"https://www.morirt.com/Kindler/7.png\" alt=\"\" data-canonical-src=\"https://www.morirt.com/Kindler/7.png\" width=\"512\"/\u003e\n\n## Built Details\nSince the display is only 2.13\" it really can't be too much in and of itself. Since it's also not that durable and i'm pretty sure that after 10 minutes with our kids this thing will turn into a colored useless strip i was going from something more decorative. So i've commenced building a picture frame with our own favorite picture that will have an alternative text on it. For the text i chose quotes.\n\nThis is how it looks:\n\n\u003cimg src=\"https://www.morirt.com/Kindler/6.jpg\" alt=\"\" data-canonical-src=\"https://www.morirt.com/Kindler/6.jpg\" width=\"512\"/\u003e\n\n### What You'll Need\nI really wanted this to be durable, resilient and long lasting. We have a few picture frames in our house and some just died, some just reboot occasionally and some just shut-off from time to time waiting for someone to start them. Hence i wanted something that once plugged in, even with no internet, will continue working.\n\n#### Equipment:\n\n1. Raspberry Pi of any kind. I started with a Raspberry Pi W Zero but for some reason it chose not to work with my display (although it should have) so i've switched to a Raspberry Pi 3.\n1. E-Ink display using SPI. I've used WaveShare 2.13 D but really any would do.\n1. Some duct tape.\n1. A Photo frame.\n1. Your Photo.\n1. *Optionally - Raspberry Pi Case.*\n\n**Project Work Time**: ~15 minutes if your Raspberry Pi is ready, ~1 hour if it needs flushing.\n\n\u003cimg src=\"https://www.morirt.com/Kindler/0.jpg\" alt=\"\" data-canonical-src=\"https://www.morirt.com/Kindler/0.jpg\" width=\"512\"/\u003e\n\n## Instructions\n\n### Step 1 - Get Your Raspberry Pi ready\nNo need for me here.\nhttps://www.raspberrypi.org/documentation/installation/installing-images/\n\nRemember to `touch ssh` and edit your network configurations to have a way to deploy code on it. [This](https://raspberrypi.stackexchange.com/a/57023) worked just fine.\n\n### Step 2 - Prep your Pi for Display\nDepending on your display. I've worked by [this](https://www.waveshare.com/wiki/2.13inch_e-Paper_HAT_(D)) and here's a summary:\n\n```\n# Enable SPI\nsudo raspi-config\n# Choose Interfacing Options -\u003e SPI -\u003e Yes  to enable SPI interface\n# Restart\n\n# Install BCM2835 libraries\nwget http://www.airspayce.com/mikem/bcm2835/bcm2835-1.60.tar.gz\ntar zxvf bcm2835-1.60.tar.gz\ncd bcm2835-1.60/\nsudo ./configure\nsudo make\nsudo make check\nsudo make install\n\n# Wiring Pi\nsudo apt-get install wiringpi\n\n# Python2 setup\nsudo apt-get update\nsudo apt-get install python-pip\nsudo apt-get install python-pil\nsudo apt-get install python-numpy\nsudo pip install RPi.GPIO\nsudo pip install spidev\n\n# e-Paper libs\nsudo git clone https://github.com/waveshare/e-Paper\ncd e-Paper/RaspberryPi\\\u0026JetsonNano/\ncd python\nsudo python setup.py install\n\n# Image Libraries\nsudo apt-get install python3-pil\nsudo apt-get install python3-numpy\n```\n\n### Step 3 - Connection Setup\n\nNow that we have the tools and everything needed to have the code communicate with the display we need to connect it. This part is relatively simple - the adapter to the display should come with a full IDE female connector to connect to the Raspberry Pi's male IDE connector. Just snap that in on top of your RaspberryPi and is should be ready to go.\n\nIn my case, i also wanted a small fan to circulate some air in the case of the device. Since all of the IDE pins are locked i've used an 8-pin connector from the adapter (came in the box for me) and then took pin-0 (VNN) and pin-1 (GND) and connected the fan to that.\n\n\u003cimg src=\"https://www.morirt.com/Kindler/2.jpg\" alt=\"\" data-canonical-src=\"https://www.morirt.com/Kindler/2.jpg\" width=\"512\"/\u003e\n\n\u003cimg src=\"https://www.morirt.com/Kindler/3.jpg\" alt=\"\" data-canonical-src=\"https://www.morirt.com/Kindler/3.jpg\" width=\"512\"/\u003e\n\n### Step 3.5 - [Optional] Configuring WiFi\n\nThis step is optional and the `Kindler` will be operating the same way regardless if you take this step or not. This is just if you want to have an option to update your quotes remotely or SSH into the RaspberryPi.\n\nEdit the file `wifi_conf` to have the same WiFi configurations and the network you want it conneting to. After that, upload this configuration to: `wpa_supplicant.conf` on the root directory of the RaspberryPi and create a file named `ssh` on the same directory.\n\nThe `ssh` empty file on the root directory will instruct the RaspberryPi to open up the SSH Server when booting, and a parsing of the `wpa_supplicant.conf` will have the RaspberryPi load the WiFi network configurations and attempt to connect to the network.\n\n\n### Step 3.7 - [Optional] Editing The Text\n\nYou can edit the texts to be displayed however you want. Just keep the first line (header) of the CSV and make sure you're inputting two elements even if the 2nd one is going to be an empty one. For example, if you want to have just one or two lines displayed the `quotes.csv` file should look like this:\n\n```csv\nquote,author\n\"This is line #1 with no 'Author'\", \"\"\n\"Line #2 with Author\", \"Tony\"\n```\n\n### Step 4 - Upload the Code\n\nAt this point you want to upload your code to the Raspberry Pi. You can so that with `scp`. This should be **after** you've put your lovely quotes in `quotes.csv`.\n\n`scp -r ~/Kindler/. pi@pi_ip:/home/pi/Kindler/`\n\n### Step 5 - Adding to Boot\n\nAt this point you want to make sure that even if the device reboots for some reason, power break, accidentally disconnecting it or anything else, when it starts up again it will continue operating as if nothing happened. Reiterating that the main point here is not to have another device you need to maintain but rather have it work without any maintenance.\n\nEdit the `rc.local` file like this:\n\n`sudo nano /etc/rc.local`\n\nAdd the following line before the `exit` line at the end:\n\n`sudo python /home/pi/Kindler/main.py \u0026 `\n\nTo exit `nano` use `Ctrl+O` and `Return/Enter` to save and `Ctrl+X` to exit. Be sure to keep the `\u0026` at the end or your Raspberry Pi will be stuck on boot loop. You need it to make sure that the `rc.local` does not stuck waiting on input but continue to the next line.\n\nAt this point you have added `Kindler` to the start up of the device and it should execute on the next boot (and any following).\n\n### Step 6 - Casing In the Photo\n\nWhen i measured this particular eInk display the size was 2[cm] on 3.5[cm]. Yours might be different depending on the EInk display you're using. Use a box cutter to cut the image and paste your display on the spot. Use some duct tape to join the RaspberryPi with the back of the photo. Make sure it has some clear surface space to disperse of aggregated heat.\n\n\u003cimg src=\"https://www.morirt.com/Kindler/4.jpg\" alt=\"\" data-canonical-src=\"https://www.morirt.com/Kindler/4.jpg\" width=\"512\"/\u003e\n\n\u003cimg src=\"https://www.morirt.com/Kindler/5.jpg\" alt=\"\" data-canonical-src=\"https://www.morirt.com/Kindler/5.jpg\" width=\"512\"/\u003e\n\n\u003cimg src=\"https://www.morirt.com/Kindler/6.jpg\" alt=\"\" data-canonical-src=\"https://www.morirt.com/Kindler/6.jpg\" width=\"512\"/\u003e\n\n\u003cimg src=\"https://www.morirt.com/Kindler/8.png\" alt=\"\" data-canonical-src=\"https://www.morirt.com/Kindler/8.png\" width=\"512\"/\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fytisf%2Fkindler","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fytisf%2Fkindler","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fytisf%2Fkindler/lists"}