Python information display framework aimed at e-ink devices

Related tags

Hardwareinfodisplay
Overview

My display, using a Raspberry Pi Zero W and Waveshare 6" e-paper hat

infodisplay

Modular information display framework aimed at e-ink devices.

Built using Python 3.7 and pillow. Works out of the box with IT8951-powered e-paper displays.

Setting up

  • When using an e-paper display with IT8951 controller, install GregDMeyer's IT8951 library following the instructions there.
  • Clone this repository and cd to its folder
  • Install the basic required packages using pip:
pip3 install -r requirements.txt
  • (If you plan to use the google calendar integration) install the optional packages:
pip3 install -r optional-requirements.txt
  • Copy the example config file:
cp config.ini.example config.ini
  • Make your changes to config.ini using your favourite editor.

You should now be able to run the info display using something like python3 run.py.

FontAwesome icons

The class in fontawesome.py lets you use FontAwesome icons. These are used in the Calendar widget by default.

To see the icons, download a set of FontAwesome svg's (e.g. from here) and unzip the regular, solid, and brands folders into the fa/ folder:

wget https://use.fontawesome.com/releases/v5.15.4/fontawesome-free-5.15.4-desktop.zip
unzip fontawesome-free-5.15.4-desktop.zip
mv fontawesome-free-5.15.4-desktop/svgs/* fa/

Running as a service

A sample systemd unit file is provided in infodisplay.service. This is set up so the service only starts after an NTP time sync is established. Raspberry Pi's don't have a hardware RTC, so system time can be wildly inaccurate until they get the network time.

  • Edit infodisplay.service to reflect where you cloned the repository to, and what user it should run as. (default: /home/pi/infodisplay and pi)
  • Enable the systemd time-sync.target:
sudo systemctl enable systemd-time-wait-sync
  • Copy your unit file:
sudo cp infodisplay.service /etc/systemd/system/
  • Reload systemd:
sudo systemctl daemon-reload
  • Enable autostart of the service:
sudo systemctl enable infodisplay.service
  • Finally, start the service:
sudo systemctl start infodisplay.service

Google Calendar integration

To get events from your Google Calendar you need a Google Cloud Platform project, OAuth credentials and finally a token. Follow the 'Prerequisites' section of this tutorial and you should have a credentials.json file at the end.

The following needs to be done on your desktop computer, as a dialog will pop up for authorization:

  • Clone this repo.
  • Install the optional requirements using pip3 install -r optional-requirements.txt.
  • Copy your credentials.json to the util folder.
  • cd to the util folder.
  • Run python3 get-google-calendars.py.

This script should give you the ID's of the calendars synced to your account. Pick the ones you want and add them to the config.ini. There should now also be a token.json file in the directory, copy this to your main infodisplay folder.

Structure

Have a look through the example config file. This has one main section with global configuration parameters, all other sections are specific to widgets.

The display is divided into a grid, where each widget is given a canvas spanning one or more grid cells. The scheduler calls each widget to update their canvas, pastes updated widgets onto the global canvas, and triggers a display update at the right time.

The most basic example of a widget is given in Dummy.py. Widgets are automatically loaded if their name exists as a section in your config.ini. These sections should have names matching files in the widgets/ folder with corresponding widget classes that go by the same name (e.g. there is a 'Dummy' section in config.ini and widgets/Dummy.py has a class named Dummy).

Looking to add support for your own type of (e-ink) display? You should only have to modify display.py. Keep in mind that the default canvas is of image mode L, or 8-bit greyscale. You will have to modify this to suit your display.

Notes

In due time this information should be moved to the wiki section and expanded.

Owner
Niek Blankers
Niek Blankers
Raspberry Pi Pico development platform for PlatformIO

Raspberry Pi Pico development platform for PlatformIO A few words in the beginning Before experimental please Reinstall the platform Version: 1.0.0 Th

Georgi Angelov 160 Dec 23, 2022
Drobo Status is a python program that will connect to your Drobo and return JSON data regarding your Drobo

This is a simple python script that will run a docker container to pull data from Drobo. It will give information like (Name, serial, firmware, disk-total, disk-used, disk-free and individual disk st

Biofects 1 Jan 15, 2022
Electrolux Pure i9 robot vacuum integration for Home Assistant.

Home Assistant Pure i9 This repository integrates your Electrolux Pure i9 robot vacuum with the smart home platform Home Assistant. The integration co

Niklas Ekman 15 Dec 22, 2022
Final-project-robokeeper created by GitHub Classroom

RoboKeeper! Jonny Bosnich, Joshua Cho, Lio Liang, Marco Morales, Cody Nichoson Demonstration Videos Grabbing the paddle: https://youtu.be/N0HPvFNHrTw

Cody Nichoson 1 Dec 12, 2021
Kwcpu - An unobtrusive CPU meter that fits in the default Windows 11 taskbar. Supports up to 32 cores.

kwcpu An unobtrusive CPU meter that fits in the default Windows 11 taskbar. Supports up to 32 cores. kwcpu is provided as a Rainmeter skin. By default

Jay Oster 2 Nov 07, 2022
Estimation of whether or not the persons given information will have diabetes.

Diabetes Business Problem : It is desired to develop a machine learning model that can predict whether people have diabetes when their characteristics

Barış TOKATLIOĞLU 0 Jan 20, 2022
ENC28J60 Ethernet chip driver for MicroPython (RP2)

micropy-ENC28J60 ENC28J60 Ethernet chip driver for MicroPython v1.17 (RP2) Rationale ENC28J60 is a popular and cheap module for DIY projects. At the m

11 Nov 16, 2022
Minimal and clean dashboard to visualize some stats of Pi-Hole with an E-Ink display attached to your Raspberry Pi

Clean Dashboard for Pi-Hole Minimal and clean dashboard to visualize some stats of Pi-Hole with an E-Ink display attached to your Raspberry Pi.

Alessio Santoru 104 Dec 14, 2022
Python module for controlling Broadlink RM2/3 (Pro) remote controls, A1 sensor platforms and SP2/3 smartplugs

Python module for controlling Broadlink RM2/3 (Pro) remote controls, A1 sensor platforms and SP2/3 smartplugs

Matthew Garrett 1.2k Jan 04, 2023
Make your MacOS keyboard brightness fade in and out

Make your MacOS keyboard brightness fade in and out. (It's working depends on the Kbrightness file, which only works for 2015 Macs, so this will only work on 2015 Macs.)

1 Dec 16, 2021
MicroPython driver for 74HC595 shift registers

MicroPython 74HC595 A MicroPython library for 74HC595 8-bit shift registers. There's both an SPI version and a bit-bang version, each with a slightly

Mike Causer 17 Nov 29, 2022
Интеграция Home Assistant с ЛК "Интер РАО"

ЕЛК ЖКХ «Интер РАО» для Home Assistant Предоставление информации о текущем состоянии ваших аккаунтов в ЕЛК ЖКХ. Введение @ TODO @ Установка Посредство

Alexander Ryazanov 27 Nov 05, 2022
Toy robot that traverses on a finite surface

Toy Robot Challenge - Release Notes November 12, 2021 New features Initialisation - Users can set the home position and heading of the robot. Position

Ze Fei Teo 0 Feb 03, 2022
Zev es un Bot/Juego RPG de Discord creado en y para aprender Python.

Zev es un Bot/Juego RPG de Discord creado en y para aprender Python.

Julen Smith 3 Jan 12, 2022
Raspberry Pi Power Button - Wake/Power Off/Restart(Double Press)

Control Raspberry pi with physically attached button. Wake, Power Off, and Restart (Double Press) . Python3 script runs as a service with easy installation.

Stas Yakobov 16 Oct 22, 2022
A script and GUI for controlling stepper motors from an arduino

A script and GUI for controlling stepper motors from an arduino (nema 23 in my case but should work for others in general)

Pip 2 Aug 01, 2022
Huawei Solar sensors for Home Assistant

Huawei Solar Sensors This integration splits out the various values that are fetched from your Huawei Solar inverter into separate HomeAssistant senso

Thijs Walcarius 151 Dec 31, 2022
Ingeniamotion is a library that works over ingenialink and aims to simplify the interaction with Ingenia's drives.

Ingeniamotion Ingeniamotion is a library that works over ingenialink and aims to simplify the interaction with Ingenia's drives. Requirements Python 3

Ingenia Motion Control 7 Dec 15, 2022
ArucoFollow - A script for Robot Operating System and it is a part of a project Robot

ArucoFollow ArucoFollow is a script for Robot Operating System and it is a part

5 Jan 25, 2022
For use with an 8-bit parallel TFT touchscreen using micropython

ILI9341-parallel-TFT-driver-for-micropython For use with an 8-bit parallel TFT touchscreen using micropython. Many thanks to prenticedavid and his MCU

3 Aug 02, 2022