Tutoriel Terrarium connecté

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

Le montage

Voici le schéma :

schema

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:

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 :

Advanced options

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

Puis A4 SSH :

A4 SSH

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 :

Internationalisation Options

On va paramétrer les 4 choix suivant:

Internationalisation Options

I1 Change Locale:

décochez «en_GB.UTF-8 UTF-8» (barre espace) et cochez «fr_FR.UTF-8 UTF-8» :

I1 Change Locale

I1 Change Locale

Revenir sur le choix 5, Internationalisation Options puis :

I2 Change Timezone:

Choisir Europe :

europe

Puis choisir Paris

paris

Revenir sur le choix 5, Internationalisation Options puis :

I3 Change Keyboard Layout

choisir le modèle de clavier :

modèle

Puis la langue :

langue

la disposition :

dispo

altgr

altgr

Revenir sur le choix 5, Internationalisation Options puis :

I4 Change Wi-fi Country:

wifi

Voila, on a terminé:

fin

reboot

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

IP

Vous pourriez avoir besoin de l'adresse mac de la carte WIFI pour donner une adresse statique au pi, si besoin, noter là

MAC

Changeons le mot de passe :

sudo raspi-config

Allez sur le choix 2, Change User Password :

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)

ssh

On vous demandera le mdp de votre pc, puis le mdp du Raspberry

ssh

Et vous serrez connecté

ssh

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"
}

WIFI

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:

mysql

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.

bdd

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.

testsonde

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:

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