dimanche 12 mai 2019

Un afficheur TFT pour DOMOTICZ ou JEEDOM



Un afficheur pour DOMOTICZ ou JEEDOM


Nous allons décrire dans cet article la réalisation d'un module d'affichage d'informations pour un serveur domotique.

Cet afficheur est placé dans mon salon, dans une niche  bien en vue, à un endroit de passage. Il se révèle bien plus pratique que de sortir le smartphone de la poche pour accéder à la page d'accueil de DOMOTICZ.
Les informations affichée sont celles que j'ai choisi et seulement celles-là. Il serait possible bien sûr de développer une application sur le smartphone pour faire la même chose, mais ce n'est pas mon choix.

Le serveur domotique peut être de n'importe quel type parmi la longue liste de contrôleurs supportés par la librairie MYSENSORS :
  • Domoticz
  • Freedomotic
  • HomeAssistant
  • HomeGenie
  • Jeedom
  • etc. 
Les liens suivants vous seront utiles :
https://riton-duino.blogspot.com/2019/05/mysensors-presentation.html 
https://easydomoticz.com/domoticz-arduino-mysensors-org-partie-2-la-passerelle

1. Les fonctionnalités

Les fonctionnalités de ce module sont multiples :
  • mesure de température
  • mesure d'humidité
  • affichage de la date
  • affichage de l'heure
  • affichage de 3 températures intérieures
  • affichage de l'humidité intérieure
  • affichage de la température extérieure
  • affichage de l'humidité extérieure
  • affichage de la température d'un congélateur
  • affichage de messages d'erreurs
  • surveillance de la température d'un congélateur
  • surveillance de la capacité des batteries
Le module est bien sûr relié par radio à un serveur DOMOTICZ ou autre, à l'aide d'un module NRF24L01 2.4GHZ.

La surveillance de la température du congélateur et de la capacité des batteries n'est pas directement assurée par le module mais par un script sur le contrôleur.

La signalisation d'un défaut de température du congélateur ou d'un défaut batterie est assurée par un buzzer. Celui-ci produit 4 beeps espacés de 400ms, répétés toutes les 10 secondes. La limite de température est fixée à -18°, la limite de capacité batterie à 20%.

La signalisation est également assurée par l'affichage d'un message afin de préciser d'où provient l'erreur. Si le message envoyé par le serveur commence par "Error: ", celui-ci est affiché en jaune sur fond rouge, sinon il est affiché en bleu sur fond gris.

Pour modifier les formats des informations affichées ou les paramètre de surveillance il n'est pas nécessaire de modifier le sketch de l'ARDUINO. Cela peut se faire directement sur le serveur, en modifiant quelques scripts PYTHON (voir plus bas :  2.2. Les scripts).

Seuls les emplacements des informations sur l'écran et leur couleur sont en dur dans le sketch ARDUINO.

Le sketch ARDUINO peut également se servir de la ligne d'affichage d'erreur pour afficher ses propres messages d'erreur, par exemple dans le cas d'un problème de communication avec la gateway.

Pour terminer le backlight de l'écran TFT peut être allumé automatiquement à l'approche d'une personne à l'aide d'un détecteur infrarouge. Il s'éteindra au bout de 20 secondes.
Cette possibilité est une option. Elle permet de consommer 50mA de moins.

Je ne pense pas qu'un écran TFT ait une durée de vie limitée. L'utilité du screen-saver est discutable.
Les 50mA économisés entraînent une économie de 25 centimes par an, c'est à dire pas grand chose.
C'est plus le côté fun qui m'a décidé à implémenter cette fonction.


2. L'architecture

Le schéma suivant représente l'architecture globale du système :



Il y a pas mal de capteurs, un dimmer, des prises connectées, y compris en 433MHz.
La partie qui nous intéresse se limite à :
  • la passerelle MYSENSORS (GATEWAY)
  • le module TFT + thermomètre / hygromètre au rez-de-chaussée
  • le thermomètre à l'étage
  • le thermomètre du garage
  • le thermomètre / hygromètre extérieur
  • le thermomètre du congélateur
La température et l'humidité du rez de chaussée sont fournies par le module d'affichage lui-même.
Les autres données sont fournies par d'autres modules reliés au serveur DOMOTICZ :
  • température à l'étage :
    • un ARDUINO PRO MINI
    • un module MCP9808 ou DS18B20
  • température du garage
    • un ARDUINO PRO MINI
    • un module DS18B20
  • température et humidité extérieures :
    • un ARDUINO PRO MINI
    • un module DHT31D
  • température du congélateur :
    • un ARDUINO NANO
    • un capteur DS18B20
Les différents modules sont décrits ici :
https://riton-duino.blogspot.com/2018/01/un-thermometre-mysensors-sur-batterie.html
https://riton-duino.blogspot.com/2019/05/un-thermometre-hygrometre-mysensors-sur.html
https://riton-duino.blogspot.com/2019/05/un-thermometre-mysensors-pour-freezer.html

Le module TFT demande au serveur les informations de date et heure et les affiche en haut de l'écran.

Comme il possède ses propres capteurs de température et humidité, ll affiche de lui-même ces informations, tout en les transmettant au serveur bien sûr.

Il affiche également 4 lignes d'information que des scripts sur le serveur se chargent de mettre à jour en continu.

2.1. Le serveur

Le serveur dans cet exemple est un contrôleur DOMOTICZ sur une RASPBERRY PI 2.
Chaque capteur s'identifie au démarrage auprès du contrôleur. Un capteur peut présenter au serveur plusieurs devices enfants :
  • le module TFT en présente 8 :
    • la température
    • l'humidité
    • la ligne d'information 1 (température à l'étage)
    • la ligne d'information 2 (température du garage)
    • la ligne d'information 3 (température et humidité extérieure)
    • la ligne d'information 4 (température du congélateur)
    • la ligne d'information 5 (erreurs)
    • le buzzer
  • le thermomètre extérieur en présente 2 :
    • la température
    • l'humidité
  • les autres capteurs en présentent un seul
    • la température

2.2. Les scripts

Sur le serveur un certain nombre de scripts sont lancés chaque minute par le daemon CRON :
  • un script de récupération de la température à l'étage
  • un script de récupération de la température du garage
  • un script de récupération de la température et humidité extérieure
  • un script de récupération de la température du congélateur
  • un script de surveillance de la température du congélateur et de la capacité des batteries
Les scripts sont écrits en langage PYTHON et envoient des requêtes JSON au serveur. Pour un serveur différent de DOMOTICZ l'implémentation sera probablement différente. Pour DOMOTICZ la doc est ICI : https://www.domoticz.com/wiki/Domoticz_API/JSON_URL%27s

Lorsque l'on développe on que l'on modifie un script pour DOMOTICZ, on peut parfaitement le tester sur son PC, avant de le transférer vers le serveur.

Chaque script de récupération de données se contente de mettre à jour les données du device dont il a la charge :
Le script de récupération de la température à l'étage met à jour la ligne d'information 1 du périphérique TFT.
Le script de récupération de la température du garage met à jour la ligne d'information 2 du périphérique TFT.
Le script de récupération de la température et de l'humidité extérieure met à jour la ligne d'information 3 du périphérique TFT.
Le script de récupération de la température du congélateur met à jour la ligne d'information 4 du périphérique TFT.
Le script de surveillance de la température du congélateur et de la limite de capacité des batteries met à jour le device buzzer (ON ou OFF) et la la ligne d'information 5 du périphérique TFT.

Le script de surveillance gère différents messages :
  • Everything is fine : tout va bien
  • Error: Freezer Temp : défaut de température du congélateur
  • Error: Up Therm Batt : batterie thermomètre de l'étage faible
  • Error: Out Therm Batt : batterie thermomètre extérieur faible
  • Error: Motion Batt : batterie du détecteur de présence faible
Les chaînes de caractères affichées peuvent être facilement modifiées dans les scripts.
Auparavant la température et l'humidité extérieures étaient affichées sur les lignes 2 et 3.
Dernièrement j'ai regroupé ces deux informations sur la ligne 3,  et ajouté la température du garage sur la ligne 2, sans modifier le code ARDUINO !

La limite de température pour le congélateur est fixée à -18°, facilement modifiable dans le script PYTHON (checkDevices.py).
La limite de capacité des batteries est fixée à 20%, facilement modifiable dans le script PYTHON (checkDevices.py).
C'est tout l'intérêt de la solution. Pour modifier les formats des informations affichées ou les paramètres de surveillance il n'est pas nécessaire de modifier le sketch de l'ARDUINO.
Pour récupérer ces scripts voir plus bas :  10. Téléchargements.

Ci dessous la ligne que vous ajouterez à votre fichier /etc/crontab :

* * * * *    root    /bin/bash /home/pi/update-display.sh

Les scripts PYTHON présents dans le répertoire domoticz de la repository doivent être installés sous /home/pi.
Voir :  10. Téléchargements

3. Le matériel

Pour réaliser ce module, il vous faudra réunir :
  • un ARDUINO NANO
  • un module radio NRF24L01
  • un afficheur 2.8 pouces ILI9341
  • un capteur de température DHT31D
  • 5 résistances de 10K
  • une alimentation 5V mini-USB
  • un buzzer 5V
  • un détecteur de mouvement MH-SR602
Le buzzer est un modèle 5V actif :


Il est commandé en tout ou rien par une sortie de l'ARDUINO, sans PWM.
On peut également utiliser un buzzer passif du genre de ceux que l'on trouve dans un PC, mais il faudra modifier légèrement le code (utilisation de tone() et noTone() :
Le détecteur de mouvement MH-SR602 est optionnel :
L'alimentation que j'ai utilisé est un petit chargeur 5V pourvu d'un connecteur miniUSB mais on peut bien évidemment alimenter la NANO par sa broche 5V et une alimentation de quelques watts.
Le montage complet consomme 100mA, et 50mA avec le backlight du TFT éteint.

4. Le schéma



Le schéma est réalisé à l'aide de KICAD.

Pour récupérer le projet voir plus bas :  10. Téléchargements.

Si l'option d'extinction automatique de l'écran TFT n'est pas utile, il suffit de ne pas mettre en place le transistor Q1 ainsi que les deux résistances R6 et R7, et de souder un fil entre les broches 2 et 3 du MOSFET (drain et source).
Le MH-SR602 dans ce cas est inutile.

6. IDE ARDUINO

Il vous faudra bien entendu installer les bibliothèques ARDUINO suivantes :
Librairie MYSENSORS : https://www.mysensors.org/download

Dans votre IDE (arduino-cc 1.8.9 par exemple), dans le menu "Outils/Type de Carte" choisir "Arduino Nano". Dans le menu "Outils/Processeur" choisir "ATmega328p" ou "ATmega328p (old bootloader)".
 

7. Le code

Pour récupérer le projet voir plus bas :  10. Téléchargements.

L'option d'extinction automatique de l'écran TFT est activable dans le sketch :

// uncomment to use motion detector
//#define SCREEN_SAVER

 

8. Chargement

Après chargement dans l'ARDUINO, vous verrez s'afficher la température et humidité. Ensuite après la connexion au serveur, l'heure s'affichera, ainsi que les autres informations.

9. DOMOTICZ

Reportez-vous à ce document :

10. Téléchargements

Pour télécharger le projet : https://bitbucket.org/henri_bachetti/mysensors-tft-temp-hum-sensor.git

Cette page vous donne toutes les informations nécessaires :
https://riton-duino.blogspot.com/p/migration-sous-bitbucket.html

 
Cordialement
Henri

11. Mises à jour

12/05/2019 : refactoring des scripts PYTHON DOMOTICZ
14/05/2019 : ajout script de test de la capacité des batteries
12/04/2020 : ajout température du garage (scripts PYTHON)
13/04/2020 : ajout extinction automatique du backlight TFT

2 commentaires:

  1. Salut,
    Beau projet. J'ai moi-même réalisé un afficheur répéteur mural TFTLCD 480x320 connecté à ma box domotique jeedom en wifi.
    Périodiquement (20 secondes paramétrable) l'afficheur envoie une requête à la box. Cette dernière qui gère l'ensemble des capteurs et actionneurs de la maison répond dans une trame contenant les infos de tous ces capteurs. L'afficheur met à jour les infos après avoir reçu la trame venant de la box.
    Cette configuration me permet d'avoir éventuellement plusieurs afficheurs répéteurs répartis dans la maison.
    J'avais besoin de désolidariser le répéteur de la box pour le mettre ailleur dans la maison.

    RépondreSupprimer
    Réponses
    1. Oui j'ai également réalisé une version WIFI avec un ESP8266 :
      https://riton-duino.blogspot.com/2020/04/un-afficheur-tft-pour-domoticz-ou.html

      Supprimer