Terrarium 2.0 Raspberry pi

Medium esjq8kaeywlrtyrbup55

Difficulté:

Ayant un terrarium à la maison avec un serpent inoffensif , un serpent des blés, l'idée m'est venu, après la réception de mon premier pi de me lancer dans la gestion du terrarium par le pi , contrôle du chauffage et de l’éclairage, un affichage LCD (optionnel) et site web comme interface de contrôle et statistique.

Matériel

Budget:

90 €

Etape 1 : Le fonctionnement

Toute les minutes le programme terra.py :

lit les sondes , récupère l'heure du lever et coucher du soleil et écrit les datas  dans un fichier csv. result.csv pour les sondes et ephem.csv pour l’éphéméride.

les datas sont écrasé toute les minutes avec les nouvelles valeur.

les jauges de la page d'accueil récupèrent la valeur des sonde dans result.csvi et se mette à jour toutes les 30s et ephem.csv sert à nous afficher l'heure du lever et du coucher du soleil.

Quand il fait jour le programme allume la lumière et donne la consigne de température pour le jour, le chauffage (dans mon cas : plaque chauffante coller sous le terrarium) se régule en fonction de cette température si on dépasse la consigne on coupe le chauffage.

quand il fait nuit, on coupe la lumière et on régule en fonction de la consigne de température de nuit ,si on dépasse la consigne on coupe le chauffage.

Toute les 10 minutes le programme bdd.py :

lit les sondes , et envoi les datas dans une base de donnée.

Ceci pour la page historique, et créer les graphiques.

Si les consignes de limite basse ou haute de température sont atteinte , un courriel vous sera envoyer  avec les températures lu. C'est qu'il y a un problème.

Le bouton :

Si vous appuyer sur le bouton la séquence d'affichage se lance , vous dit les températures et humidités actuelles des point chaud et froid et s'éteint.

Les paramètres :

Il se règle par la page admin du site ,donc réglable en fonction de l'occupant du terrarium.

au bout d'environ 2 semaines on vous proposera sur la page admin de purger ou pas la base de données pour ne garder que les 7 derniers jours.

Etape 2 : Matériel nécessaire


  • un Raspberry Pi 1,2 ou 3 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 (image 1)
  • Deux sondes DHT22 (image 2)
  • Deux résistances de 4.7 K Ω (image 3)
  • Un module 2 relais (image 4)
  • Une breadboard (image 5)
  • Des câbles Dupont Mâle/mâle , Mâle/femelle , Femelle/femelle (image 6)
  • Un écran LCD 16x2 (optionnel) (image 7)
  • Un bouton poussoir (optionnel) (image 8)
  • Un potentiomètre (optionnel) (image 9)

Etape 3 : Le montage

Medium nrzegwnd4o96kswaktu1

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 a 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

Etape 4 : Installation de Raspbian lite

Medium qo4pegjlgeun6iclnwcf

     Je préfère cette version de Raspbian 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 à mettre à jours.

Brancher 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.

Formater une carte micro SD, class10 de préférence, en fat32 .

Télécharger Noobs, dé-zipper et copier tout ce qu’il y a dans le dossier sur votre carte micro SD.

Placer la carte SD dans le pi et démarrer le, une fois lancé, choisir Raspbian Lite comme sur l'image 1

et choisissez la langue FR en bas de l'écran.

Puis cliquer sur install.

Une fois installé, Raspbian se lance et vous devez vous logger :

Login : pi

Mot de passe : raspberry

Le clavier étant en QZERTY , il faut taper : rqspberry

Vous voila loggé, on va activer le SSH pour pouvoir utiliser le pi a partir de notre PC .

Etape 5 : Activation du SSH

Taper :

sudo raspi-config

Le clavier étant en QZERTY , il faut taper : sudo rqspi-config

Puis aller sur le choix 9 , Advanced options : (image 1)

(les flèches , touche tab pour changer et touche entrée pour valider)

puis A4 SSH : (image 2)

et on valide : (image 3)

et on sort.

Puis on ré-démarre le pi , on tape :

sudo reboot

Le pi ayant re-démarré, la configuration du clavier en français et AZERTY  à été pris en compte.

Maintenant on se re-connecte :

Login : pi

Mot de passe : raspberry

Etape 6 : Changement du mot de passe et activation du wifi

On tape ;

sudo raspi-config

Puis aller sur le choix 2 , Change User Password : (image 1) et changer le mot de passe du pi.

Ensuite aller sur le choix 5 , Internationalisation Options : (image 2)

Puis I4 Change Wi-fi Country (image 3)

puis choisir FR : (image 4)

On valide et on sort, on nous propose de redémarrer, faite-le .

Ensuite on se log à présent avec son nouveau mot de passe

Login : pi

Mot de passe : XXXXX

Puis on va paramétrer notre wifi  , on tape :

sudo nano /etc/wpa_supplicant/wpa_supplicant.conf

Et à la fin du fichier on ajoute ces ligne (image5) en changeant par votre configuration le réseau et la clé :

network={
ssid="votre réseaux"
psk="votre clé wifi"
}
 

Puis CTRL X pour sortir, o pour enregistrer, et entrée pour valider.

Puis on redémarre le pi , on tape :

sudo reboot

Ensuite on se log 

Login : pi

Mot de passe : XXXXX

On tape :

ifconfig

Et on note l'adresse ip du pi  correspondant à wlan0 (image 6)

Voilà le wi-fi est activé , on peut débranché le clavier, la souris ,l'écran et le câble Ethernet

(il faudra donner une ip statique au pi, pour cela rendez-vous sur les paramètre de votre box internet et passer l' ip de dynamique à fixe ou statique, si vous savez pas vous trouverez sur la toile comment faire en fonction de votre box.)

Etape 7 : Connexion par SSH depuis un PC et Mise à jour du pi

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 noter précédemment , le port (22) puis on se log :

Login : pi

Mot de passe : XXXXX

  • Depuis un pc Linux, dans le terminale on tape :

sudo ssh pi@192.168.xx.xx 

(adresse IP du pi noter précédemment)

On entre son mot de passe Linux , puis le mot de passe du pi..

Voilà on est connécté au pi en SSH depuis son PC.

Maintenant on tape :

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.

Si une nouvelle version de Raspbian sort, il faudra après avoir mis à jour faire :

sudo apt-get dist-upgrade

Une fois la mise à jour terminée , on va préparer le pi.

Etape 8 : Installer git , build et les librairies python

On tape :

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 :

sudo pip install ephem

Cela nous servira pour connaitre l'heure du lever et du coucher du soleil en fonction de votre position géographique, et donc à quelle heure s'allumera et s'éteindra le terrarium.

On se place dans le dossier Pi et on installe les librairies pour lire les sondes DHT22 :

cd /home/pi

Puis

git clone https://github.com/adafruit/Adafruit_Python_DHT.git

Une fois copier 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 copier 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

Etape 9 : Création de la base de donnée

Nous allons donc installer MySQL :

sudo apt-get install mysql-server python-mysqldb -y

Pendant l'installation vous devez définir un mot de passe root, noter 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 entrer votre mot de passe défini précédemment, celui que l'on doit noter ou se souvenir . 

Vous devriez avoir ceci : (image 1),

On est dans mysql. en root , on va créer une base de donnée , un utilisateur et son mot de passe qui utilisera cette base de donnée.

Donc on créer la base de donnée  (image 2) :

CREATE DATABASE Terrarium;

(taper entrée après chaque commande)

On entre dedans :

USE Terrarium;

Puis on créer 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';

Remplacer XXXXX par votre nom d'utilisateur

Puis on active les privilèges

FLUSH PRIVILEGES;

Et on quitte Mysql

quit

Noter le nom d'utilisateur et le mot de passe mysql que vous venez de créer, on en aura besoin.

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éer 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éer 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.

Etape 10 : Installation du serveur web, PHP, phpmyadmin et de shellinabox

Pour afficher une page web il nous faut un serveur web, nous allons donc installer apache et php :

sudo apt-get install apache2 php5 libapache2-mod-php5 php5-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/

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.  

Attention : cocher apache (barre espace) puis ok pendant l'installation . réponder oui à la question " faut il configurer ...." entrée votre mot de passe root de mysql et pour phpmyadmin soit vous laisser vide et phpmyadmin se choisira un mot de passe aléatoire, soit vous en définisser un. il ne nous sert pas vraiment.

sudo apt-get install phpmyadmin shellinabox -y

Ensuite dés que l'installation est terminé, taper http://192.168.xxx.xxx:4200 dans votre navigateur, il va passer en https , il faut ajouter une execption de sécurité en cliquant sur avancé, Cocher conserver de façon permanante, et vous tomberez sur le terminal du pi.

fermer la page.

Si par la suite vous voulez vous connecter au site du terrarium depuis votre smartphone ou autre pc que celui là, il faudra auparavant se connecter à cette adresse et accepter l'exeption de sécurité , ensuite ce sera ok. 

Ce n'est a faire qu'une seule fois par machine voulant se connecter.

Etape 11 : Les tests

Medium lbyepnnb8vd5jfe9pu0u

Maintenant que tout est branché et les librairies installées,  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 (image 1) si tout est OK, sinon vérifier le montage.

Maintenant on va tester l'écran.

cd /home/pi

On va créer le programme testlcd.py :

nano testlcd.py

Puis copier le programme suivant et ensuite dans nano , clique droit de la souris et coller . (cela peut prendre un certain temps à coller si le programme est long)

#!/usr/bin/env python
#-*- coding: utf-8 -*-

# import des librairies

import time
import RPi.GPIO as GPIO
import Adafruit_DHT
from RPLCD import CharLCD, cleared, cursor, BacklightMode
GPIO.setwarnings(False)


# on défini l'écran 16x2 et les gpio  
lcd = CharLCD(cols=16, rows=2,

            pin_rw=None,

            pin_rs=7,

            pin_e=8,

            pins_data=[25,24,23,18],
           
            pin_backlight=13,
           
            backlight_enabled=True,              

            numbering_mode=GPIO.BCM)

# on dit coucou
with cleared(lcd):            
    lcd.write_string(u'  Salut ! ')

time.sleep (15);
         
# on ferme en effaçant              
lcd.close(clear=True)

# on libére les gpio
GPIO.cleanup()

Une fois le fichier collé, appuyez sur Ctrl x pour fermer et enregistrer le fichier.

Faite bien attention à ce que le programme commence par : #!/usr/bin/env python.

Supprimer les lignes vides en début de fichier si besoin avant de sauvegarder et fermer

On lance le programme :

cd /home/pi

puis

python testlcd.py

Votre LCD doit s'allumer, vous dire "salut ! " si tout va bien, puis s'éteindre.

Si tout est OK, on efface ce programme, on en a plus besoin

sudo rm testlcd.py

Etape 12 : Le site et les programmes

Ce site est composé de 3 parties:

  • la page d'accueil : (image 1)
  • la page historique : (image 2)
  • la partie Admin : 
    • l'authentification: (image3)
    • la page admin: (image 4) 

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

Attention : bien sur on remplace xxxx et yyyy par son login et mot de passe de l'utilisateur de la base de donnée mysql.

sed -i "s/loginbdd/xxxx/g" bdd.json

Et

sed -i "s/mdpbdd/yyyy/g" bdd.json

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 (image 3) 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

Cliquer sur l'onglet Admin, puis entrer vos identifiant créés précédemment (juste avant de supprimer terrarium-Raspberry-pi)

Vous tomber sur la page Admin, dans la partie gauche de la page, il y a ce formulaire : (image 5) qui sert à paramétrer le terrarium, remplissez le.

Quelques explications :

  • 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 chauffageet 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ètre de sécurité comme ceci pour que 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'a valider, confirmer et les datas seront envoyer dans la table config de la base de donnée Terrarium. les programmes viendront chercher les valeurs ici.

Etape 13 : Automatisation des programmes

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

Taper :

crontab -e

Taper entrée pour valider nano comme éditeur (choix2 par défaut)

et à la fin du fichier on écrit ces lignes (image 1) :

:

* * * * * python /var/www/html//terraspi/prog/terra.py > /dev/null 2>&1

*/10 * * * * python /var/www/html/terraspi/prog/bdd.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 lcd.py , dans rc.local qui sert a lancer des scripts au démarrage du pi

sudo nano /etc/rc.local

Puis avant la ligne exit 0, on écrit ceci (image 2) :

python /var/www/html//terraspi/prog/lcd.py &

Appuyez sur Ctrl x pour fermer et enregistrer le fichier.

Un petit reboot pour tout prendre en compte :

sudo reboot

une fois redémarré :

C'est fini, tout est fonctionnel, appuyer sur le bouton, la séquence d'affichage se lancera, taper http://192.168.xxx.xxx/terraspi dans votre navigateur et constater.

vous aurez vos premiers points dans l'historique au bout de 10 minutes (modifier la tache cron selon vos besoin)

Normalement compatible tout navigateur (j'ai pas testé safari), n'hésitez pas à me faire part de toutes remarques où problèmes , je suis disponible.

Etape 14 : Passer de la breadboard au terrarium

Je vous conseille de brancher une sonde après l'autre et de tester la lecture de celle-ci pour valider votre montage.

Pour que l'on puisse facilement débrancher les sondes , j'ai reconverti de vielle fiche de connexion de pc (image 4 et 5) pour disque dur interne comme celle-ci :

La partie mâle (4fils) (image 4) 

On passe les fils dans le boîtier par un trou du coté et on les branches a un domino de 4 plots (noir) :  (image 4 et 6)

Le fait de passer par un domino fixé au boîtier , évite d'abîmer le pi en cas de tension sur les câbles des sondes.(si on par avec le boîtier sans avoir rebranché les sondes par exemple ^^ )

Le jaune  au GND du pi,  le rouge au 3.3v du pi, et un noir par sonde gpio 22 et gpio 27.  J'utilise un domino pour découpler les GND et les 3.3v.

La partie femelle , nous avons besoin de 3 fils par sonde et sur chaque branche de la dérivation:

 Il y a 1 fil rouge , se sera le + des sondes

Il y a 1 fil jaune , se sera le - des sondes

Il y a 2 fils noir , on en gardera qu'un par branche et bien sur pas le même , on coupe celui de droite sur l'une des branche et celui de gauche sur l'autre, ce sera le pin data de chaque sonde.

J'ai donc soudé les sondes avec des câbles électriques (câble d'enceinte environ 1,5 m)sur chaque branche , pour isoler les soudures j'ai utilisé de la gaine thermorétractable, entre chaque pin de la sondes et autour de l'ensemble .

J'ai utiliser une gaine PVC, que l'on pourra décorer par la suite, pour ne pas avoir de fils qui se promènent  (image 8)

Pour le relais , connecter le pin commande d'un relais au GPIO 17 et le GPIO 4 à l'autre pin data du module relais, le 5v du pi au VCC a coté des data et de la masse du relais (GND) à la masse du pi . 

On va prendre 2 rallonge éléctrique de 1m , sa suffit, on les coupe en deux.

les rallonges, passez les à travers le boîtier par un trou du coté puis branché le fils de chaque prise à un domino pour le partie qui ne doit pas être coupé (domino blanc sur les images) et les autres fils aux relais pour ouvrir ou fermer le circuit (image 5 et 6).

Puis visser le module relais dans le boîtier.

j'ai également viser le boîtier du pi dans le boîtier 3x2 , puis glissé le pi dedans, pas besoin de mettre le dessus puis que l'on ferme ensuite le boîtier 3x2 , n'oublier pas de passer l'alim du pi par un coté et voila (image 1) .

si vous avez l'écran LCD (image 2)

Soyez le premier à poster un commentaire pour Terrarium 2.0 Raspberry pi


Gotronic

Voir l'espace DIY gotronic


S'inscrire:


  • Vues: 310
  • J'aime: 5