DIY : Montage d’une webcam avec Raspberry, PiCam et clé 3G

Dans cet article je vais vous montrer comment j’ai fabriqué une webcam (ou MétéoCam) à l’aide d’un boitier de caméra factice, un Raspberry Pi, une Pi-Cam et une clé 3G (H+) pour l’accès au réseau.

J’ai réalisé ce montage dans le but de diffuser (pour l’association Nice Météo 06) une image de la ville de Nice et surtout de son ciel, particulièrement parlant les jours de mauvais temps. A l’écriture de ces lignes, la webcam est en ligne à cette adresse, et fonctionne depuis Mai 2016.

PS : les liens Amazon de cet article sont sponsorisés, ça ne vous coûtera rien de plus 😉

1. Le boitier/abri

Pour abriter cette webcam, il nous faut un abri. Il faut qu’il soit assez grand pour faire rentrer un Raspberry Pi, et pratique ! Et étanche bien sûr ! Et ce n’est pas si simple à trouver dans un prix restant abordable. Personnellement je me suis servi de l’abri Elro CS66D sur Amazon.

[amazon_link asins=’B001AEDWVY’ template=’ProductCarousel’ store=’apha0d-21′ marketplace=’FR’ link_id=’3a84277d-e8c5-11e7-86e9-71b225887c86′]

Il n’est pas idéal car après plusieurs démontages et remontages j’ai eu un doute sur l’étanchéité du produit… Je suis donc maintenant obligé de siliconer les joints… Mais il a fait le taff pendant une bonne année avant qu’un peu d’eau ne rentre par un joint de la vitre avant. Et là encore, comme dit le fameux proverbe « Quand ça déconne, il y a silicone ! ».

Quand ça déconne il y a silicone ! Montage d'une #MétéoCam avec un #RaspberryPi et Clé 3GClick to Tweet

Le montage dans un boitier de caméra factice n’est pas obligatoire selon l’emplacement final de la webcam. Derrière une fenêtre, dans un boitier maison, etc.

2. Raspberry Pi et PiCam

En ce qui concerne le Raspberry Pi, il n’en existe pas 12 modèles (enfin pas encore), mais à priori un Pi 2, un Pi 3 ou un Pi Zero feront l’affaire. En l’occurrence j’ai utilisé un Pi 2, mais le Pi 3 qui intègre le Wi-Fi peut-être très pratique en extérieur et proche de la maison. 😉 (Note : il existe aujourd’hui également le Pi Zero W avec un kit pour faciliter son exploitation, moins chère, et plus petit en taille donc plus facilement intégrable dans autre chose qu’un boitier de webcam par exemple…)

[amazon_link asins=’B01CD5VC92,B013UDL5V6,B00U88KSHO’ template=’ProductCarousel’ store=’apha0d-21′ marketplace=’FR’ link_id=’791b1a51-e8c5-11e7-814e-d3905e898550′]

Pour ce qui est de la caméra, et pour exploiter tout le potentiel du Raspberry Pi, le mieux est d’utiliser la PiCam V2 ! Pour en avoir fait l’expérience, le fonctionnement avec d’autres webcams comme des Logitech fonctionnera, mais les réglages de luminosité et de mise au point sont bien plus compliqués à gérer ! A s’en tirer les cheveux !

[amazon_link asins=’B01ER2SKFS’ template=’ProductCarousel’ store=’apha0d-21′ marketplace=’FR’ link_id=’8669a0f4-e8c5-11e7-a944-ff7108981ad3′]

3. Clé 3G/H+

Ici le choix n’est pas énorme non plus puisqu’il faut trouver une clé compatible avec Linux (Raspbian). Pour vérifier la compatibilité, une liste est établie sur ce site et peut s’avérer très pratique. La clé que j’ai utilisée n’y figure pas, mais pas de problème avec. 😉

[amazon_link asins=’B00HSZEY34′ template=’ProductCarousel’ store=’apha0d-21′ marketplace=’FR’ link_id=’8ff70004-e8c5-11e7-ae47-552018496668′]

4. Configuration

La suite de ce tuto est grandement inspirée du site Épinglé !, auquel j’ai fait quelques ajouts/améliorations avec notamment la possibilité d’intégrer les paramètres météos de sa propre station grâce au logiciel Weewx.

Schéma provenant du site Épinglé !, illustrant les différents scripts mis en place pour la webcam
Schéma provenant du site Épinglé !, illustrant les différents scripts mis en place pour la webcam

4.1. Installation de paquets sur la RPI

En premier lieu après avoir installé proprement Raspbian, activé le mode console (pas besoin d’interface graphique !), il faut installer 3 paquets :

sudo apt-get update && sudo apt-get upgrade
sudo apt-get install imagemagick ftp unzip

4.2. Récupération des scripts

On se déplace dans le répertoire souhaité, on télécharge et on dézippe :

cd /home/pi
wget https://github.com/RaphaelChochon/RPI-PiCam/archive/v1.1.zip
unzip RPI-PiCam-1.0.zip

On déplace les scripts pour garder une copie propre en cas de pépin :

cp -r RPI-PiCam-1.0/webcam/ /home/pi/webcam

Si tout va bien, on retrouve nos scripts dans le dossier /home/pi/webcam/

 4.3 Personnalisation des scripts

Dans ce dossier /home/pi/webcam/ on devrait retrouver plusieurs scripts shell :

  • webcam.sh : C’est le script principal qui va appeler tous les autres !
  • data_copy.sh ou data_ftp.sh : Il faudra choisir entre l’un des deux. Ces scripts font la même chose, c’est-à-dire qu’ils vont récupérer le fichier data.txt produit par Weewx, lui-même alimenté par notre station météo perso. Si la station météo et Weewx sont sur la même RPI que celle qu’on est en train de configurer pour la PiCam, alors on utilisera le script data_copy.sh. Sinon, on utilisera le script data_ftp.sh qui ira se connecter à notre serveur web pour récupérer le fichier data.txt.
  • dtstamp.sh : C’est le script qui va se servir du paquet imagemagick installé précédemment, afin de « tagué » l’image (texte, insertion du logo, etc)
  • ftp.sh : C’est le dernier ! Il va envoyer sur notre site web via FTP l’image produite.

webcam.sh :

On commence par éditer celui-ci. Et il n’y a pas grand-chose à faire ! En fait on va simplement venir lui dire pour la récupération du fichier data.txt, quel script utiliser. Cela se passe entre la ligne 10 et 11, et on aura le choix entre deux propositions :

webcam.sh
#sudo ./data_copy.sh
#sudo ./data_ftp.sh

On utilisera le script data_copy.sh si la station météo et Weewx sont sur la même RPI que celle qu’on est en train de configurer pour la PiCam.
Sinon on utilisera le data_ftp.sh.

Pour choisir entre les deux, on décommentera celui que l’on veut utiliser (le # devant une ligne, signifie que cette ligne est un commentaire ; Elle n’est donc pas prise en compte lors de l’exécution du script).

Ensuite, on peut voir que le script attend 20 secondes avant de passer à l’étape suivante. Le but est d’attendre que le data_ftp.sh ait fini de récupérer le fichier data.txt. Ce temps peut être considérablement réduit si on dispose d’une excellente connexion internet, ou si on utilise le script data_copy.sh.

La ligne 17 exécute le script dtstamp.sh qui va permettre de taguer l’image avec le texte, le logo, etc… On attend à nouveau 10 secondes, pour laisser le temps à la RPI de « fabriquer » notre image.

A la ligne 26 on exécute le script ftp.sh, qui va transmettre notre image taguée sur notre site.

Et enfin, à la ligne 26, on supprime l’image temporaire pour faire de la place pour la suivante.


data_ftp.sh & data_copy.sh :

Passons maintenant à la configuration de la connexion FTP qui va aller récupérer notre fichier data.txt sur le serveur de notre site.

Il est assez simple à configurer, puisqu’il suffit de compléter les identifiants de connexion comme c’est indiqué à l’intérieur. Quatre paramètres sont importants : HOST, LOGIN, PASSWORD et PORT.
Ensuite deux chemins sont à configurer :

Le premier à la ligne 9 n’a normalement pas besoin d’être modifié, sauf si on a stocké nos scripts ailleurs sur le RPI.

Le deuxième à la ligne 16 est important, et sera surement différent selon la configuration serveur. Ce qu’il faut comprendre, c’est qu’il s’agit du chemin qui emmène à l’endroit où est stocké le fichier data.txt. Il peut être d’ailleurs intéressant de configurer la connexion FTP utilisée ici à n’accéder qu’à ce répertoire.

Ensuite, on peut voir qu’avec la commande get on récupère vers nous le fichier data.txt.

Si nous utilisons le script data_copy.sh, nous pouvons voir qu’il s’agit d’une simple commande de copié/collé en local sur le RPI. Rien de plus simple que de changer les chemins d’accès en fonction de notre configuration.


dtstamp.sh :

Ce script est un petit peu plus complexe, mais nous n’avons pas grand-chose à y configurer. De la ligne 5 à la ligne 21, on traite le fichier data.txt en récupérant que ce qui nous intéresse, et on place le contenu dans des variables que nous utiliserons plus bas.

Ce qui nous intéresse se situe à partir de la ligne 76. À cette ligne on récupère le logo Raspberry_Pi.png fourni avec les scripts qui va être placé en bas à droite de l’image. Vous pouvez le modifiez à votre guise, mais attention si vous changez son nom, à ne pas oublier de venir écrire son nouveau nom ici même.

Ensuite à la ligne 79 on va configurer les dimensions et la couleur du bandeau gris en haut de l’image qui va contenir les données météo, l’heure, etc…

rectangle 0,0,3280,110 : Les deux derniers nombres sont la largeur et la hauteur en pixels du bandeau. En fonction de la qualité de la PiCam utilisée, il faudra changer la largeur. 2592px pour la PiCam V1, et 3280 pour la PiCam V2.

Enfin, chacune des lignes suivantes va taguer le bandeau avec du texte. La première ligne ajoutera l’heure en haut à gauche. La seconde configure la ligne juste en dessous, avec comme contenu toutes les variables configurées tout en haut de ce script et contenant les données météos. La troisième le nom de la station, l’altitude, etc… Et enfin la quatrième … ce que vous voulez. À noter que le nombre juste après la mention pointsize à chaque ligne est la taille de la police de caractère. À modifier en fonction de la qualité de la webcam…

Enfin la ligne 84 configure la qualité de compression jpg de l’image. Une valeur de 75 est largement correcte et économise de la bande passante. Pour les puristes vous pouvez laisser 95.

On peut voir à la ligne 85 le nom du l’image de sortie viewcam.jpg.


ftp.sh :

Ce dernier script ressemble énormément au script data_ftp.sh puisque c’est la configuration pour l’envoi FTP vers le serveur. Cette fois-ci la ligne 16 pointe vers le répertoire qui réceptionnera l’image définitive de la webcam.

 

4.4. Automatisation

Très important, à ne pas oublier, il faut absolument rendre tous ces scripts exécutables :

sudo chmod a+x webcam.sh data_ftp.sh data_copy.sh dtstamp.sh ftp.sh

Pour exécuter tout ceci de manière régulière et automatique, on va paramétrer une tache cron sur le RPI. Pour cela :

crontab -e

Et tout en bas, on y ajoute cette ligne pour une exécution toutes les 2 minutes :

crontab
# m h  dom mon dow   command
*/2 * * * * sh /home/pi/webcam/webcam.sh

 

5. Diverses photos de l’installation de la webcam

 

 

6. Pour finir…

Image de celle de Nice-Pessicart visible ici : https://nice-pessicart.meteo06.fr/webcam.php

 

Un jour d’avril… (merci papa pour la blague !)

 

Une fine trombe :

Très fine trombe marine vu par la webcam
Très fine trombe marine vue par la webcam (il faut zoomer)

En exemple, deux timelapses du mois d’Août 2017 avec le passage de quelques beaux nuages. Et oui, les jours de beaux temps, le timelapse n’est franchement pas intéressant ! 😛

10 Août 2017 :

13 Août 2017 :