Comparé à la première version, le code a été amélioré et il y a un détecteur qui vérifie la présence d'eau, s'il n' y en a plus une chanson de starwars retenti, de plus la gestion de la lumière est différente, on calcule le lever et coucher du soleil en fonction de sa position géographique, ce qui détermine l'heure d'allumage et d'extinction de la lumière.
Le changement d'heure été/hiver est également automatiser
Une fonction événement nous rappelle quand il faut nourrir le serpent et souhaite un joyeux anniversaire aux membres de la famille quand c'est le cas.
Le fonctionnement :
Le programme calcul l'heure du lever et du soleil en fonction de votre position géographique, ce qui défini l'allumage et l'extinction de la lumière.
Pendant qu’il fait jour, la consigne du chauffage est de 28 °C, dés qu’il fait nuit la consigne passe à 23°C.
Il y a 2 sondes de températures, une au point chaud et une au point froid, un tapis chauffant (résistance) est collé sous le terrarium au point chaud.
Si la température du point chaud dépasse la consigne on coupe le chauffage, sinon on l’allume.
Ceci est vérifié toutes les 11s.
Si l'on appuie sur le bouton et qu'on le relâche, l'écran LCD s'allume et la séquence d'affichage des datas se lancent puis le LCD s'éteint.
Dés qu'il n'y a plus d'eau, on affiche sur le LCD qu'il n'y a plus d'eau et la chanson de Stars war se lance avec les LED rouge et jaune qui clignote en rythme.
Elle s'arrête quand on remet de l'eau.
le programme terranodemcuV2.ino envoie les datas sur le fichier sondes.php du site web qui se charge de :
- créer le fichier data.csv pour créer les jauges sur la page web.
- d'envoyer les datas dans les tables de la base de donnée pour faire les graphes
Une fonction événement nous rappelle par une chanson et un affichage LCD quand il faut nourrir le serpent et quand c'est l'anniversaire d'un membre de la famille.
le NodeMCU dispose d'une interface web qui permet de modifier le programme à distance ou de jouer différentes chansons (pour le fun)
Matériel nécessaire :
- Un NodeMCU :
- Une alim 5v micro usb :
- Deux sondes DHT22 (Température et humidité) :
- un module 2 relais :
- Un écran LCD 16x2 avec convertisseur I2C :
- Un bouton poussoir :
- Un détecteur de sécheresse :
- Des câbles Dupont :
- Une LED rouge, une LED jaune et un buzzer :
On peut remplacer le buzzer par une petite enceinte coupler à un module lm386
- Deux rallonges électrique de 1,5 m
Programmer le NodeMCU :
On peut utiliser plusieurs Firmware différent avec le NodeMCU,
avec le Firmware d’origine le langage est le LUA
avec micro python le langage est python
et ce qui nous intéresse dans notre cas c'est l’ IDE Arduino avec le langage de l’Arduino (langage c).
On le programme par le port série (port USB d’un pc) dans un premier temps, ensuite on pourra le programmer par le réseau.
Commençons par télécharger l’ IDE Arduino, une fois installé lancez le, vous devriez avoir ceci :

Se rendre dans Fichier » puis Préférences :

puis dans l’image ci-dessous :

Encadrer en rouge, le chemin où se trouve le dossier Arduino et les librairies,
les programmes que l’on fait.
(je suis sous Linux, pour Windows il y aurait c:/Arduino/ ou c:/document/Arduino)
Encadrer en bleu vous devez placer ici cette URL :
http://arduino.esp8266.com/stable/package_esp8266com_index.json
Puis cocher comme moi ce qui est encadré en vert
Puis faites OK pour valider.
Allez dans « Outils », « Type de carte », et « Gestionnaire de carte » :

Tapez esp8266 dans le champ de recherche, vous devriez voir esp8266 by esp8266 community.

Puis installez et fermez.
Maintenant sélectionnez le type de carte : NodeMCU 0.9

Maintenant il faut installer les librairies pour les capteurs, le LCD par I2C et celle pour la gestion du temps.
les librairies DHT, liquidchrystal_I2C, Ephemeris, NtpClientLib
Téléchargez les, dézippez et les copiez dans votre dossier librairie, le chemin se trouve dans préférence souligné en vert dans une image précédente, généralement :
/home/xxxx/Arduino/librairies pour Linux
et
c/Arduino/librairies ou c/mes document/Arduino/librairies pour Windows.)
Assurez-vous du bon fonctionnement en téléversant le fichier Exemples --> 01.Basics --> Blink
Si vous avez une erreur, faite une recherche sur le web sur l'installation en fonction de votre système d'exploitation
Sous Linux on doit ajouter ajouter l'utilisateur au group dialout, après un reboot du PC cela fonctionne, si vous n'y arrivez pas contactez moi je vous aiderez.
Maintenant que cela fonctionne on peut continuer.
Le montage :
Utilisez une breadboard pour le montage pour la phase de test afin de vérifier le bon fonctionnement, ensuite vous pourrez passer à la réalisation final dans le terrarium.
Dans un premier temps, on va brancher uniquement l'écran LCD afin de trouver son adresse I2C et de régler le contraste.
L'écran LCD et I2C relié (soudure ou câble)
L' I2C en 3.3v et GND, SDA sur GPIO4 (D2) et SCL sur GPIO2 (D4)
Pour utiliser l'écran LCD on doit connaître son adresse I2C, sinon l'écran n'est pas reconnu (adresse 0x3f dans le programme terranodemcuV2.ino ligne 28), il faut utiliser un programme qui scan les adresses I2C .
Ouvrez un nouveau fichier dans l'IDE Arduino:
Et effacez le contenu.
Copiez ce fichier scanI2C.ino :
Pour cela cliquez avec la souris dans l'encadré du programme, puis Ctrl a pour tout sélectionner et Ctrl c pour copier
voici le code scanI2C.ino :
Puis collez le dans l’ide Arduino, vous devriez avoir ceci :
Branchez le NodeMCU sur un port USB du pc, puis dans « Outils », « port » choisissez le port ou est connecté le NodeMCU :
Sous Windows ce serait COM3 ou 4 ou autre.
Puis ouvrez la com série ici :
cette fenêtre apparaît :
Configurez le terminal série comme dans l’encadré bleu, laissez le ouvert et revenez sur l’IDE puis faite téléverser le programme :
L’ IDE va enregistrer le programme, le compiler :
et le téléverser dans le NodeMCU :
Ensuite retournez sur le terminal série , vous devriez avoir ceci si rien est trouvé :
N’hésitez pas à intervertir SDA et SCL pour vérifier, si tout va bien une adresse est trouvée :
Notez l’adresse trouvée pour votre écran, il faudra la renseigner dans le programme terranodemcuV2.ino ligne 28.
On va maintenant tester l'écran et régler le contraste, pour cela ouvrez un nouveau fichier dans l'IDE Arduino et effacez le contenu.
Copiez le fichier test_LCD.ino :
Pour cela cliquez avec la souris dans l'encadré du programme, puis Ctrl a pour tout sélectionner et Ctrl c pour copier
voici le code :
N'oubliez pas de modifiez l'adresse I2C de l'écran en ligne 5 avec la votre
Puis téléversez le dans le NodeMCU, même méthode qu'avec le programme scanI2C.ino
Vous pouvez régler le contraste ici :
Maintenant que vous connaissez l'adresse I2C de votre écran on branche le reste.
Les sondes sur les GPIO14 (D5) et GPIO0 (D3)
Les sondes en 3.3v et GND et une résistance 4,7K entre la pin 3.3v et la pin data de la sonde.
Le module relais en 5v et GND et les GPIO16 (D0) et GPIO5 (D1) pour le chauffage et la lampe.
L' I2C en 3.3v et GND, SDA sur GPIO4 (D2) et SCL sur GPIO2 (D4)
Le bouton au GPIO12 (D6) et au GND
Le piezzo au GPIO15 (D8) et au GND
On branchera les 2 LEDs après avoir téléversé le programme car on utilise les GPIO qui servent également à la communication série (RX et TX) entre le pc et le NodeMCU, ce qui peut empêcher le transfert
LED rouge au GPIO1 (D10) et au GND
LED jaune au GPIO3 (D9) et au GND
Le programme :
Ouvrez un nouveau fichier dans l'IDE arduino, effacez le contenu du nouveau fichier.
Copiez ce programme terranodemcuV2.ino :
Pour cela cliquez avec la souris dans l'encadré du programme, puis Ctrl a pour tout sélectionner et Ctrl c pour copier
et collez le dans l’IDE Arduino.
Lisez le code il est commenté et il y a des parties à modifier avec vos paramètres en début de programme:
Maintenant que vous avez modifié le programme avec vos paramètres, vous pouvez le téléverser dans le NodeMCU, même méthode qu'avec le programme scanI2C.ino
Le NodeMCU va redémarrez.
Logiquement si tout va bien après le redémarrage la chanson de Starwars va se lancer car le détecteur d'humidité de sol va déclenché.
Débranchez le NodeMCU du PC.
Branchez les 2 LEDs :
LED rouge au GPIO1 (D10) et au GND
LED jaune au GPIO3 (D9) et au GND
Pour les tests débranchez la broche du détecteur d'humidité de sol :
Branchez un câble Dupont à la place pour fermer le circuit ce qui simulera la présence d'eau
On va pouvoir tester l' update par le réseau
Recompiler votre programme terranodemcuV2.ino :
Puis monter le bas de la fenêtre de l'IDE Arduino comme sur la flèche bleu
et repérer le chemin du fichier terranodemcuV2.ino.bin encadré en rouge :
C'est ce fichier que l'on va envoyer par le réseau au NodeMCU pour le flasher. (le mettre à jour)
Sous Linux il se trouve dans le dossier /tmp, sous Windows dans le dossier temp.
Rebranchez le NodeMCU au PC ou brancher le avec une alim (un chargeur de téléphone).
Ouvrez votre navigateur web sur le pc (Firefox ou autre) et entrer l'adresse suivante :
http://terranodemcu.local/update
Vous devriez avoir ceci :
Entrez votre identifiant et mot de passe de la fonction update du programme terranodemcuV2.ino (ligne 115 et ligne 116)
Cliquez sur parcourir et récupérer le terranodemcuV2.ino.bin vu précédemment, vous devriez avoir ceci :
Cliquez sur update et voila, le NodeMCU va redémarrer avec ce nouveau programme (bien entendu dans notre cas c'est le même)
Cela sera bien plus pratique en cas de modification du programme ^^
Vous pouvez en profiter pour tester l'affichage en appuyant sur le bouton, débrancher et rebrancher le détecteur d'humidité de sol
Les leds du relais on du s'allumer également en fonction de l'heure et de la température lu par la sonde du point chaud
Vous pouvez de nouveau débrancher le NodeMCU, on le rebranchera plus tard pour tester le site web.
La partie web :
Plusieurs solution possible on peut utiliser soit :
- Un NAS (Synology dans mon cas)
- Un Raspberry Pi
- Un site chez un hébergeur
- Un site chez Free si vous êtes client (gratuit)
ou
ou
ou même
Il vous faudra PHP, Apache, mysql et phpmyadmin installé ou activé
Je vais donner les instructions générale pour installer le site web, si vous avez besoin d'aide contactez-moi je vous aiderez
Donc on va récupérez le site sur mon github que vous pouvez consulter
On télécharge le .zip du site
On le décompresse, on prend le dossier terranodemcu et on le déplace ou copie dans le dossier web du NAS ou var/html/www/ du Raspberry Pi.
On va, dans un premier temps, installer la base de donnée, pour cela ouvrer phpmyadmin
Puis cliquez sur l'onglet Bases de données nommer la terranodemcu puis cliquez sur créer
Ensuite, cliquez sur l'onglet import puis sélectionner le fichier terranodemcu.sql qui se trouve dans le dossier site web que vous venez de télécharger et dézipper.
Et cliquez sur exécuter
Vous devriez avoir ceci :
La basse de donnée terranodemcu ainsi que ces 3 tables :
- ephem, on y stockera les heures du lever et coucher du soleil
- temphumi, on y stockera les températures et humidités des sondes
Maintenant que la base de donnée est prête, on va dans le dossier terranodemcu du site web sur le NAS ou Raspberry et on va modifier certain fichiers:
Dans le fichier connexion.php vous devez modifier :
- ligne 5 : remplacer XXXX par votre login de la base de donnée
- ligne 6 : remplacer YYYY par votre mot de passe de la base de donnée
Vous devez également donner les droits en lecture et écriture au groupe http (pour un NAS) ou www-data (pour un Raspberry) du fichier data.csv
Puis on ouvre le dossier admin
Et dans le fichier backup.php du dossier admin vous devez modifier :
- ligne 8 : remplacer XXXX par votre login de la base de donnée
- ligne 9 : remplacer YYYY par votre mot de passe de la base de donnée
Et dans le fichier auth.php du dossier admin vous devez modifier :
- ligne 3 : remplacer XXXX par un login d'accès pour la page admin du site web
- ligne 4 : remplacer YYYY par un mot de passe pour la page admin du site web
La partie admin étant protégé par un login et mot de passe
Vous devez également donner les droits en lecture et écriture au groupe http (pour un NAS) ou www-data (pour un Raspberry) au dossier backup qui se trouve dans le dossier admin.
Si tout est OK, on peut maintenant rebrancher le NodeMCU
Attendez une ou deux minutes afin d'avoir quelques datas, puis ouvrez votre navigateur, Firefox ou autre et rendez vous à l'adresse suivante :
http://XXX.XXX.XXX.XXX/terranodemcu/
Bien sur remplacez XXX.XXX.XXX.XXX par l'adresse ip de votre NAS ou Raspberry Pi
Et normalement vous devriez avoir votre page d'accueil.
Quelques explications :
Le fichiers sondes.php traite les datas envoyer par le NodeMCU et qui permet de faire les jauges et les graphes.
La page d'accueil :
- Le fichiers sondes.php n' enverra les heures et minutes du lever et du coucher du soleil dans la table ephem que si elles changent, généralement un peu après minuit, à part la première fois
- Sur la page d'accueil la phrase : "La lumière s'allumera à ...." est un lien qui vous renverra vers un graphique permettant de suivre l'évolution du rapport jour/nuit en heure.
- Les jauges de la page d'accueil se mettent à jour toutes les 20s, elles récupèrent les données du fichier data.csv qui est crée également par le fichier sondes.php
La page d'historique :
- Le fichiers sondes.php enverra les datas des sondes vers la table temphumi.
- On peut choisir le type de graphe, moyenne par heure ou par minute sur 24 heures ou moyenne par heure ou par minute sur 5 jours.
Au delà de 5 jours de data le surplus de donnée sera effacer quand vous irez sur la page des graphes, on ne gardera que les 5 derniers jours.
La page d'authentification (pour accéder à la partie admin):
Il faut un login et mot de passe pour y accéder, celui de la page auth.php du dossier admin, rappelez-vous :
- ligne 3 : remplacer XXXX par un login d'accès pour la page admin du site web
- ligne 4 : remplacer YYYY par un mot de passe pour la page admin du site web
La page d'admin :
Dans l'encadrer de gauche, c'est la fonction update comme vu précédemment et les chansons.
Ne fonctionne pas en https et ne fonctionne qu'en local
Dans l'encadrer de droite, c'est la gestion de la base de données. Soit on fait un backup de la base de donnée, soit on la purge.
Voilà si vous avez des questions n'hésitez pas à me contacter par mail.