J’ai fabriqué une horloge parlante !

Pour occuper les soirées pluvieuses de cet hiver, rien de mieux que la programmation… Je me suis dit “ tiens et si je fabriquais une horloge parlante ?” !!!! Avec un ordinateur Raspberry Pi, quelques composants annexes, et un peu de codage sous l’environnement LINUX c’est relativement facile et c’est gratuit !! Je vais vous expliquer comment j’ai procédé et je vais mettre à votre disposition tous les éléments logiciels que j’ai créés. Donc même ceux qui ne comprennent rien à la programmation devraient pouvoir réaliser ce projet.

Tout d’abord il nous faut un Raspberry Pi. N’importe lequel de préférence. Moi j’avais sous la main un Raspberry Pi 3 fonctionnant sous le système d’exploitation Raspbian Jessie et c’est sur celui-ci que j’ai maquetté mon horloge parlante. Pour programmer à distance le Raspberry Pi il faut aussi un PC Windows sur lequel il faut préalablement installer le logiciel PUTTY que l’on peut télécharger gratuitement sur ce site. Par son entremise et grâce au réseau WIFI de la maison je peux accéder en mode “Terminal de commande” au Raspberry et télécharger dans son système tous les éléments utiles à savoir  les programmes pour le faire parler (qu’on trouve sur Internet gratuitement), les sons  et les scripts de commande.

Screenshot (22h 33m 33s)

Pour accéder au Raspberry, pour le programmer via PUTTY,  il faut préalablement connaître son adresse IP sur votre réseau local. En effet chaque fois qu’on met en marche le Raspberry PI, si il est connecté au réseau soit par un câble Ethernet, soit en Wifi, le réseau Internet lui octroie une adresse. Cette adresse étant attribuée dynamiquement à chaque mise en marche du PI, elle change et donc il faut un moyen de la connaître. L’adresse IP typique est de la forme 192.168.1.xy   xy change à chaque fois pratiquement. Un autre logiciel sur votre PC va permettre de la connaître. Personnellement j’utilise le logiciel Advanced IP scanner que l’on trouve sur ce site.

Screenshot (00h 19m 54s)

Ensuite, pour se connecter via PUTTY il faut donc rentrer l’adresse IP du Raspberry puis indiquer l’identifiant et le mode de passe de votre Raspberry. Le plus souvent si vous n’avez rien modifié ce sera :

login as: pi

password: raspberry

Screenshot (00h 24m 02s)

 

Ensuite quels sont les éléments logiciels permettant de faire “parler” le Raspberry Pi ? J’ai cherché sur Internet et sur ce site, j’ai trouvé l’idée de départ. La revue Linux Magazine France propose un script qui fonctionne très bien mais je l’ai modifié à ma convenance. Il faut donc préalablement charger sur le Pi quelques programmes gratuits. J’ai utilisé les programmes pico2wave, sox et play . pico2wave permet de créer un fichier son à partir d’un texte, avec une voix synthétique en français, sox permet de transcoder le fichier son en mp3, afin que le programme play le joue sur son connecteur de sortie son (brancher un ampli ou des écouteurs pour entendre).

On passe à l’installation du programme Pico2wave. l’installation ne pose pas de problème particulier. Il faut entrer via PUTTY la commande suivante:

sudo apt-get install libttspico-utils

Puis on passe à l’installation du programme sox en entrant la commande suivante via PUTTY :

sudo apt-get install sox

Une fois ces opérations réussies, il faut créer le script ci-dessous via PUTTY en mode commande. J’ai créé ce fichier sur mon Raspberry en l’intitulant  dit.sh

Pour le créer j’entre via PUTTY la commande suivante :

sudo nano dit.sh

Ensuite, une fois dans le mode éditeur, ajoutez ces lignes dans le fichier :

#!/bin/bash

pico2wave -l fr-FR -w /tmp/test.wav « $1 »
sox /tmp/test.wav  -r 48k /tmp/test.mp3 pitch -300
play -q /tmp/test.mp3 pitch –100
rm /tmp/test.wav
rm /tmp/test.mp3

Puis enregistrez ce que vous venez de faire grâce à la commande  (CTRL X)

Bon. Alors que fait ce petit programme ? Tout d’abord il utilise le programme pico2wave qui crée un fichier test.wav (dans le paramétrage de pico2wave il faut utiliser fr-FR pour que le RasPi s’exprime dans la langue de Molière.) , le fichier .wav est transcodé  en mp3 avec le programme sox, lu avec le programme play puis les fichiers test.wav et test.mp3 sont supprimés. $1 représente la phrase que vous passerez en paramètre sur la ligne de commande.

Rendez le script dit.sh exécutable grâce à la commande :

sudo chmod 755 dit.sh

Voilà ! Maintenant si vous entrez dans PUTTY la commande :

./dit.sh “je suis le roi des programmeurs”

Vous pourrez entendre le Raspberry Pi prononcer cette phrase à haute voix!!! C’est magique ! Mais maintenant comment transformer ça en Horloge parlante ??? Il faut être capable de connaître l’heure du PI, puis de la dire à un ou à des moments convenus. Comment faire ? Il faut encore là aussi, programmer un nouveau petit script. On va l’appeler Horloge.sh

Pour le créer j’entre via PUTTY la commande suivante :

sudo nano Horloge.sh

Ensuite, une fois dans le mode éditeur, ajoutez ces lignes dans le fichier :

#!/bin/bash
# prononcer l’heure courante
H=$(date +%k)
./dit.sh « $H » »heure, et »
M=$(date +%M)
./dit.sh « $M » »minute »

#Faire sonner le son du carillon autant de fois  que nécessaire
i=0

if test $H -gt 12
then
i=12
fi

while [ $i -ne $H ] ; do
  play -q /home/pi/Carillon.mp3
  i=$(($i + 1))
done

if [ $H -eq 0 ] && [ $M -eq 0 ]
then
i=11
while [ $i -ne $H ] ; do
  play -q /home/pi/Carillon.mp3
  i=$(($i – 1))
done
fi

Puis enregistrez ce que vous venez de faire grâce à la commande  (CTRL X)

Rendez le script Horloge.sh exécutable grâce à la commande :

sudo chmod 755 Horloge.sh

Bon. Alors que fait ce petit programme ? Je vous passe les détails de la syntaxe du langage de programmation. Il injecte dans les variables H et M l’heure et la minute courante telles que le PI la connait (le PI se met automatiquement à l’heure via Internet). Puis il prononce l’heure et la minute du style 17 heures 35 minutes en utilisant le script dit.sh généré en début de cet article. Le programme attend que la phrase complète se termine puis, et c’est un petit plus de mon cerveau, il fait sonner un carillon Dong, Dong, Dong autant de fois que nécessaire, en utilisant un son de carillon au format mp3 que j’ai chargé dans sa mémoire. Vous pouvez vous aussi utilisez ce son car je vous l’ai mis en téléchargement sur mon CLOUD Orange ici. (Mais vous pouvez utiliser n’importe quel son de votre choix.)Alors vous allez me dire comment faire pour mettre un son mp3 dans un raspberry Pi ? Pour cela j’ai utilisé le programme WinSCP téléchargeable gratuitement sur ce site. Il permet pas mal de chose et entre autres d’injecter des dossiers et fichiers de toutes sortes de son PC à son Raspberry dans le dossier qui va bien sur la carte SD qui contient le système d’exploitation du Raspberry. Moi je l’ai mis mon son Carillon.mp3 dans le dossier /home/pi/ …  Voilà, voilà. Bon c’est pas tout ça mais comment faire pour que le Raspberry active ce script Horloge.sh de façon régulière pour le transformer en une Horloge parlante digne de ce nom? il faut avoir recours à la crontab pour automatiser … c’est un outil interne au système LINUX qui permet de lancer des applications de façon régulière dans son Raspberry. Il faut accéder à cette Crontab et la paramétrer par exemple comme ceci pour dire l’heure toutes les 15 minutes :

Via PUTTY, rentrez la commande :
sudo crontab -e

puis entrez
*/15 *  *  *  * bash /home/pi/Horloge.sh

Voilà. Et là, miracle. Toutes les 15 minutes mon Raspberry prononce l’heure et sonne les cloches !!! ça fonctionne tellement bien que ça finit par être pénible… Du coup je décide de ne  faire sonner les cloches que à l’heure pile. Donc je vais modifier mon script Horloge.sh comme suit :

#!/bin/bash
# prononcer l’heure courante
H=$(date +%k)
./dit.sh « $H » »heure, et »;
M=$(date +%M)
./dit.sh « $M » »minute »;

#Faire sonner le son du carillon autant de fois  que nécessaire à l’heure pi$
i=0

if test $H -gt 12
then
i=12
fi

if test $M -eq 0
then
play -q /home/pi/IntroBigBen.mp3;
while [ $i -ne $H ] ; do
play -q /home/pi/Carillon.mp3;
i=$(($i + 1))
done
fi

if test $M -gt 0
then
i=$(($H – 1))
while [ $i -ne $H ] ; do
play -q /home/pi/Carillon.mp3;
i=$(($i + 1))
done
fi

if [ $H -eq 0 ] && [ $M -eq 0 ]
then
i=11
while [ $i -ne $H ] ; do
  play -q /home/pi/Carillon.mp3;
  i=$(($i – 1))
done
fi

Pour terminer, voici une petit script supplémentaire qui permettra à votre Raspberry, de vous dire à chaque démarrage, la date du jour, son adresse IP et un petit bonjour. Ce code doit être implanté dans le fichier rc.local qui se trouve dans le dossier etc du Pi. En effet, quand le PI fonctionne avec le système d’exploitation Raspbian Jessie il faut savoir qu’il lance au démarrage les commandes qui sont dans ce fichier rc.local (Attention ceci n’est plus vrai dans les nouvelles versions de Raspbian):

Pour modifier le contenu de rc.local j’entre via PUTTY la commande suivante :

sudo nano etc/rc.local

puis entrez les commandes suivantes :

#!/bin/sh -e
#Règle le volume du speech
amixer sset ‘PCM’ 100%
# Dit la date courante
d=$(date)
/home/pi/./dit.sh « Nous sommes le » »$d »
#Prononce l’adresse IP courante
IP=$(hostname -I)
/home/pi/./dit.sh « Mon adresse IP est » »$IP »
# Dit Bonjour
/home/pi/./dit.sh « Je vous salu les amis.Jespère que vous allé bien? Je suis à votre disposition”

exit 0

Voilà voilà… Tout cela fonctionne parfaitement bien … C’est tout pour aujourd’hui ! On s’est bien amusé …

Publicités

A propos jeangaillat

Marié, 2 enfants, Charlotte et Alexis
Cet article a été publié dans Informatique, Programmation, Raspberry Pi. Ajoutez ce permalien à vos favoris.

Un commentaire pour J’ai fabriqué une horloge parlante !

  1. Ping : Un générateur de discours “langue de bois” informatisé sur Raspberry Pi | Le Blog de Jean Gaillat

Répondre

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l'aide de votre compte WordPress.com. Déconnexion /  Changer )

Photo Google

Vous commentez à l'aide de votre compte Google. Déconnexion /  Changer )

Image Twitter

Vous commentez à l'aide de votre compte Twitter. Déconnexion /  Changer )

Photo Facebook

Vous commentez à l'aide de votre compte Facebook. Déconnexion /  Changer )

Connexion à %s