Gestion du Terrarium par un NodeMCU

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 :

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 :

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.

Image non disponible

Image non disponible

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:

Image non disponible

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 :

Image non disponible

Branchez le NodeMCU sur un port USB du pc, puis dans « Outils », « port » choisissez le port ou est connecté le NodeMCU :

Image non disponible

Sous Windows ce serait COM3 ou 4 ou autre.

Puis ouvrez la com série  ici :

Image non disponible

cette fenêtre apparaît :

Image non disponible

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 :

Image non disponible

L’ IDE va enregistrer le programme, le compiler :

Image non disponible

et le téléverser dans le NodeMCU :

Image non disponible Image non disponible

Ensuite retournez sur le terminal série , vous devriez avoir ceci si rien est trouvé :

Image non disponible

N’hésitez pas à intervertir SDA et SCL pour vérifier, si tout va bien une adresse est trouvée :

Image non disponible

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 :

Image non disponible

Maintenant que vous connaissez l'adresse I2C de votre écran on branche le reste.

Image non disponible

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

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 :

Image non disponible

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

Image non disponible

puis dans l’image ci-dessous :

Image non disponible

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 » :

Image non disponible

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

Image non disponible

Puis installez et fermez.

Maintenant sélectionnez le type de carte : NodeMCU 0.9

Image non disponible

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

Image non disponible

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 :

Image non disponible

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 :

Image non disponible

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 :

Image non disponible

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 :

Image non disponible

Cliquez sur update et voila, le NodeMCU va redémarrer avec ce nouveau programme (bien entendu dans notre cas c'est le même)

Image non disponible

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 ont 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 ou même Un site chez Free si vous êtes client (gratuit)

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

Image non disponible

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

Image non disponible

Vous devriez avoir ceci :

Image non disponible

La basse de donnée terranodemcu ainsi que ces 3 tables :

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 :

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 :

Et dans le fichier auth.php du dossier admin vous devez modifier :

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 :

Image non disponible

La page d'historique :

Image non disponible

La page d'authentification (pour accéder à la partie admin):

Image non disponible

Il faut un login et mot de passe pour y accéder, celui de la page auth.php du dossier admin, rappelez-vous :

La page d'admin :

Image non disponible

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.