Traitement de la requête

L'objectif est de programmer le comportement de l'ESP32 ou de l'ESP8266 lorsqu'il recevra un message de type request(). Il faut faire en sorte que lorsque ce message arrive, la led bleue s'allume ou s'éteigne en fonction du contenu du message reçu request().

Utilisation de la led bleue intégrée à une carte de développement esp32.

MéthodeFonction de rappel

Il faut tout d'abord écrire la fonction de rappel onPowerStateCb() et il faut déterminer les paramètres qu'elle recevra et le type de valeur qu'elle devra retournée (voir lien suivant pour plus d'explications sur les paramètres et la valeur de retour d'une fonction Apprenez à programmer en C - OpenClassRoom) :

Rendez-vous sur le site détaillant la bibliothèque SinricPro et rechercher la fonction PowerStateCallback. Exploitons la documentation :

Si cela vous paraît obscur c'est normal car il y a beaucoup de choses nouvelles (référence, paramètres et valeur de retour d'une fonction, etc).

Pour démystifier, écrivons de manière minimaliste la fonction de rappel onPowerStateCb() en respectant ce qui est précisé dans la documentation SinricPro précédente :

1
bool onPowerStateCb(const String& deviceId, bool& state) {
2
    return true;
3
}

Il faut maintenant compléter cette fonction pour qu'elle allume ou éteigne la led bleue intégrée à la carte ESP. La commande de la led dépend de la valeur du paramètre state :

  • Si state == true : il faut allumer la led ;

  • sinon il faut éteindre la led.

1
// attention pour l'esp8266 la led est active à l'état bas et il faut donc inversé HIGH et LOW dans le code ci-dessous :
2
bool onPowerStateCb(const String& deviceId, bool& state) {
3
   if (state == true)
4
        digitalWrite(2, HIGH);
5
    else
6
        digitalWrite(2, LOW);
7
    return true;
8
}

Copier/coller le code précédent dans le fichier Switch.ino au-dessus de la fonction setupSinricPro().

Configurer la broche 2 en sortie (led bleue) en ajoutant la ligne suivante au début de la fonction setup() :

1
pinMode(2, OUTPUT);

Il ne reste plus qu'à créer dans le programme un objet de type SinricProSwitch avec l'identifiant DEVICE ID de Switch et à enregistrer la fonction de rappel onPowerStateCb() pour l'objet ainsi créé.

Rendez-vous sur votre compte SinricPro et identifier la valeur de DEVICE ID de SwitchOne dans le menu Devices :

Insérez sous les #define existants du fichier main.cpp la constante symbolique SWITCH_ID puis remplacer les x par la valeur du DEVICE ID de Switch de SinricPro (le bouton vous permet de copier cette valeur dans le fichier Switch.ino).

1
#define SWITCH_ID "xxxx" // remplacer les x par l'identifiant de votre appareil Switch

MéthodeCréation de l'objet SinricProSwitch et enregistrement de la fonction de rappel

Il faut maintenant créer un objet de type SinricProSwitch en insérant le code suivant en dessous des variables ssid et password :

1
SinricProSwitch& mySwitch = SinricPro[SWITCH_ID]; // création d'un objet de type SinricProSwitch

Le code suivant enregistre la fonction de rappel onPowerStateCb():

1
mySwitch.onPowerState(onPowerStateCb); // enregistrement de la fonction de rappel

Copier/coller le code précédent au tout début de la fonction setupSinricPro().

Ajouter la directive d'inclusion suivante juste en-dessous des #include déjà existants :

1
#include "SinricProSwitch.h"

Compilez et téléversez votre programme puis validez son bon fonctionnement en vérifiant l'allumage de la led à partir de l'application Alexa de votre mobile.

Complément

Il est possible de piloter la led à partir de votre compte SinricPro en cliquant sur le menu Dashboard :

Les commandes vocales sous Alexa se font sous la forme :

Alexa, allume Switch

Alexa, active Switch

Alexa, éteins Switch

Alexa, désactive Switch

Il faudra au préalable avoir activé "Alexa mains-libres" dans Plus > Paramètres > Paramètres de l'application Alexa > MAINS-LIBRES.