Closed AlexBrochu closed 6 years ago
Pour l'instant, on peut avoir 3 A_LED, 1 Fan, 1 DHT, sans dépasser la SRAM du arduino. Lorsqu'on la dépasse le arduino va geler. (la fonction loop s'arrête).
Le Arduino Uno a 2KB de RAM, ça sera pas facile.
Au pire pour éviter les problèmes de mémoire: comme la configuration des senseurs restera majoritairement la même sur le Arduino et pour éviter des coûts supplémentaires, on a juste à faire du code modulaire où on commenterait et décommenterait des fonctions dans le code auxquelles on passerait les numéros de pin dont ils se servent. On pourrait créer une fonction par senseurs et la caller dans le code. Elle retournerait de quoi qu'on mettrait sur un stack qu'on viderait en envoyant ces données à travers le WiFi au serveur MQTT. On ne pourra plus modifier la configuration du Arduino pendant qu'il roule, mais on règle plusieurs problèmes et on simplifie notre tâche.
Venant de Rocketchat
Exemple de code qui illustre l'idée:
enum pins = { pin1, pin2, pin3, pin4, pin5, pin6, pin7, pin8};
const unsigned char SENSEURS = 3; // nombre de senseurs
const char* sensdata[SENSEURS]; // buffer pour les données
sensdata[0] = LED(const char * cmd, pin2, pin3); // une lumière led
sensdata[1] = FAN(const char * cmd, pin4, pin5); // un ventilateur
sensdata[2] = DHT(const char * cmd, pin6, pin7); // le capteur de température et humidité
for (const char * a : sensdata){
ENVOYER_ESP8266(a);
}
// TODO: Lire commandes qui viennent du ESP8266
Après on peut lire ce qu'on a reçu du ESP8266 et réutiliser le même array pour storer les commandes (cmd
).
Le code est maintenant en C++ On peut maintenant ajouter, modifier et supprimer des senseurs ou controlleurs dynamiquement grâce à des commandes envoyées par le ESP au Arduino.
Le code pour le ESPserial a été mis en commentaire pour faciliter les tests en local. Tout devrait fonctionner comme avant tant et aussi longtemps qu'on reçoit des commandes dans le bon format. (voir JardinCommand.h et .cpp pour plus d'info.)
Le code est fonctionnel pour les LED, DHT, FAN et A_LED (Analogique LED)
Il va rester bien sûr quelques fixes à faire pour diminuer la quantité de mémoire utiliser lors de la création des controlleurs. Pour l'instant, on peut avoir 3 A_LED, 1 Fan, 1 DHT, sans dépasser la SRAM du arduino. Lorsqu'on la dépasse le arduino va geler. (la fonction loop s'arrête).
Pour solutionner le problème :
il faut éliminer le plus possible les Serial.print
Éliminer les structures de données dynamiques (vector et string qui sont utilisés actuellement...)