[Conseil] Latence entre Nextion, dht22 et ds3231 ?

Bonjour à tous,

Je me permet de vous solliciter travaillant actuellement sur un système d'automatisation pour un Terrarium/orchidarium en utilisant un nextion pour du monitoring/réglage.

Matériel :
Nextion Intelligent Series (NX8048P070-011C-Y, librairie ITEADLIB_Arduino_Nextion-master)
Arduino Mega 2560
DS3231
DHT22
ainsi qu'une batterie de relais.

Le problème rencontré est que le fait d'envoyer en continue les information de la DHT22 ainsi que du rtc semble affecter la communication entre le Nextion et l'arduino, en gros mes boutons ne fonctionnent plus ou très mal (en spammant)

Si je retire la lecture du dht et rtc de mon void loop, tout fonctionne très bien,
J'y ai donc en premier lieu ajouter un milli() afin de ne pas surcharger l’échange entre les deux,
ce qui me pause autre problème tout de même ce milli() devant être relativement élevé pour ne plus ressentir ce problème et ayant besoin de certaines data à la seconde près et que le problème semble revenir toute les "milli()" secondes.

Serais-ce donc le temps d’exécution de cette partie de mon code (envoit data dht + rtc) qui bloque tout le reste ?
Quelqu'un aurait-il déjà été confronté à ce problème ?

PS : je n'ai pas une grande expérience en prog, mon code paraitra sans doute "dégueulasse" x)

Mes excuses à la modération pour ne pas avoir mis mon code en balise, j'ai beau avoir tassé avec le pied j’atteins la limite des 9k caractères.

Orchidarium006.ino (8.6 KB)

Serais-ce donc le temps d'exécution de cette partie de mon code (envoit data dht + rtc) qui bloque tout le reste ?

Je suppose.

Une remarque : la température / humidité sont lues une seule fois dans la fonction setup().

On peut douter de l'utilité de la seconde dans un système destiné à gérer l'humidité et la température.
Ce sont deux données qui varient très lentement.

Pourquoi mettre un RTC DS3231 alors que ton Nextion possède déjà un RTC ?
Et pourquoi ne pas lancer les mesures sur la base du timing du RTC ?

Merci pour vos réponses

Effectivement, les fonctions read humidty & temp sont normalement dans ma loop,
concernant la variation, la température ne va effectivement pas évoluer rapidement, par contre l'humidité si (brumisateur qui ce met en route x secondes toute les y heures) ce qui fera varier l’extraction d'air

Concernant le rtc, j'ai préféré en rajouter un car celui du Nextion n'est pas réputé pour être des plus précis (~5s en 2 jours)

"Et pourquoi ne pas lancer les mesures sur la base du timing du RTC ?"
Qu'entends tu par là ?

Entre chaque mesure du DHT22, il faut 2 secondes (temps d'échantillonnage).

@frodonsaquet

le problème viendrait de là ? mon programme bloquerait durant ce temps d'échantillonnage ?

Peut-être que d'autres personnes verront tout de suite le problème, personnellement j'adopterais une méthodologie.
Comme ton capteur est supposé fonctionner dans la boucle loop, j'aurai fais une sortie sur moniteur série pour observer la température et l'humidité. Si cela ne donne rien de visible, mettre une valeur bidon de h et t après la récupération de la mesure et tester les boutons.
Est-ce que ce problème affectait les autres fonctions (bdsBrumePushCallback , bdsFontainePushCallback , bdslightPushCallback) ?
Tu peux isoler en commentant les lignes de ton programme pour procéder par élimination. J'imagine que tu as éliminé dans un premier l'enclenchement de la fonction de mesure dht22 (dans void loop()) et tester les boutons, ainsi de suite.

Merci Frodon,

C'est la méthode que j'avais utilisée, commenter ligne par ligne pour voir d'où venait le problème et c'est à ce moment que j'avais remarqué que le problème semblait venir du dht et rtc
Le problème affectait toute les fonctions.

Dans mes précédents tests, à partir d'un certains nombre de "boutons" déclarés, l'humidité ne ce mettait même plus à jours sur le nextion (juste l'humidité) ¯_(ツ)_/¯

Je vais continuer à creuser, en tout cas des premiers retours que vous m'avais fait il ne semble pas non plus y avoir d'aberrations dans mon code.