ClubCedille / jardiniot

Système pour des buckets autonomes servant à faire pousser des plantes
GNU General Public License v3.0
13 stars 11 forks source link

Nouvelle version du code Arduino (JardinIoT) #57

Closed AlexBrochu closed 6 years ago

AlexBrochu commented 6 years ago

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 :

AXDOOMER commented 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.

AXDOOMER commented 6 years ago

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.

AXDOOMER commented 6 years ago

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).