L'idée m'est venue après la réception de mon Pi2, d'utiliser mon premier Pi, un Pi1 B+ sur un projet concret.
Ayant un terrarium à la maison avec un serpent inoffensif, un serpent des blés, je me suis lancé dans la gestion du terrarium par le pi:
Le contrôle du chauffage et de l’éclairage, un affichage LCD (optionnel) et un site web comme interface de contrôle et statistique.
ce projet m'a pris environ 2 ans, j'ai découvert le monde des capteurs et de la programmation avec le Raspberry pi et je trouve cela passionnant.
matériel nécessaire
- un Raspberry Pi 1,2 ou 3 (le pi 3 dans mon cas) avec son alim, sa carte micro sd ou sd selon le modèle, une clé wi-fi si c'est un pi 1 ou pi 2 :
- Deux sondes DHT22 :
- Deux résistances de 4.7 K Ω :
- Un module 2 relais :
- Un bouton poussoir (optionnel):
- Un écran LCD 16x2 (optionnel):
- Un potentiomètre (optionnel):
- Une breadboard :
- Des câbles Dupont Mâle/mâle, Mâle/femelle, Femelle/femelle :
Le montage
Voici le schéma :
Si vous n'avez pas d'ecran LCD, ne branchez pas le bouton et le potentiomètre.
Et les explications :
Le potentiomètre en 5v et GND et la pin du milieu sur la pin 3 de l'écran LCD. (sert a régler la luminosité de l' écran)
Le bouton en 3.3v et GPIO 19 du Raspberry pi. (sert à lancer la séquence d'affichage)
Le module 2 relais en 5v et GND ,et l' entrée 1 du relais au GPIO 17 du Raspberry pi (ce sera le chauffage), et l' entrée 2 du relais au GPIO 4 du Raspberry pi (ce sera la lumière).
La sonde pour le point froid, la pin 1 en 3.3v et la pin 4 au GND,
la pin 2 au GPIO 22 du Raspberry pi.
Il faut placer une résistance de 4.7 kΩ entre la pin 1 et 2 de la sonde. La pin 3 n'est pas utilisé.
La sonde pour le point chaud, la pin 1 en 3.3v et la pin 4 au GND,
la pin 2 au GPIO 27 du Raspberry pi.
Il faut placer une résistance de 4.7 kΩ entre la pin 1 et 2 de la sonde. La pin 3 n'est pas utilisé.
Et l'écran LCD:
- pin 01 : au GND
- pin 02 : au 5v
- pin 03 : au pin 2 du potentiomètre
- pin 04 : au GPIO 7 du Raspberry pi
- pin 05 : au GND
- pin 06 : au GPIO 8 du Raspberry pi
- pin 07 : non utilisé
- pin 08 : non utilisé
- pin 09 : non utilisé
- pin 10 : non utilisé
- pin 11 : au GPIO 25 du Raspberry pi
- pin 12 : au GPIO 24 du Raspberry pi
- pin 13 : au GPIO 23 du Raspberry pi
- pin 14 : au GPIO 18 du Raspberry pi
- pin 15 : au 5v
- pin 16 : au GPIO 13 du Raspberry pi
Préparation du Pi
Installation de Raspbian Jessie lite
Je préfère cette version de Raspbian (lite) car je n'est pas besoin d'interface graphique pour jouer avec des capteurs, elle est donc moins lourde, plus rapide a installer et surtout a mettre a jours.
Branchez l’Ethernet, un clavier, une souris et un écran pour la première utilisation, ensuite on s’en passera, on pilotera le pi en SSH par notre PC habituel.
Formatez une carte micro SD, class10 de préférence, en fat32 .
Téléchargez Raspbian Jessie lite, et installez la sur votre carte micro SD.
Placez la carte SD dans le pi et démarrez le, Raspbian se lance et vous devez vous loguer :
Login : pi
Mot de passe : raspberry
Le clavier étant en QWERTY, il faut taper rqspberry
Vous voila logué, on va activer le SSH pour pouvoir utiliser le pi a partir de notre PC :
Activation du SSH
Tapez :
sudo raspi-config
Le clavier étant en QWERTY, il faut taper sudo rqspi-config
puis allez sur le choix 9 , Advanced options :
(les flèches, touche tab pour changer et touche entrée pour valider)
Puis A4 SSH :
Voila pour le SSH .
Changez la langue, le fuseau horaire et clavier AZERTY puis changez le mot de passe
Allez sur le choix 5, Internationalisation Options :
On va paramétrer les 4 choix suivant:
I1 Change Locale:
décochez «en_GB.UTF-8 UTF-8» (barre espace) et cochez «fr_FR.UTF-8 UTF-8» :
Revenir sur le choix 5, Internationalisation Options puis :
I2 Change Timezone:
Choisir Europe :
Puis choisir Paris
Revenir sur le choix 5, Internationalisation Options puis :
I3 Change Keyboard Layout
choisir le modèle de clavier :
Puis la langue :
la disposition :
Revenir sur le choix 5, Internationalisation Options puis :
I4 Change Wi-fi Country:
Voila, on a terminé:
Le pi redémarre et prend en compte les modifications
Maintenant on se connecte:
Login : pi
Mot de passe : raspberry
Avant de changer le mot de passe on va récupérer l'adresse IP du pi pour cela tapez :
ifconfig
Et notez l'adresse IP
Vous pourriez avoir besoin de l'adresse mac de la carte WIFI pour donner une adresse statique au pi, si besoin, noter là
Changeons le mot de passe :
sudo raspi-config
Allez sur le choix 2, Change User Password :
une fois changé, on redémarre le pi:
sudo reboot
Connexion par SSH depuis un PC
Maintenant vous pouvez vous connecter au pi en SSH, soit par putty si vous êtes sous Windows, soit directement dans le terminal sous Linux .
Par Putty pour Windows, il suffit de choisir SSH, mettre l' IP du pi noté précédemment, le port (22) et le login.
Depuis un pc Linux, dans le terminal on tape:
sudo ssh pi@192.168.xx.xx (adresse IP du pi noté précédemment)
On vous demandera le mdp de votre pc, puis le mdp du Raspberry
Et vous serrez connecté
Configuration du WIFI
donc on est en SSH sur le pi, on tape (ou copiez collez):
sudo nano /etc/wpa_supplicant/wpa_supplicant.conf
et on ajoute ces lignes à la fin :
network={
ssid="ESSID"
psk="Your_wifi_password"
}
Ctrl x pour sortir o et touche entrée pour enregistrer
On redémarre le pi pour prendre en compte la modification:
sudo reboot
Il faut donner une adresse IP fixe au Raspberry pi, le mieux est de passer par l'interface web de votre box internet, et modifier l'adresse de dynamique à statique ou fixe, si vous ne savez pas, vous trouverez des tutoriels sur la toile.
Une fois que vous avez votre adresse IP du Raspberry pi pour le WIFI vous pouvez débrancher le câble Ethernet et vous connecter en SSH par cette adresse.
Au cas où,si au démarrage vous ne connaissez pas l' IP du pi en WIFI, loguez vous et tapez sur le pi :
ifconfig wlan0
Et notez l' IP
Maintenant on peut débrancher le clavier, la souris, l'écran et le câble Ethernet, on utilisera le pi par SSH à distance sur cette adresse IP.
Mettre à jour le Raspberry pi
Connectez-vous en ssh sur le pi, une fois connecté tapez:
sudo apt-get update && sudo apt-get upgrade -y
cela fait la mise à jour des dépôts et ensuite installe les mises à jour en disant oui pour tout
Pour mettre à jour le firmware du Raspberry pi :
sudo apt-get install rpi-update
sudo rpi-update
Puis on redémarre le Raspberry pi :
sudo reboot
Les programmes nécessaires
installer git, build et les librairies python
sudo apt-get install apt-transport-https -y
Puis
sudo apt-get install build-essential python-dev python-openssl git python-pip -y
On va installer une librairie python permettant de récupérer l'éphéméride et une pour le Timezone
sudo pip install ephem pytz
On se place dans le dossier Pi et on installe les librairies pour les sondes DHT22
cd /home/pi
Puis
git clone https://github.com/adafruit/Adafruit_Python_DHT.git
Une fois copié on va dans le dossier
cd Adafruit_Python_DHT
Et on lance l'installation
sudo python setup.py install
On retourne dans le dossier Pi et on installe les librairies pour l'écran LCD
cd /home/pi
Puis
git clone https://github.com/dbrgn/RPLCD
Une fois copié on va dans le dossier
cd RPLCD
Et on lance l'installation
sudo python setup.py install
Puis on retourne dans le dossier pi
cd /home/pi
Création de la base de donnée
Nous allons donc installer MySQL :
sudo apt-get install mariadb-server python-mysqldb -y
Puis une fois installé, il faut paramétrer le mot de passe root (admin), si pendant l'installation on vous demande pas de le créer il faudra taper :sudo mysql_secure_installation
taper entrée à la demande du mot de passe root, pour une premiere utilisation, puis y à toutes les questions la première étant de definir le mot de passe.
Pendant l'installation vous devez définir un mot de passe, notez le ou souvenez-vous en, on en aura besoin.
On va créer une base de donnée que l'on va nommé "Terrarium", pour cela on se connecte à MySQL en root :
mysql -u root -p -h localhost
Puis entrez votre mot de passe défini précédemment, celui que l'on doit noter ou se souvenir, et vous devriez avoir ceci:
Puis on crée la base de donnée ;
CREATE DATABASE Terrarium;
On entre dedans :
USE Terrarium;
Puis on crée un utilisateur (XXXXX) et son mot de passe (yyyyyy) qui accédera à la base de donnée, bien entendu vous devez remplacer les XXXXX et yyyyyy par un nom de login et un mdp.
CREATE USER 'XXXXX'@'localhost' IDENTIFIED BY 'yyyyyy';
On donne les droits au nouvel utilisateur à la base de donnée Terrarium :
GRANT ALL PRIVILEGES ON Terrarium.* TO 'XXXXX'@'localhost';
Remplacez XXXXX par votre nom d'utilisateur
Puis
FLUSH PRIVILEGES;
Et on quitte Mysql
quit
Ici mon login est manu et j'ai flouté mon mdp.
Maintenant on se reconnecte en tant que l'utilisateur défini plus haut (XXXXX):
mysql -u XXXXX -p -h localhost
On se rend dans la base de donnée Terrarium :
USE Terrarium;
Et on crée la table "capteurdata" qui contiendra les champs " dateandtiime " pour la date et l'heure, " tempF " et " humF " pour les datas de la sonde au point froid, et " tempC " et " humC " pour les datas de la sonde au point chaud.
CREATE TABLE capteurdata (dateandtime DATETIME, tempF DOUBLE, humF DOUBLE, tempC DOUBLE, humC DOUBLE);
Et on crée la table "config" qui contiendra les paramètre modifiable du terrarium.
CREATE TABLE config (dateetheure DATETIME, loginadmin VARCHAR(32), mdpadmin VARCHAR(32), longitude FLOAT, latitude FLOAT, altitude INT, limitebasse INT, limitehaute INT, jour INT, nuit INT, warmpi INT, envoyeur VARCHAR(32), mdpenvoyeur VARCHAR(32), receveur VARCHAR(32), ip VARCHAR(32), Heure_ete_hiver INT);
Et on quitte MySQL :
quit
On redémarre MySQL :
sudo /etc/init.d/mysql restart
Voilà, la base de donnée est prête à recevoir nos datas.
installation du serveur web et PHP
Pour afficher une page web il nous faut un serveur web, nous allons donc installer apache et php :
sudo apt install apache2 php libapache2-mod-php php-mysql -y
Puis on se rend dans le dossier html:
cd /var/www/html/
On enlève la page d'accueil d'apache
sudo rm index.html
On va donner les droits au dossier web à l'utilisateur pi: (pour un site en local, sinon faut passer par des liens symboliques et sécuriser apache )
sudo chown -R www-data:pi /var/www/html/
Puis
sudo chmod -R 770 /var/www/html/
installation de phpmyadmin et de shellinabox
On va installer phpmyadmin pour gérer plus facilement la base de donnée si besoin, et shellinabox pour avoir le terminal du pi dans une page web.
sudo apt-get install phpmyadmin shellinabox -y
cochez apache (barre espace) puis ok pendendant l'installation de phpmyadmin
Ensuite dés que l'installation est terminé, tapez https://192.168.xxx.xxx:4200 dans votre navigateur, il faut ajouter une execption de sécurité en cliquant sur avancé, Cochez conserver de façon permanante, et vous tomberez sur le terminal du pi.
fermer la page.
Les tests
Maintenant que tout est branché on va pouvoir testé les sondes puis l' écran LCD.
Donc toujours en SSH sur le pi on tape dans le terminal :
cd /home/pi/Adafruit_Python_DHT/examples
Puis on va lancer le script qui lit les sondes suivi du type de sonde (22 pour dht22, 11 pour dht11) et du port GPIO sur lequel est branché la sonde.
sudo ./AdafruitDHT.py 22 22
Pour tester la sonde que l'on placera au point froid du terrarium.
sudo ./AdafruitDHT.py 22 27
Pour tester la sonde que l'on placera au point chaud du terrarium.
Vous devriez avoir ceci si tout est OK, sinon vérifiez le montage.
Maintenant on va tester l'écran.
cd /home/pi
On va créer le programme testlcd.py :
nano testlcd.py
Puis copiez - collez le programme suivant, pour cela cliquez avec la souris dans l'encadré du programme, puis Ctrl a pour tout sélectionner et Ctrl c pour copier
Ensuite dans nano, clique droit de la souris et coller . (cela peut prendre un certain temps à coller si le programme est long)
Une fois le fichier collé, appuyez sur Ctrl x pour fermer et enregistrer le fichier.
testlcd.py
Supprimez les lignes vide en début de fichier, il doit commencer par : #!/usr/bin/env python
On lance le programme :
cd /home/pi
puis
python testlcd.py
Votre LCD doit s'allumer, vous dire "salut ! " si tout va bien, puis au bout de 15s s'éteindre.
Si tout est OK, on efface ce programme, on en a plus besoin
sudo rm testlcd.py
Le site et les programmes
Ce site est composé de 3 parties:
- la page d'accueil :
- la page historique :
- la partie Admin :
- l'authentification:
- la page Admin :
On va télécharger le tout :
cd /home/pi
Puis
git clone https://github.com/weedmanu/terrarium-Raspberry-pi.git
On se rend dedans :
cd terrarium-Raspberry-pi
Puis on déplace le dossier terraspi dans notre dossier web du pi /var/www/html/
cp -r terraspi -t /var/www/html/
On va modifié le fichier Json qui sert aux programmes à se connecter à la base de donnée, il se trouve dans le dossier CSV (/var/www/html/terraspi/csv)
cd /var/www/html/terraspi/csv
Puis
sed -i "s/loginbdd/xxxx/g" bdd.json
Et
sed -i "s/mdpbdd/yyyy/g" bdd.json
bien sur on remplace xxxx et yyyy par son login et mot de passe de l'utilisateur de la base de donnée.
Ensuite, on note l'adresse ip du Raspberry, on définit un nom utilisateur pour la page Admin du site et son mot de passe et on ajoute le tout à la table config :
On se connecte en tant que user a la base de donnée:
mysql -u XXXX -p -h localhost
Puis
USE Terrarium;
Et
INSERT INTO config (loginadmin, mdpadmin,ip) VALUES ('xxxx', 'yyyy', '192.168.XXX.XXX');
Et on quitte
quit
On supprime le dossier terrarium-Raspberry-pi
cd /home/pi
et
sudo rm -r terrarium-Raspberry-pi
Dans votre navigateur rendez-vous sur le site du terrarium :
http://192.168.xxx.xxx/terraspi
Cliquez sur l'onglet Admin, puis entrez vos identifiant créés précédemment (juste avant de supprimer terrarium-Raspberry-pi)
vous tomberez sur la page Admin, dans la partie gauche de la page, il y a ce formulaire :
- Heure été / hiver :
On règle ici le changement d'heure, par défaut hiver est coché.
- position :
On règle ici sa position géographique
Vous pouvez les trouver ici
Cela sert à avoir l'heure du lever et coucher du soleil chez vous, autrement dit les horaires pour la lumière du terrarium. - consigne :
on défini ici la température pour le jour et celle pour la nuit au point chaud
- warning terrarium :
on défini ici la température min et max au point chaud à ne pas dépasser, si on dépasse ces valeurs c'est qu'il y a un problème sur le chauffage et un courriel vous sera envoyé
- mail :
on défini ici l'adresse email de l'envoyeur du courriel et son mot de passe, GMAIL OBLIGATOIRE le mieux est d'en créer une juste pour le terrarium et vous devez modifier les paramètres de sécurité comme ceci pour autoriser les applications à envoyer un mail. (seul GMAIL autorise les applications à envoyer des courriels)
Et l'adresse où l'on veux recevoir ces alertes, là pas de restriction de fournisseur mail.
- warning Raspberry
on défini ici la température max du pi, si le pi chauffe, la couleur du terminal et les éléments du menu de droite passeront de vert à rouge
- ip du pi et admin
Il sont normalement déja rempli, on les avait paramétrés précédemment.
Il n'y a plus qu'à valider, à confirmer et les datas seront envoyées dans la table config de la base de donnée Terrarium. les programmes viendront chercher les valeurs ici.
Il ne nous reste plus qu' à créer une tache cron pour lancer terra.py toute les minutes, c'est le programme qui s'occupe de la lumière et du chauffage et une tache cron pour l'envoi de datas à la base de donnée toutes les 10 minutes, c'est le programme bdd.py
crontab -e
Tapez entrée pour valider nano comme éditeur (choix2 par défaut)
et à la fin du fichier on écrit ces lignes:
* * * * * python /var/www/html//terraspi/prog/terra.py > /dev/null 2>&1
appuyez sur Ctrl x pour fermer et enregistrer le fichier.
Maintenant, on ajoute le dernier programme (optionnel), celui du bouton, dans rc.local qui sert à lancer des scripts au démarrage du pi
sudo nano /etc/rc.local
Puis avant la ligne exit 0, on écrit ceci :
python /var/www/html/terraspi/prog/lcd.py &
appuyez sur Ctrl x pour fermer et enregistrer le fichier.
Un petit reboot :
sudo reboot
C'est fini, tout est fonctionnel, si vous appuyez sur le bouton, la séquence d'affichage se lancera, tapez http://192.168.xxx.xxx/terraspi dans votre navigateur et constatez.
vous aurez vos premiers points dans l'historique au bout d'une minute
Normalement compatible tout navigateur, n'hésitez pas à me faire part de toutes remarques où problèmes, je suis disponible.
Les codes sont commentés et consultable sur mon github