ESP Easy : comment développer ses propres plugins

Accéder aux soldes du Black Friday Amazon Black friday Banggood Black Friday Gearbest
10% de remise supplémentaire* sur les produits domotiques Xiaomi

Kits domotiques, caméras de sécurité, robot aspirateur, purificateur d'air... *Hors produits déjà en promotion

Voir le code promo
39 jours restants

Dans le tutoriel précédent, nous avons vu comment personnaliser le firmware ESP Easy à partir des plugins du Playground, le bac à sable qui permet à n’importe quel développeur de proposer des modules complémentaires. Je prépare actuellement un petit projet pour suivre la qualité de l’air intérieure à base d’une sonde MQ135. Comment il n’y a pas encore de module pour ce capteur, je me suis lancé dans le développement de mon propre module. J’en profite pour vous faire partager mon expérience. Il n’existe pas (encore) de documentation officielle, une grande partie des informations a donc été obtenue par déduction et essais successifs.

Pour ce tutoriel, nous allons développer un nouveau plugin pour le MQ135. Comme aucun plugin 135 n’existe encore dans le playground, j’en ai profité.

Entête du plugin ESP Easy : include et #define

Dans l’entête du plugin, nous peut définir les librairies à inclure éventuellement

#include <SPI.h>

Ensuite, tous les modules doivent être identifiés par une série de clés. Il est important de bien attribué l’ID choisi à toutes les clés pour que le plugin fonctionne.

#define PLUGIN_135 Identifiant du plugin
#define PLUGIN_ID_135 135 L’ID du plugin
#define PLUGIN_NAME_135 “Indoor Air Quality – MQ135” Le libellé qui sera affiché dans la liste de choix
#define PLUGIN_VALUENAME1_135 “CO2” Variable de sortie du plugin. Libellé affiché en guillemets

Si le module possède plus qu’une seule valeur de sortie, on ajoute simplement une nouvelle clé en incrémentant le compteur. Par exemple PLUGIN_VALUENAME2_135, PLUGIN_VALUENAME3_135

Fonction plugin

Le plugin est encapsulé dans une fonction. Cette fonction prend plusieurs paramètres qu’il suffit de tester. Le moteur d’ESP Easy lance à intervalle régulier les plugins associés aux Devices configurés.

Par convention, on nomme le plugin par Plugin_ID_DU_PLUGIN

Méthode PLUGIN_DEVICE_ADD

La première méthode (PLUGIN_DEVICE_ADD) permet de définir les paramètres qui sont communs à tous les Device

Les principaux paramètres sont

  • Type : le type de matériel connecté. On peut choisir parmi
    • DEVICE_TYPE_SINGLE (1) : connecté sur une entrée numérique (datapin)
    • DEVICE_TYPE_I2C (2) : l’appareil communique avec l’ESP via le bus I2C
    • DEVICE_TYPE_ANALOG 3 : on utilise le convertisseur A/N de l’ESP8266 (Pin TOUT, par exemple A0)
    • DEVICE_TYPE_DUAL (4) : appareil connecté à l’aide de 2 entrée numériques
    • DEVICE_TYPE_DUMMY (99) : appareil logique sans connexion physique (Dummy device). Lisez cet article pour en savoir plus
  • VType. Quel type de valeur va renvoyer le plugin. On peut choisir parmi
    • SENSOR_TYPE_SINGLE (1) : un sortie
    • SENSOR_TYPE_TEMP_HUM (2) : 2 sorties de type température & humidité (DHT11 ou DHT22)
    • SENSOR_TYPE_TEMP_BARO (3) : 2 sorties de type température & pression atmosphérique (BMP180)
    • SENSOR_TYPE_TEMP_HUM_BARO (4) : 3 sorties, température, humidité, pression atmosphérique (BME280)
    • SENSOR_TYPE_DUAL (5) : générique, 2 sorties
    • SENSOR_TYPE_TRIPLE (6) : générique, 3 sorties
    • SENSOR_TYPE_SWITCH (10) : 2 états, interrupteur
    • SENSOR_TYPE_DIMMER (11) : 1 sortie variateur
    • SENSOR_TYPE_LONG (20) : 1 sortie
  • ValueCount : nombre de variable de sortie. Ce compteur doit correspondre au nombre de clé PLUGIN_VALUENAME1_xxx

Méthode PLUGIN_GET_DEVICENAME

Cette méthode renvoi le nom du Device.

Méthode PLUGIN_GET_DEVICEVALUENAMES

Cette méthode est appelée à l’ouverture de la page de configuration du module. Elle permet d’ajouter une nouvelle ligne pour chaque variable de sortie du plugin (Optional Settings). Voici par exemple ce que l’on obtient.

espeasy-plugin-optional-settings-mq135

Méthode PLUGIN_INIT

Cette méthode est appelée à l’initialisation du plugin. On pourra par exemple recharger des paramètres.

La méthode doit obligatoirement se terminer par success = true;

Méthode PLUGIN_WEBFORM_LOAD

Cette méthode est est appelée à l’ouverture de la page de configuration du module. Elle permet de construire les options de configuration (à l’exception des paramètres commun à tous les modules) du module. La méthode doit renvoyer une chaine (string) qui contient le code HTML des lignes à ajouter.

C’est un tableau. Chaque ligne (<TR>) est constitué de 2 colonnes (<TD>).

Voici un exemple qui permet d’ajouter une ligne permettant de définir le niveau de CO2 de référence. Voici quelques explications pour ceux qui découvrent l’HTML :

  • <TR> : on ajoute une ligne au tableau.
  • <TD> : on ajoute un colonne
  • CO2 Level ref. : le texte affiché dans la première colonne. Le libellé du paramètre
  • <TD> : on ajoute une 2nd colonne
  • <input type=’text’ name=’plugin_135_ATMOCO2′ value=’ : la 2nd colonne est constitué d’un champ de saisie de type texte (text). On pourra récupérer le contenu du champ grâce à son nom ( name=’plugin_135_ATMOCO2′).
  • On construit la valeur par défaut en allant lire la récupérer dans les réglages du module : Settings.TaskDevicePluginConfigFloat[event->TaskIndex][4]. Elle se trouve à l’index 4. Nous verrons plus loin comment on stocke les paramètres du plugin.
  • Enfin on ferme la colonne F(“‘>”)

Enfin on peut demander à recharger les paramètres avec la méthode LoadTaskSettings(event->TaskIndex).

Voici ce que l’on obtient par exemple

espeasy plugin playground develop

La méthode doit obligatoirement se terminer par success = true;

Méthode PLUGIN_WEBFORM_SAVE

Cette méthode est appelée à chaque fois qu’on appui sur le bouton submit (soumettre) de la page de configuration du Device. Cette méthode va par exemple nous permettre d’enregistrer les paramètres du plugin.

Pour récupérer la valeur d’un champ (saisie, combo, checkbox), on utilise la méthode WebServer.arg. Ce qui donne par exemple pour récupérer le niveau de niveau de référence. On récupère un chaîne de caractère?

Il faut maintenant faire une petite conversion avant d’enregistrer sur l’EPROM de l’ESP8266 la valeur du paramètre.

On dispose de deux méthodes :

  • TaskDevicePluginConfigFloat : pour stocker sous la forme d’un float. Il faudra faire une conversion de la chaîne avec la méthode toFloat()
  • TaskDevicePluginConfig : pour stocker un valeur entière (int). On l’utilise aussi pour l’index d’un choix dans une liste de choix. Il faut d’abord faire une conversion avec toInt().

La méthode doit obligatoirement se terminer par success = true;

Méthodes PLUGIN_READ,  PLUGIN_ONCE_A_SECOND, PLUGIN_TEN_PER_SECOND:

Cette méthode permet de lire la valeur des capteurs, et d’une manière plus générale de réaliser tous les traitements que l’on réalise habituellement dans la boucle loop() d’un programme Arduino. En fonction de la fréquence de traitement désiré, on dispose de 3 méthodes :

  • PLUGIN_READ : le plugin est exécuté suivant le délai indiqué sur la page de configuration du Device une seule fois.
  • PLUGIN_ONCE_A_SECOND: cette tâche sera exécutée une fois par seconde avec toutes les autres tâches appelant cette fonction.
  • PLUGIN_TEN_PER_SECOND: idem mais 10 fois par seconde.

Au démarrage de l’ESP, les tâches sont donc ajoutées dans des listes. Elle seront exécutez à la fréquence choisie. Il faut donc bien choisir la fréquence d’exécution et ne pas créer un code trop lourd pour que l’ESP puisse avoir le temps de traiter toutes les tâches.

La méthode doit obligatoirement se terminer par success = true;

Méthodes personnelles

Si on souhaite ajouter ses propres méthodes, il suffit de les écrire comme d’habitude juste après la méthode Plugin.

[ad1s]

espeasy plugin playground develop

Voilà, vous connaissez l’essentiel pour débuter le développement de vos propres plugins. D’apparence compliquée, c’est en fait assez simple. Le plus facile est de copier un plugin existant et le modifier pour récupérer la structure et les méthodes de base. Dans le prochaine tutoriel, nous verrons un cas concret avec l’ajout d’un module de mesure de la qualité de l’air à l’aide d’un capteur MQ135.

Inscrivez-vous à la newsletter hebdomadaire

Aucun spam et aucun autre usage ne sera fait de votre email. Vous pouvez vous dés inscrire à tout moment.

Comparateur de prix

Bons plans

Les offres suivantes se terminent bientôt. Utilisez le coupon indiqué pour profiter du prix promo

  • Sébastien B

    J’attends impatiemment la suite de cet épisode pour inclure mon mq135 ! Et un bin compilé pour les flemmards 😉
    je vais essayé en attendant de le réaliser de mon coté !
    merci encore pour tout ces tutos !!!

    • Bonjour Sébastien. J’ai également la même demande sur la version anglaise du blog. Le plugin est développé mais je suis un peu déçu par les mesures. Je voulais prendre le temps de vérifier avant de publier. C’est peut être mon capteur qui est défectueux. Je vais le publier sur GitHub pour que vous puissiez essayer et me dire si vos mesures sont meilleures que les miennes. J’ai aussi regarder d’autres capteurs de CO2 sans calibration, mais le prix est plus élevé (30€).

  • Minims

    Bonjour, je suis également intéressé par ce code. J’aimerais le tester et aussi l’adapter pour un MQ-7

  • Minims

    Bonsoir, pas de nouvelles sur la publication de la source, même à débogguer ? Merci.

    • Bonjour Minims. Oui, j’y travaille

      • Minims

        Ok, Merci.
        Sinon c est vraiment un gros travail ce site, j y passe des heures. Encore merci pour ce que tu fais.

Projets DIY - Domotique et objets connectés à faire soi-même