Calendrier epaper

Calendrier epaper

Calendrier epaper

Affichage d'un calendrier Google, de la météo et tout un tas d'autre trucs sur un e-paper en utilisant une raspberryPi. Le tout dans un design sympathique avec des LEDs pour indiquer l'heure.

Il faut

  • 1 Raspberry Pi 3.
  • 1 E-paper.
  • 1 bandeau de 60 leds RVB adressables (des WS2812B  par exemple)
  • 2 boutons poussoir.
  • Contreplaqué 3 mm
  • Contreplaqué 10 mm
  • PMMA blanc diffusant de 3 mm.
97% Complete

Principe

Le but est d'afficher :

  • un agenda sur un écran à très basse consommation électrique,
  • d'afficher l'heure sur une horloge avec un ruban de LEDs. 
  • d'afficher la météo actuel et les prévisions.
  • d'afficher les températures mesurées par Domoticz.
  • les anniversaires à venir dans le mois.
  • une photo le jour d'un anniversaire.

L'affichage sera fait sur un écran très basse consommation : un e-paper. J'ai choisi un waveshare de 7.5 pouces avec son contrôleur HAT pour qu'il soit facilement pilotable par une Raspberry Pi.

Prérequis

Je pars du principe que vous avez un serveur Domoticz installé et fonctionnel. Cette partie ne sera pas abordée dans ce présent tutoriel. Si vous n'avez pas de serveur Domoticz, vous pouvez passer cette section (elle n'est pas forcément nécessaire).

Les programmes sont écrits en Python. Je pars du principe que vous avez des notions de la programmation en Python car il vous faudra configurer les agendas Google à afficher en éditant 2 fichiers.

Installation de Raspian sur la carte SD

Installation de Raspian sur la carte SD

100% Complete
Cette partie va vous guider pour installer la dernière version d'un système d'exploitation sur une Raspberry Pi.

Il faut

  • Carte SD

Téléchargement

Télécharger la dernière version de Raspian en allant sur le site officiel :

https://www.raspberrypi.org/downloads/raspbian/

Dans notre cas, nous n'avons pas besoin de la version Desktop car nous utiliserons la Raspberry par une conection distante, une connection SSH. Nous avons donc besoin de la version allégée de Raspbian, la version "Lite"

Téléchargez et décompressez le fichier dans un répertoire temporaire, on obtient une image du système d'exploitation.

Ecriture sur la carte SD (Windows)

Le fichier au format img n'est pas copiable en tant que tel sur la carte SD, il faut utiliser un utilitaire comme par exemple Etcher (sous windows).

Une fois Etcher installé :

  1. Insérer la carte SD dans un lecteur USB sur votre ordinateur
  2. Lancer Etcher
  3. Sélectionner l'image (le fichier img) décompressé précédemment,
  4. Vérifier que la carte SD est bien sélectionnée dans Etcher
  5. Cliquer sur le bouton "Flash"

Le système d'exploitation est prêt, mais il faut encore configurer l'accès distant.

Activation de la connexion SSH

Par défaut, SSH est installé sur la Raspberry Pi, mais est désactivé pour des raisons de sécurité. La première chose à faire sera donc d’activer SSH sur votre Raspberry Pi.

Pour cela, il vous suffit de brancher la carte MicroSD de votre Raspberry Pi sur votre ordinateur, de vous rendre sur la carte, et de créer un fichier vide nommé ssh dans la partition boot.

Au prochain boot sur la carte SD, il sera possible de faire une connexion SSH en utilisant un client comme Putty (sous windows) par exemple.

Veillez à bien changer le mot de passe par défaut de l'utilisateur pi ("raspberry" par défaut) quand vous vous logez pour la première fois.

Voila, la carte SD est maintenant prête à être insérée dans la Raspberry.

Démarrage de la Raspberry Pi

La commande ifconfig vous permet de connaitre l'adresse IP que votre Raspberry vient d'avoir en se connectant sur votre réseau.

pi@raspberrypi:~ $ ifconfig

eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.0.102  netmask 255.255.255.0  broadcast 192.168.0.255
        inet6 fe80::d9f:c7ba:c902:d0c  prefixlen 64  scopeid 0x20<link>
        ether b8:27:eb:83:ec:c2  txqueuelen 1000  (Ethernet)
        RX packets 284  bytes 39200 (38.2 KiB)
        RX errors 0  dropped 10  overruns 0  frame 0
        TX packets 110  bytes 16465 (16.0 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

Nous allons ensuite configurer la Raspberry en lançant la commande : raspi-config

raspi-config

Changer le mot de passe par défaut (de l'utilisateur "pi") en choisissant :

1 - Change User Password

Modification de la langue par défaut

4 - Localisation Options

I1 - Change Locale (Supprimer : UK et cocher : fr_FR.UTF-8 UTF-8 )

Utilisation de l'interface SPI

5 - Interfacing options

P4 - SPI

Utilisation de toute la place disponible sur la carte SD

7 - Advanced options

A1 - Expand Filesystem

Finish, Reboot = yes

Câblages

Câblages

80% Complete
Câblage de l'écran e-paper et des boutons

Câblage de l'écran e-paper

L'avantage du HAT est qu'il a des connecteurs bien distincts sur lesquels on peut lire ce à quoi correspond quel fils. Il faut donc câbler de la façon suivante :

  • Connecteur HAT -> Raspberry PI
  • VCC    ->    3.3
  • GND    ->    GND
  • DIN    ->    MOSI
  • CLK    ->    SCLK
  • CS     ->    24 (Physical, BCM: CE0, 8)
  • D/C    ->    22 (Physical, BCM: 25)
  • RES    ->    11 (Physical, BCM: 17)
  • BUSY   ->    18 (Physical, BCM: 24

Câblage des boutons

Les boutons vont permettre de changer d'écran à la demande.

Câblage de la Raspberry Pi et des boutons

Câblage de la Raspberry Pi et des boutons

Câblage des leds

a faire

Assemblage du boitier

Assemblage du boitier

100% Complete

La construction nécessite plusieurs épaisseurs différentes de bois. J'ai utilisé du PMMA diffusant car on peut le découper à la découpeuse laser (comme le bois).

Le dessus est en 3mm (la même épaisseur que le PMMA diffusant) et le reste est en 10mm.

Sur le plan on voit des ronds, il s'agit des emplacements des boutons. Vérifiez bien que le diamètre des boutons correspond au diamètre des trous :-).

Afin de faciliter l'assemblage, j'ai numéroté les planches. Les numéros (en noir) sont à graver et non à découper (comme tout ce qui est en rouge).

Les fichiers de découpes sont au format SVG. Ce format devrait vous permettre de faire les découpes avec une découpeuse laser dans n'importe quel FabLab.

Plans

Les plans sont disponibles sur la page : 

https://git.alex-design.fr/root/epaper/blob/master/Laser%20cuts/Boite.svg

Le fichier svg est ouvrable avec Inkscape (logiciel Gratuit open source).

Chaque calque est nommé avec l'épaisseur du bois à utiliser.

Usinage

L'usinage est à faire avec une découpeuse laser, en prenant soin à ce que :

  • les traits rouge soient à découper,
  • les traits noir soient à graver.

Montage

Empiler les différents morceaux. Le numéro le plus grand va devant et la face n'en ayant pas est la face avant.

Création d'une clé API Google

Création d'une clé API Google

100% Complete
Voici, étapes par étapes, comment créer une clé d'API sur votre compte Google développeur

Installation des librairies Python pour accéder à l'API Google

Librairies Google API

Les Google agenda sont accessibles en utilisant l'API Google prévue à cet effet, il est nécessaire d'installer :

pip install --upgrade google-api-python-client oauth2client

L'accès à votre calendrier Google nécessite une authentification. Cette authentification doit être sauvée dans un fichier nommé credentials.json.

Récupération de votre credentials.json

A partir de votre console de gestion d'API et services Google, nous allons créer un nouveau projet qui aura accès en lecture seule aux Calendrier Google.

Création d'un nouveau projet dans la console

A partir de la page d'accueil de Google APIs :

  1. cliquer sur le lien en haut de page "+ Activer des API et des Services".  pour ouvrir la liste des APIs disponible, 
  2. cliquer sur 'Google Agenda API" pour l'activer.
  3. Revenez sur la page d'accueil de la console (en cliquant sur le logo "Google API" tout en haut à gauche de la page.
  4. Dans le tableau de bord de votre console, Il doit maintenant y avoir "Google Calendar API" qui apparaît.

Maintenant que nous avons un projet, nous pouvons lui attribuer une clé d'accès.

Création d'identifiants

A partir de la page d'accueil de Google APIs,

  1. Allez dans la partie Identifiants ( https://console.developers.google.com/apis/credentials ),
  2. Cliquez sur le bouton "Créer des identifiants" puis Sélectionnez un ID client OAuth, puis
  3. "Autre".
  4. Donnez lui un nom 'Calendar epaper" par exemple
  5. Cliquer sur le bouton Créer
  6. Une fenêtre s'ouvre, cliquez sur "ok"
  7. Il est alors possible de télécharger un fichier JSON en cliquant sur l'icône tout à droite sur la ligne commençant par "Calendar epaper". Sauver ce fichier en le renommant "credentials.json"

Récupération du premier token.json

Le token est un jeton d'authentification sécurisant la connexion entre l'API Google et la machine l'appelant. Il est créé lors de la première connexion et ne sera plus demandé par la suite.

Pour le générer, il faut lancer une première demande en exécutant la ligne de commande :

cd calendar2

python test-GoogleAgenda2.py --noauth_local_webserver

Une URL est alors générée et le programme attend un code de vérification. Copier-coller cette URL dans un navigateur (chrome, firefox, safari, ...) pour récupérer un code de la forme 4/Bgo9RqwRyXnLvM3Hb1_pYTzf22KqjbB3OkJEIRe_pX30RI. Coller ce code de vérification dans la ligne de commande pour continuer l'exécution du programme.

Votre calendrier doit s'afficher (dans un format JSON) dans la fenêtre de la ligne de commande et un fichier "token.json" vient d'être écrit dans le répertoire où vous avez lancé la ligne de commande.

Le fichier token.json doit être dans le répertoire epaper, déplacez le si besoin.

Vous pouvez maintenant relancer la commande :

python test-GoogleAgenda2.py

Elle doit vous afficher votre calendrier sans plus demander d'authentification.

Création d'une clé d'API OpenWeather

Création d'une clé d'API OpenWeather

100% Complete
Openweather est un service en ligne permettant d'avoir des prévisions météo. Pour pouvoir en profiter, il vous faut vous créer un compte gratuit et définir une clé d'API.

Création d'un compte Open Weather

Rendez-vous sur la page : https://home.openweathermap.org/api_keys

Remplissez les champs et validez.

Vous avez à présent un compte chez OpenWeather, voyons maintenant comment récupérer les prévisions météo.

Création d'une clé d'API

Les prévisions météo ne sont accessibles qu'en utilisant une clé d'accès à l'API (une clé d'API).

Pour générer votre clé d'API Open Weather :

  1. Identifiez vous sur la page https://home.openweathermap.org/api_keys
  2. Allez dans la section "API Keys"
  3. Donnez un nom à votre clé, par exemple e-paper
  4. Cliquez sur "Generate"

Vous avez à présent une clé d'accès à l'API pour les prévisions météo d'Open Weather.

Copiez cette clé et collez là dans le fichier config.py dans la section Open Wearther API

Programmes Python

Programmes Python

100% Complete
Les programmes sont écrits en Python.

Il faut

Il est nécessaire d'installer les librairies Python suivantes :

  • Google : google-api-python-client oauth2client
  • Leds : rpi_ws281x adafruit-circuitpython-neopixel psutil
  • Requêtes : request request-cache

Prérequis

Vous devez posséder un compte Google Développeur pour pouvoir accéder à l'API Google et récupérer votre Google Agenda.

Installation des outils système

Le dépôt des codes sources étant sur un serveur GIT, il est nécessaire d'installer les outils GIT par la commande :

sudo apt-get update

sudo apt-get install git

Afin de faciliter les installation des librairies de Python nous allons installer l'utilitaire pip avec la commande :

sudo apt-get install python-pip python3-pip

Installation des librairies python nécessaires

Installation de PIL pour la version Jessie de Raspbian (Python Image Librarie) :

sudo apt-get install python-pil

Installation des autres librairies :

pip install bleach spidev requests_cache

Récupération des codes sources

Ils sont disponibles sur le dépôt GIT suivant :

https://github.com/AlexDesign-Fr/epaper

Configuration du code source

Le fichier config.py contient les identifiants de calendrier Google à afficher. Il est nécessaire de le modifier avec les identifiants de vos calendriers, voici comment faire :

Récupération des identifiants des calendriers Google

Afin d'indiquer au programme quels calendriers afficher, il vous faut l'initialiser avec les IDs de vos Google agenda.

En allant sur la page Google Agenda, vous pouvez trouver les IDs de vos calendriers en cliquant sur l'icône de paramétrage (l'engrenage en haut à droite de la fenêtre). Puis en sélectionnant le calendrier que vous voulez utiliser (colonne de gauche) vous aller trouver l'ID de l'agenda dans la section "Intégrer l'agenda". C'est un identifiant de la forme :

ouae3po7sbgtpfmeja5o6b4@group.calendar.google.com

Copiez-collez cet ID dans le fichier de configuration config.py dans le tableau de la variable CalendarsID.

Il est possible de paramétrer autant de calendrier que l'on veut.

Librairies pour les leds

Les librairies utilisées pour l'allumage des LEDs sont en Python3 et nécessitent les droits root, il faut donc les installer avec :

sudo pip3 install rpi_ws281x adafruit-circuitpython-neopixel psutil

Récupération de l'Identifiant de votre ville (pour la météo et les prévisions)

Il existe plusieurs façon d'avoir la météo de votre ville dans Open Weather (voir https://openweathermap.org/current). Mon programme utilise les identifiants de ville (les IDs) car ils sont uniques et sans équivoque quant aux résultats.

Le plus simple pour trouver l'ID de votre ville est de vous rendre sur la page d'accueil d'Open Weather et de saisir le nom de votre ville (suivie d'une virgule et de son code internationale de pays) et d'en afficher la carte météo. 

Par exemple :

Plabennec,FR

Il y a alors une liste de proposition qui s'affiche. Choisissez votre ville en cliquant sur son nom : le temps actuel s'affiche ?

L'URL de openweather contient maintenant l'ID de votre ville, par exemple :

https://openweathermap.org/city/2986991

l'ID de Plabenec,FR est donc 2986991

Copiez-collez cet ID dans le fichier config.py derrière la variable : openWeatherCityName

Accéder à votre serveur Domoticz (optionnel)

Domoticz ( https://www.domoticz.com/wiki/Main_Page ) permet de mettre en place un serveur domotique. Il peut surtout regrouper des données de température provenant de vos différents capteurs. Ce tutoriel n'a pas pour vocation de vous indiquer comment installer un tel serveur. Dans le cas du projet epaper, Domoticz est utilisé pour renvoyer les températures collectées.

epaper permet d'afficher les valeur de 5 thermomètres connectés à Domoticz. Si vous en avez un en extérieur, c'est cette température qui sera affiché à la place de celle retournée par Open Weather. Vous devez alors définir dans le fichier config.py l'IDx du thermomètre extérieur.

Modifiez le fichier config.py en fonction de votre configuration Domoticz.

Si vous n'avez pas de serveur Domoticz, la température extérieur affichée sera celle trouvée par l'API Open Weather et les température des thermomètres internes ne s'affichera pas.

Description des programmes

Description des programmes

100% Complete

Il y a plusieurs programmes Python qui sont utilisés. Ils sont soient lancés par le programme principal soit par une tâche cron, soit par un événement extérieur.

Le programme principal (main.py) est lancé au démarrage de la raspberry. Il tourne en boucle et appel les programmes d'affichage en fonctions des appuies sur les boutons.

Toutes les heures une tâche cron va lancer un rafraîchissement du calendrier.

Certaines heures une tache cron va aller vérifier si on a une image à afficher. Le calendrier étant situé dans ma cuisine, je lance la tâche cron aux heures des repas.

Voici à quoi sert chaque programme :

  1. main.py  : la boucle principale qui écoute les événements des boutons. Comme ce programme utilise les interuptions des GPIO du RaspberryPI, il est nécessaire de le lancer en python3
  2. calendrier.py  : il permet d'afficher le calendrier Google.
  3. meteo.py  : il permet d'afficher les prévisions météo provenant de Open Weather.
  4. clockAllume.py  : permet d'afficher l'heure sur le bandeau de LEDs. La luminoisité des LEDs est mise à jour en fonction de l'heure (très lumineux dans la journée et plus discret dans la nuit, on va pas faire un phare non plus :-)
  5. clockEteind.py  :  permet d'éteindre le bandeau de LEDs.
  6. config.py : configuration des programmes. C'est dans ce fichier qu'il faut définir les calendriers Google Agenda, la clé d'API Open Weather, votre ville pour les prévisions météo, etc...
  7. photos.py  : permet d'afficher une image à une date donnée. Très pratique pour afficher la tête de la personne dont c'est l'anniversaire aujourdh'ui.
  8. bandeauHaut.py : Ce bout de programme permet d'afficher une partie commune à tout les différents affichage. On y trouve la date, le jour, le mois, la météo actuelle, la température extérieure, les prévision météo pour les jours à venir, etc...
  9. test-XXXXXXX.py : Vous permet de tester le bon fonctionnement d'une partie du programme.
  10. tachesCron.txt : Fichier texte contenant un exemple de tâches cron. Elles peuvent être adaptées à votre besoin.

Interactions entre les programmes

epaper-Illustration des appels

Le projet en images

Première face
2eme face
3eme face
4eme face
Toutes les faces
Présentation de chacune des faces
Copyright © 2015 Alex-design.fr All rights reserved.