Calendar

Calendar

Calendar

Affichage d'un calendrier Google sur un écran e-paper de 7.5 pouces à l'aide d'une Raspberry Pi 3 et détection de présence grâce à smartphone. Si le smartphone n'est pas détecté on affiche un Fact de Chuck Norris.

Il faut

83% Complete

Voici un tuto pour construire un calendrier de bureau à l'aide d'un écran de 7.5 pouces basse consommation (e-paper ou e-ink).

Le calendrier va se mettre à jour automatiquement par une connexion WIFI et s'allumera lorsqu'une liaison bluetooth sera détectée (comme sur un téléphone par exemple).

Le cadre sera découpé dans une planche de bois de 18mm d'épaisseur à la fraiseuse numérique (CNC).

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

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

Câblage de l'écran

100% Complete

Branchements de l'écran sur la Raspberry

Le HAT Raspberry permet de brancher l'écran Waveshare sans difficulté grâce à son connecteur dédié.

Si toute fois, vous n'avez pas de HAT, voici le câblage à faire.

e-Paper Raspberry Pi
BCM2835 Board
VCC 3.3V 3.3V
GND GND GND
DIN MOSI 19
CLK SCLK 23
CS CE0 24
DC 25 22
RST 17 11
BUSY 24 18

Il faut ensuite autoriser l'interface SPI de la raspberry :

sudo raspi-config

Choisir Interfacing Options -> SPI -> Yes  to enable SPI interface

Librairies Python

Librairies Python

100% Complete

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.

Environnement

Afin de préparer l'environnement de production il est nécessaire d'installer les librairies suivantes :

Installation de PIP et PIL :

sudo apt-get install python-pip python-pil

Pour google Calendar API :

pip install --upgrade google-api-python-client google-auth-httplib2 google-auth-oauthlib

Installation de chrome (pour pouvoir autoriser l'API Google sur la machine) :

sudo apt-get install chromium-browser

Pour l'écran : 

pip install spidev

Authoriser la Raspberry à accéder à votre compte Google

A partir d'un terminal SSH Lancer le navigateur Chromium en tache de fond avec la commande :

chromium-browser &

puis executer le script python testGoogleAgenda.py :

cd calendar2

python testGoogleAgenda.py

Lorsqu'une URL s'affiche si elle ne se lance pas dans le navigateur, il faut la copier-coller dans la barre de navigation.

L'authentification se passe en suite dans la fenêtre du navigateur. Une fois que c'est fait, le script python doit continuer son exécution

Installation d'un cache pour les requêtes http

Afin de ne pas surcharger le serveur Openweather, nous allons utiliser un cache dans lequel nous mettrons le résultat des requètes faites.

pip install requests-cache

Installation des librairies pour les images

sudo apt-get -y install libopenjp2-7 python3-rpi.gpio

pip3 install spidev

Installation de git

Nous aurons besoin d'aller chercher des repository sur le serveur de partage de code Github, nous alloons donc installer l'outil git :

sudo apt-get install git

Détection de présence grâce à une connexion Bluetooth

Détection de présence grâce à une connexion Bluetooth

20% Complete
Cette partie permet au Raspberry de détecter la présence d'un smartphone.
Lorsque le smartphone est présent on exécute un script Python.
Lorsqu'il n'est pas présent on exécute un second script.

Objectifs pédagogiques

Nous allons voir comment détecter la présence d'un smartphone en utilisant les fonctionnalités bluetooth de la raspberry Pi

Récupération de l'adresse MAC du périphérique bluetooth

Avant de commencer la programmation Python, il nous faut récupérer l'adresse MAC de notre périphérique Bluetooth.

Installation des logiciels système pour le Bluetooth de Raspian :

sudo apt-get install bluez

On a alors l'outils hcitool qui va nous permettre de récupérer l'adresse MAC de notre périphérique.

Principe de fonctionnement

Nous allons associé un smartphone avec la raspberry PI, pour cela mettre le smartphone en appairage bluetooth et lancer la commande 

hcitool scan

Vous devez alors obtenir une ligne du style :

Scanning ...       

84:B5:41:XX:XX:XX        <Marque Du Smartphone>

Cette ligne correspond à l'adresse MAC du périphérique bluetooth. Copiez-la, nous en aurons besoin plus loin.

Installation des librairies bluetooth pour Python3

J'ai rencontré beaucoup de problème lors de la gestion du bluetooth en python, c'est pourquoi je préconise l'utilisation de python3. Nous allons donc voir comment installer l'environnement et les librairies pour cette version de python.

Installation du gestionnaire de packages pour python3

sudo apt-get install python3-pip

Installation des librairies python3 du bluetooth

sudo apt-get install libbluetooth-dev

sudo apt-get install python-dev

sudo pip3 install PyBluez

Le programme Python

A faire

Installation d'un watchdog sur la Raspberry

Installation d'un watchdog sur la Raspberry

100% Complete
Un watchdog permet de mettre en place une surveillance du système pour vérifier qu'il n'est pas planté ou bloqué.

Objectifs pédagogiques

Faire en sorte que si le programme python se plante, la Raspberry Pi reboot.

Un Watchdog est un processus permettant de rebooter la raspberry lorsqu'elle ne répond plus au bout d'un certain temps.

On initialise un watchdog en lui donnant un temps à décompter. Si le temps est écoulé il reboot la Raspberry. Il est possible de remettre à 0 le décompte, on dit alors qu'on "nourri" le watchdog.

Attention, une fois le watchdog démarré, il n'est pas possible de le reconfigurer ou d'en changer la valeur.

Installation du daemon watchdog

sudo apt-get install watchdog

sudo update-rc.d watchdog defaults

Configuration du watchdog

sudo vi /etc/watchdog.conf

A la fin du fichier, ajouter :

# Mise en route du watchdog ************************************************

# il attend 300 secondes (5 minutes)

watchdog-device  = /dev/watchdog

file = /var/log/calendar.log

change = 300

Cette configuration va faire en sorte que le watchdog va rebooter la machine s'il ne détecte pas de mise à jour du fichier /var/log/calendar.log pendant 300 secondes (5 minutes).

Attention : en cas d’arrêt manuel du script python, la Raspberry rebootera également !

Création d'un fichier de log et attribution des droits

Il faut que notre programme puisse écrire dans le fichier de log en ayant les bon droits. Nous allons donc créer un fichier vide et lui donner les droits pour que l'utilisateur pi puisse écrire de dans.

sudo touch /var/log/calendar.log

sudo chown pi.pi /var/log/calendar.log

Relancer le script python au reboot de la Raspberry

sudo crontab -e

et en fin de fichier, rajouter la ligne :

@reboot /etc/python3 /home/pi/calendar2/bluetoothDevicesCheck.py 

Relancer le service du watchdog :

sudo service watchdog restart

Tracé de graphique météo

Tracé de graphique météo

100% Complete
Affichage dune courbe représentant la vitesse du vent pour une ville donnée.

Objectifs pédagogiques

Nous allons voir comment installer la librairie graphique matplotlib de Python pour afficher une courbe montrant la vitesse du vent. La vitesse est relevée sur le site OpenWeather sur pour l'emplacement d'une ville 

Il faut

Un compte openweather (gratuit)

Installation des librairies Python

Installation de la librairie :

sudo apt-get install python-matplotlib libatlas-base-dev

Le programme

forecast = session.get( "http://api.openweathermap.org/data/2.5/forecast?id=" + config.openWeatherCityName + "&units=metric&lang=fr&appid=" + config.openWeatherAPI)

weatherForcast = forecast.json()

weatherForcast = weatherForcast['list']

vitesseVent = []

labelle = []

# Keep only 9 first data

for forcast in weatherForcast[:9]:

    # extract the label

    letter = datetime.utcfromtimestamp(forcast['dt']).strftime('%a') # the day according to local abreviation

    letter = letter[:1].upper() + "." value = datetime.utcfromtimestamp(forcast['dt']).strftime('%Hh') labelle.append(letter + str(value))

    # extract the wind speed

    value = float(forcast['wind']['speed']) * 3.6

    vitesseVent.append(value)

# Create the graphic with wind speed ---------------------------------------------------------------

# figsize is in inch (depends of the dpi (72 by default))

fig = plt.figure(num=None, figsize=(7, 2), dpi=65, facecolor='w', edgecolor='k')

plt.plot( labelle, vitesseVent)

plt.title("Prévision vitesse vent (km/h) pour les prochaines 24h")

plt.ylabel('km/h')

plt.close()

fig.savefig(config.windSpeedPictureFile) # Save the graphique in this name's file

Création d'un boitier

Création d'un boitier

25% Complete

Il faut

  • Fraiseuse à commande numérique (CNC).
  • Découpeuse laser

Les plans de fabrication

En cours

Montage

Une fois le boitier découpé à la fraiseuse numérique, il faut faire un trou pour passer le cables d'alimentation de la raspberry Pi.

Le montage du boitier est très simple. Il est inutile de mettre de la colle ou des vis, l'assemblage rentre en forçant un petit peu. Attention à l'écran, il est fragile !

Le projet en images

Boitier avec le support

Le boitier avec le cadre amovible pour faire tenir l'écran..

Face arrière du boitier

Face arrière du boitier. Remarquez le trou (à faire à la main) pour faire passer le câble d'alimentation.

Branchement de l'écran

Fixation de la Raspberry Pi dans le boitier avec une simple vis.

Positionnement de l'écran dans le cadre

Positionnement de l'écran dans le cadre.

Attache de la nappe au fond du cadre

Fixation de la nappe au fond du cadre pour ne pas qu'elle coince lors de la fermeture du boitier.

Le calendrier

Le calendrier une fois monté.

Arrière du calendrier

Face arrière du boitier du calendrier.

Copyright © 2015 Alex-design.fr All rights reserved.