RED BOARD entraide


Messages recommandés

Comme l'ensemble des fils de discutions de Gen sont verrouillés pour le moment vue son absence, je propose ici la continuité des discutions concernant la RED BOARD.

 

++

Viker

 

Edit: suite à nos échanges sur ce post le programme de la redboard a bien changé avec correction de bugs et ajout ne nouvelles fonctionnalités.

Vous pouvez trouver ce nouveau programme avec le détails des changements et des nouvelles fonctionnalités ici.

N'hésitez pas à partager sur le sujet de la redboard et faire vos retours sur cette nouvelle programmation.

Modifié par Viker
  • Thanks 1
Lien à poster
Partager sur d’autres sites

Yop,

@JH63

Pour rappel:

sensors_delay à 10000 ms et looptime à 2s --> erreurs sondes A au bout de 10 h.

Du coup je repasse la valeur à 20000 sans même tester 15000.

motorDelay passe à 20000 car sans nouvelle mesure de température inutile de faire calculer une nouvelle vitesse de moteur.

Et enfin ledDelay passe à 30000.

 

Encore des erreurs sondes salles A au bout de 2 à 3 jours.

Je décide de regarder le code plus en profondeur.

(Mais avant de faire cela je mets à jour sous Visual Studio Code dans platformio la plateforme ESP 32 avec passage en version 4.2.0.

Lors de la compilation j'ai une erreur sur la lib onewire. Je mets à jour la librairie en la remplaçant la version 2.3.5 par la 2.3.6 récupérable ici.

En recompilant plus d'erreurs.)

 

En regardant le code je m’aperçois que la variable looptime est certes déclarée mais non utilisée dans le programme main.cpp

Je pense que Gen a due l'utiliser puis la virer dans le programme délivré.

 

En cherchant ce qui peut faire des erreurs sur les sondes AM2320 je suis tombé sur ce sujet qui montre que la cohabitation des sondes AM2320 et du LCD entraine des erreurs sondes. En gros il ne faut vraiment pas que les sondes soient consultée pendant un affichage lcd.

 

Du coup, je viens de modifier main.cpp afin de différer l'affichage du LCD en utilisant la variable looptime.

La modification se fait à partir de la ligne 2531:

 

Remplacement de : 

  stop = millis();
  delta = stop - start;

 lcdDisplayInfo(addressIP,now.unixtime(),delta,AM2320_A_error_counter,AM2320_B_error_counter);
  if(delta <1000)
  {
     delay(1000-delta);
  }
  firstLoopCycle = false;

 

Par:

  stop = millis();
  delta = stop - start;
  if(delta <loop_time)
  {
     delay(loop_time-delta);
  }
  lcdDisplayInfo(addressIP,now.unixtime(),delta,AM2320_A_error_counter,AM2320_B_error_counter);
  firstLoopCycle = false;

 

Looptime prends la valeur de 4000 car dans le processtime j'ai vu des valeurs allant jusqu'à 3500-3600.

 

Donc tests en cours et retour sous quelques jours.

 

++

Viker

 

 

 

 

 

  • Like 1
  • Thanks 1
Lien à poster
Partager sur d’autres sites

Yop @Viker,

 

Pour le prochain post, si tu p indiqué l endroit où on p mettre le ssid et mdp c bien, par contre malgré ma perte du lcd, au bout de 5 jrs tjs pas d erreurs de sondes.

 

++  

Lien à poster
Partager sur d’autres sites

Yop,

@JH63 pour le ssid et mot de passe tu veux dire dans l'interface du nextion ou directement dans main.cpp?

 

Sinon depuis la mise à jour de la plateforme Espressif 32 version 4.2.0 j'ai un gros problème, je n'arrive plus a faire d'enregistrement de valeur dans les paramètres du nextion et je ne sais vraiment pas comment y remédier. @JH63 Quel est ta version de Espressif 32 visible dans l'onglet PIO Home section platforms?

 

++

Viker

Modifié par Viker
Lien à poster
Partager sur d’autres sites

Yop,

Version 3.5.0, par contre il m dde aussi la mise à jour, j v rester comme ça, et oui sous main.cpp pour la wifi, j ai fait plusieurs essais mais non convainquant par rapport à ce q j ai pu lire.

++.

Lien à poster
Partager sur d’autres sites

Yop,

@JH63 j'ai remis en version 3.5.0 et au passage j'ai remis la lib OneWire-2.3.5. J'ai de nouveau l'écran Nextion avec enregistrement des paramètres fonctionnel.

 

Pour remettre en version 3.5.0 je suis allé dans PIO Home, platforms, onglet embedded, espressif 32 et là il y a un menu installation où on peut choisir la version.

Puis retour sur platforms et désinstallation de la version 4.2.0.

 

++

Viker

Modifié par Viker
Lien à poster
Partager sur d’autres sites

Yop,

 

@JH63 concernant le wifi en fouillant le code je propose ceci (mais je n'ai pas testé):

Donc à toi de tester en n'oubliant pas d'enlever ton wifi actuel de la redboard avant test.

 

ligne 194 on trouve:

String SSID, PSW;

juste en dessous ajouter:

SSID="MonSSIDSansEspace";

PSW="MonPasswordSansEspace";

 

puis ligne à la ligne 2377 on trouve:

displayInitScreen(80,"CONNECTION WIFI");

juste en dessous ajouter:

WIFIDATA->setSSID(SSID);

WIFIDATA->setPSW(PSW);

WIFIDATA->saveAll();

delay(150);

 

edit: par contre le problème si cela fonctionne c'est que ton wifi sera celui spécifié dans

SSID="MonSSIDSansEspace";

PSW="MonPasswordSansEspace";

à chaque reboot de la redboard et donc si tu changes dans l'interface nextion ton wifi pour un autre wifi au prochain reboot tu reviens sur ce wifi.

Je ne vois pas trop l'intérêt vu qu'une fois rentré par l'interface nextion, il est en mémoire et ce même après un nouvel upload du programme.

 

++

Viker

Modifié par Viker
Lien à poster
Partager sur d’autres sites

Yop,

C qu il me semblait qui fallait faire un hard reset à chq envoi de la prog, d ou la perte du wifi sinon comme tu dis cela le garde autrement.

 

Merci quand même.

Lien à poster
Partager sur d’autres sites

Yop,

 

le hard reset est utile à la première programmation, il n'est pas utile ensuite à moins d'avoir une programmation très différente changeant l'utilisation de la mémoire eeprom.

 

++

Viker

Lien à poster
Partager sur d’autres sites

Yop,

 

petit ajout au serveur web de la redboard.

Dorénavant vous aurez en plus de ce qui était affiché:

- nb de jours

- température sonde extérieure

- vitesse moteur

- temp min

- temp max

- humi min

- humi max

 

à partir de la ligne 719 ajoutez en insérant ce qui est en bleu:

 

client.println("<!DOCTYPE html><html>");
client.println("<html lang=\"fr\">");
client.println("<head>");
client.println("<title>Server Red Board</title>");
client.println("<meta name=\"viewport\" content=\"width-device-width, initial-scale=1\" charset=\"UTF-8\" />");
client.println("<link rel='stylesheet' href='https://www.w3schools.com/w3css/4/w3.css'>");
client.println("</head>");
client.println("<body class=\"w3-animated-opacity w3-blue-gray\">");
client.println("<div class=\"w3-card w3-red w3-padding-small w3-center\">");
client.println("<h1>RED BOARD WEB SERVER</h1>");
client.println("</div>");
client.println("<table class=\"w3-table w3-bordered w3-card-4 w3-centered w3-large w3-section\">");
client.println("<tr><th class='w3-light-blue'>MESURES</th><th class='w3-light-blue'>SALLE A</th><th class='w3-light-blue'>SALLE B</th></tr> ");
client.println("<tr><td>NB JOURS</td><td colspan=2>");
client.println(((now.unixtime() - lastStart)/86400));
client.println("<tr><td>TEMP. EXT. °C</td><td colspan=2>");
client.println(String(temperature_EXT));
client.println("<tr><td>VITESSE MOTEUR</td><td>");
client.println(String(speed_A));
client.println("</td><td>");
client.println(String(speed_B));

client.println("<tr><td>TEMPERATURE °C</td><td>");
client.println(String(temperature_A));
client.println("</td><td>");
client.println(String(temperature_B));
client.println("<tr><td>TEMP. MIN. °C</td><td>");
client.println(String(BALISE_A->getTmin()));
client.println("</td><td>");
client.println(String(BALISE_B->getTmin()));
client.println("<tr><td>TEMP. MAX. °C</td><td>");
client.println(String(BALISE_A->getTmax()));
client.println("</td><td>");
client.println(String(BALISE_B->getTmax()));

client.println("</td></tr><tr><td>HUMIDITE %</td><td>");
client.println(String(humidity_A));
client.println("</td><td>");
client.println(String(humidity_B));
client.println("<tr><td>HUMID. MIN. %</td><td>");
client.println(String(BALISE_A->getHmin()));
client.println("</td><td>");
client.println(String(BALISE_B->getHmin()));
client.println("<tr><td>HUMID. MAX. %</td><td>");
client.println(String(BALISE_A->getHmax()));
client.println("</td><td>");
client.println(String(BALISE_B->getHmax()));

client.println("</td></tr><tr><td>CO2 PPM</td><td>");
client.println(String(PPMCO2_A));
client.println("</td><td>");
client.println(String(PPMCO2_B));
client.println("</td></tr><tr><td>ERREUR SONDE</td><td>");
client.println(String(AM2320_A_error_counter));
client.println("</td><td>");
client.println(String(AM2320_B_error_counter));
client.println("</td></tr></table></div>");
client.println("</body></html>");

 

++

Viker

 

Modifié par Viker
  • Like 1
Lien à poster
Partager sur d’autres sites

Yop @Viker

Plus que le nombre de jrs, éventuellement vitesses moteur, et on pourrait supprimer l écran lcd finalement qui ferait un élément en moins susceptible de tomber en rade.

 

++

Lien à poster
Partager sur d’autres sites

Yop @Viker,

Je m rends pas compte de c qui faudrait modifier ds la prog pour le supprimer, c est important comme travail ou avec // sur qq ligne suffisent??.

(J ai tjrs des pertes du lcd, pas encore testé ta modif)

Merci

++

Lien à poster
Partager sur d’autres sites

Yop,

 

@JH63, pour effectivement ne pas exécuter une instruction il suffit de la mettre en commentaire avec // devant.

Je ne pense pas qu'il soit utile de supprimer l'affichage du lcd dès le début au moment du boot car tu as toutes les indications d'initialisation.

Par contre dans le void loop() il est possible de ne plus rafraichir et donc d'envoyer de données au lcd.

Pour cela il suffit de mettre en commentaire l'antépénultième ligne du programme comme ceci:

 

// lcdDisplayInfo(addressIP,now.unixtime(),delta,AM2320_A_error_counter,AM2320_B_error_counter);

 

testes et fait ton retour pour voir si cela change.

 

++

Viker

Modifié par Viker
Lien à poster
Partager sur d’autres sites

Yop,

 

non pas de soucis pour la carte car par cette action tu empêches juste d'envoyer des données au lcd à chaque boucle du programme.

Cela ne change pas fondamentalement le comportement de l'esp32 comme par exemple transformer une entrée en sortie ou réciproquement.

Donc aucun risque.

 

++

Viker

Lien à poster
Partager sur d’autres sites

Yop,

 

Dans le sujet Programme RED Board et installation, je faisais part à Gen de modifications possibles:

 

- possibilité de rendre programmable les sorties dessicateur et brumisateur afin que l'on puisse choisir si celles-ci sont utilisées en tant que tel ou les dédier au chauffage/climatisation.

 

En d'autre termes, liés ces sorties au taux d'humidité ou à la température et de les rendre actives si au dessus ou si en dessous d'une valeur seuil choisie dans le menu paramètre.

- un mode de protection (éventuellement programmable) qui si une sonde ne réagit pas alors induit un comportement de sécurité et un message d'erreur pour l'utilisateur.

Exemple: si sonde A ne réponds pas alors signaler le problème sur le nextion et la page web. Couper chauffage, clim, brumisation et dessiccation. Mettre la vitesse moteur à 2 ou 3. Garder le cycle jour/nuit des lampes.

- afin d'augmenter la fiabilité des sondes am2320 coupures des autres communications i2c (lcd, l'horloge, les iO expanders de type MCP, le générateur de signal PWM PCA9685, ...) lors de la consultation des sondes AM2320.

 

En fouillant plus le programme et en comparaison du programme du growduino V3 il pourrait y avoir des ajouts supplémentaires car cela était bien utile sur le growduino V3:

 

- il n'y a plus de possibilité d'avoir une différence de vitesse entre l'intracteur et l'extracteur. Fonction fort utile pour soit mettre en dépression la salle ou tout simplement ajuster les différence entre un intracteur et un extracteur de modèles différents en soufflant pas les même quantité d'air pour la même vitesse.

 

- possibilité de modifier l'hystérésis de l'humidité et de la température par l'interface Nextion.

Actuellement, l'hystérésis de l'humidité est de 5% non modifiable.

L'hystérésis de la température n'est pas mondifiable et n'est pas non plus implémentée dans la modification de la vitesse des moteurs (pas d'hystérésis pour la température).

 

- actuellement l'écran lcd et ainsi que la page web avec mes ajouts donne le nombres de jours de fonctionnement de la redboard. C'est bien car en cas de coupure de courant nous avons le compteur qui repart de 0. C'est donc un bon indicateur.

Par contre il n'y a plus, gardé en mémoire lors d'une coupure courant, le nombre de jours indiquant le temps écoulé depuis le début d'un mode de culture (cro ou flo). Fonction que je trouve indispensable.

 

- un mode de culture séchage en plus de croissance et floraison. Ce mode ayant un profil de gestion des températures et humidités sur 15 jours et au dela sur valeurs fixes.

 

- une veille sur la luminosité de nextion et du lcd. En touchant le nextion les deux s'allument.

 

- la gestion CO2 n'est fait qu'en mode cyclique. Plus de mode continue avec valeurs seuils min max co2 ppm ni de mode combiné. Pas d'injection de CO2 en mode Croissance. On ne peut rentrer que des valeurs en minutes, je pense que des valeurs en secondes seraient plus adapté.

 

- disparition aussi de l'enchainement automatique des cycles croissance et flo avec un nombres de jours définis.

 

Je pense qu'avec tous ces ajouts on arriverait à une RED Board exploitant son potentiel.

 

++

 

Viker

Modifié par Viker
  • Like 1
Lien à poster
Partager sur d’autres sites
il y a une heure, Viker a dit:

Yop,

 

Dans le sujet Programme RED Board et installation, je faisais part à Gen de modifications possibles:

 

- possibilité de rendre programmable les sorties dessicateur et brumisateur afin que l'on puisse choisir si celles-ci sont utilisées en tant que tel ou les dédier au chauffage/climatisation.

 

En d'autre termes, liés ces sorties au taux d'humidité ou à la température et de les rendre actives si au dessus ou si en dessous d'une valeur seuil choisie dans le menu paramètre.

- un mode de protection (éventuellement programmable) qui si une sonde ne réagit pas alors induit un comportement de sécurité et un message d'erreur pour l'utilisateur.

Exemple: si sonde A ne réponds pas alors signaler le problème sur le nextion et la page web. Couper chauffage, clim, brumisation et dessiccation. Mettre la vitesse moteur à 2 ou 3. Garder le cycle jour/nuit des lampes.

- afin d'augmenter la fiabilité des sondes am2320 coupures des autres communications i2c (lcd, Nextion, ...) lors de la consultation des sondes AM2320.

 

En fouillant plus le programme et en comparaison du programme du growduino V3 il pourrait y avoir des ajouts supplémentaires car cela était bien utile sur le growduino V3:

 

- il n'y a plus de possibilité d'avoir une différence de vitesse entre l'intracteur et l'extracteur. Fonction fort utile pour soit mettre en dépression la salle ou tout simplement ajuster les différence entre un intracteur et un extracteur de modèles différents en soufflant pas les même quantité d'air pour la même vitesse.

 

- possibilité de modifier l'hystérésis de l'humidité et de la température par l'interface Nextion.

Actuellement, l'hystérésis de l'humidité est de 5% non modifiable.

L'hystérésis de la température n'est pas mondifiable et n'est pas non plus implémentée dans la modification de la vitesse des moteurs (pas d'hystérésis pour la température).

 

- actuellement l'écran lcd et ainsi que la page web avec mes ajouts donne le nombres de jours de fonctionnement de la redboard. C'est bien car en cas de coupure de courant nous avons le compteur qui repart de 0. C'est donc un bon indicateur.

Par contre il n'y a plus, gardé en mémoire lors d'une coupure courant, le nombre de jours indiquant le temps écoulé depuis le début d'un mode de culture (cro ou flo). Fonction que je trouve indispensable.

 

- un mode de culture séchage en plus de croissance et floraison. Ce mode ayant un profil de gestion des températures et humidités sur 15 jours et au dela sur valeurs fixes.

 

- une veille sur la luminosité de nextion et du lcd. En touchant le nextion les deux s'allument.

 

Je pense qu'avec tous ces ajouts on arriverait à une RED Board exploitant son potentiel.

 

++

 

Viker

 

slt viker,

le nextion n est pas i2c, il se branche sur tx et rx

  • Thanks 1
Lien à poster
Partager sur d’autres sites