Différences entre les versions de « ESP8266 : RELAIS WIFI 1 CANAL »

De GCE Electronics
Aller à la navigation Aller à la recherche
 
(247 versions intermédiaires par le même utilisateur non affichées)
Ligne 5 : Ligne 5 :
| famille = Objets connectés
| famille = Objets connectés
| date-create = 22/05/2018
| date-create = 22/05/2018
| date-update = 22/05/2018
| date-update = 10/08/2018
| auteur = fgtoul
| auteur = fgtoul
}}
}}


==Prérequis==
==Prérequis==
Avant de pouvoir programmer le module NodeMCU, vous devez avoir installé l'environnement de développement spécifique à l'ESP8266.


Avant de pouvoir programmer le module NodeMCU, vous devez avoir installé l'environnement de développement.
Je vous invite à lire ce tutoriel : '''[[ESP8266_:_ENVIRONNEMENT|ESP8266 : Installation de l'environnement]]'''
 
Je vous invite à lire [[ESP8266_:_ENVIRONNEMENT|ce tutoriel]]
 


==Présentation ==
==Présentation ==
Difficulté de mise en oeuvre : <span style="font-size:110%;color:green;">★★☆☆☆</span>


Le montage que nous allons réaliser, permet de piloter un relais à distance avec l'ESP8266.
Le montage que nous allons réaliser, permet de piloter un relais à distance avec l'ESP8266.


Nous utiliserons le module NodeMCU dans sa version LoLin, pour une programmation simplifiée par le port USB et la possibilité d'alimenter un relais 5V directement sur l'une de ses broches.
Nous utiliserons le module NodeMCU dans sa version LoLin, pour une programmation simplifiée par le port USB et la possibilité d'alimenter un relais 5V directement sur l'une de ses broches.
<span style="color:#e56d0f">
'''Attention :''' <br>
ce ne sont pas des relais de puissance. Limite = 10A (résistif).<br>
Ne pas utiliser pour piloter un ballon d'eau chaude ou tout appareil à forte consommation.<br>
Réservez ce type de matériel aux circuits de commande (faible consommation) ou pour piloter des appareils basse tension (caméras, ...).
'''Pour faire les branchements électriques, veillez à toujours respecter les règles de sécurité. '''
</span>
==Matériel nécessaire==
1 cable '''micro USB Type B''' vers '''USB Type A''' (câble fréquemment utilisé pour les smartphones et les tablettes)
1 module NodeMCU V3 (LoLin) Lua WIFI basé sur ESP8266 ESP-12E
1 module relais 5V avec Trigger (entrée TTL)<br>
<code>COÛT : une dizaine d'Euro</code>


==le schéma==
==le schéma==


::[[Fichier:Esp8266_Relais_Schema.PNG|border]]
[[Fichier:ESP8266_RelaisSchema.PNG]]
 
 
* Le module NodeMCU est alimenté directement en '''5V''' par son port '''USB'''.
* Le module relais est un modèle avec Trigger. La broche <code>S</code> est connectée à la sortie <code>D5</code> du NodeMCU.<br>


* Le module NodeMCU est alimenté directement en 5V par son port USB.
* Le module relais est un modèle avec Trigger. La broche Signal ("S") est connectée à la sortie D0 du NodeMCU.<br>
:Il suffira de piloter cette sortie via le programme afin d'activer ou désactiver le relais.<br>
:Il suffira de piloter cette sortie via le programme afin d'activer ou désactiver le relais.<br>
:Le relais est alimenté par la sortie VU, qui est un report de la tension appliquée sur le port USB (5V).
:Le relais est alimenté par la sortie <code>VU</code>, qui est un report de la tension appliquée sur le port USB (5Vcc).
 
 
 
Les Leds '''''LED_Link''''' et '''''LED_Relais''''' sont optionnelles.
Repérez le sens des Leds. Les cathodes (méplats) sont connectées à la borne <code>Gnd</code>


==Les fonctionalités==
==Les fonctionalités==


Grâce à sa connectivité Wifi intégrée, le module se connecte à un réseau wifi, via lequel il pourra communiquer avec le reste de l'installation domotique.
Grâce à sa connectivité Wifi intégrée, le module se connecte à un réseau wifi, via lequel il pourra communiquer avec le reste de l'installation domotique.
A la fois client et serveur, notre module recevra des consignes sous la forme de requêtes Http et pourra répondre par une page HTML.
A la fois client et serveur, notre module recevra des consignes sous la forme de requêtes Http et pourra répondre par une page HTML. Il pourra également répondre par une autre requête permettant ainsi d'accuser réception de la consigne.


* client Wifi. Le module se connecte automatiquement au réseau. Il est possible de lui appliquer une adresse IP statique.
* client Wifi. Le module se connecte automatiquement au réseau. Il est possible de lui appliquer une adresse IP statique.
Ligne 44 : Ligne 69 :
** clignotement rapide (3 fois) pour signaler la réception d'une requête erronée.
** clignotement rapide (3 fois) pour signaler la réception d'une requête erronée.


==L'environnement de programmation : Easycoding==
[[Fichier:Logo_googleblockly.png]]


La programmation du module NodeMCU se fait soit en script LUA, soit en langage C++ via Arduino IDE.
En <code>D0</code>, si la Led nommée ''LED_Link''  est présente, elle clignotera à la place de la Led embarquée lors de la connexion au Wifi ou de la réception des requêtes.


Pour cette réalisation, nous écrirons un programme en langage C++
En <code>D1</code>, si la Led nommée ''LED_Relais'' est présente, elle s'allumera lorsque le relais passera à l'état ON, puis s'éteindra lorsque le relais passera à l'état OFF.


Afin de ne pas effrayer les débutants, nous utiliserons un générateur de code en ligne, qui permet une représentation simple et graphique du code, à la façon Google Blockly  (bibliothèque logicielle javascript, Open Source de Google, créée en 2012).
==L'environnement de programmation : Easycoding==


Cet outil permettra aux débutant de configurer l'application, sans avoir à se préoccuper du langage.
Nous allons utiliser Easycoding pour éditer le code du projet.


Les lecteurs plus férus de programmation, pourront intervenir dans le code C++, après avoir injecté le code dans Arduino IDE..
===Chargement du projet===


===Easycoding.tn===
* Téléchargez et décompressez ce fichier : '''[https://wiki.gce-electronics.com/images/e/e3/ESP8266_Relais.zip ESP8266_Relais.zip]''' <br>Lien de secours : '''[https://wiki.gce-electronics.com/images/e/e3/ESP8266_Relais.zip ESP8266_Relais.zip]'''


Pour accéder à l'interface de développement, rendez-vous sur le site [http://easycoding.tn Easycoding.tn]
* Cliquez sur le bouton [[Fichier:Easycoding_load.png|50px|Load XML]] et sélectionnez le fichier XML précédemment téléchargé.


Dans le sous-menu '''TUNIOT FOR ESP8266''', cliquez sur le bouton de vottre choix, afin d'accéder à l'interface dans votre langue préférée.
* Validez par OK pour charger le fichier.


::[[Fichier:easycoding.tn.png|border|500px]]
::[[Fichier:easycoding.tn3.png|border|250px|Load XML]]


L'outil prend un peu de temps pour s'ouvrir, mais devient très performant par la suite. Ne vous impatientez pas.
===Programmation===


::[[Fichier:easycoding.tn2.png|border|500px]]
Le programme se décompose en deux parties :


Voici l'interface, prête à recevoir le code.
* '''Setup''' : Le code n'est exécuté qu'une fois au démarrage du module.  
** Configuration du réseau
** Définition des variables
** Connexion au réseau Wifi
** Démarrage du serveur Http


Téléchargez et décompressez ce fichier : [http://gce-electronics.com/wiki/images/e/e3/ESP8266_Relais.zip ESP8266_Relais.zip]
* '''Boucle Principale''' : Le code de cette boucle est répété jusqu'à extinction du module
** attente d'une connexion sur le serveur Web embarqué
** interprêtation de la requête reçue et pilotage du Relais (ON ou OFF)
** réponses sur port série et http
** envoi d'une commande API vers IPX800 pour le retour d'état du Relais.


Cliquez sur le bouton "Load XML" et sélectionnez le fichier XML précédemment téléchargé.
====La configuration====
 
::[[Fichier:Easycoding.tn3.png]]


Validez par OK pour charger le fichier.
Dans la boucle SETUP, vous devez configurer
* le réseau
* Les commandes API qui seront envoyées vers IPX800 (retour d'état)
* Les Leds optionnelles


===Le programme===
====La configuration====
Dans la boucle SETUP, nous trouvons tous les éléments de configuration, ainsi que le code qui ne sera exécuté qu'une fois lors du démarrage du module.


=====La configuration du réseau=====
=====La configuration du réseau=====
Ligne 90 : Ligne 117 :


Modifiez la valeur de chaque variable :
Modifiez la valeur de chaque variable :
* '''NOM_DISPOSITIF''' : remplacez <code>''RelaisIPCAM1''</code> par le nom que vous souhaitez attribuer à votre module
* '''WIFI_SSID''' : remplacez la valeur <code>''MON_SSID''</code> par le SSID de votre réseau wifi
* '''WIFI_SSID''' : remplacez la valeur <code>''MON_SSID''</code> par le SSID de votre réseau wifi
* '''WIFI_SECURITE''' : remplacez la valeur <code>''Ma_Cle_Wep''</code> par la clé WEP de votre réseau Wifi
* '''WIFI_SECURITE''' : remplacez la valeur <code>''MA_CLE_WPA''</code> par la clé WPA de votre réseau Wifi
* '''IPX800_IP''' : remplacez <code>''192.168.000.112''</code> par l'adresse IP de l'IPX800 V4.<br>
 
:Cette adresse IP sera utilisée pour le retour d'état via l'API IPX800.
=====Nom d'hôte et adresse IP statique=====
* '''IPX800_Port''' : remplacez la valeur <code>''80''</code> par le port paramétré sur l'IPX800 (port http)
 
::[[Fichier:ESP8266_Relais_ConfigStatique.png]]
 
Si vous souhaitez affecter une adresse IP fixe au module, renseignez les valeurs
* '''IP''' : Remplacez <code>''192,168,0,64''</code> par l'adresse à attribuer. Attention, les séparateurs sont des virgules, et non des points.
* '''Passerelle''' : Remplacez <code>''192,168,0,254''</code> par l'adresse IP locale de votre routeur (box adsl), les séparateurs sont des virgules.
* '''Masque''' : Remplacez <code>''255,255,255,0''</code> par le masque de votre réseau, les séparateurs sont des virgules.
 
Si vous souhaitez que votre module conserve une adresse IP dynamique (DHCP), sélectionnez le bloc "IP Statique" puis appuyez la touche <code>'''Suppr'''</code> de votre clavier.
Les blocs situés en dessous, doivent remonter.


=====La configuration des commandes API=====
=====La configuration des commandes API=====


::[[Fichier:ESP8266_Code_API.png]]
Après pilotage du relais, le module envoie une commande API à l'IPX800 pour confirmer l'état du relais (ON ou OFF)


* '''NOM_DISPOSITIF''' : remplacez <code>''RelaisIPCAM1''</code> par le nom que vous souhaitez attribuer à votre module
::[[Fichier:Relais4CH_Config_API.png]]
* API_Commande_ON : remplacez <code>''SetVO''</code> par une autre commande si vous ne souhaitez pas activer une sortie virtuelle sur l'IPX800 (SetR par exemple pour activer un relais)
* '''API_Commande_OFF''' : remplacez <code>''ClearVO''</code> par une autre commande si vous ne souhaitez pas désactiver une sortie virtuelle sur l'IPX800 (ClearR par exemple pour désactiver un relais)
* '''IPX800_SV_Retour''' : remplacez <code>''05''</code> par le numéro de la sortie virtuelle ou physique qui recevra le retour d'état.


::[[Fichier:ESP8266_Code_API2.png]]
* '''IPX800_IP''' : remplacez <code>''192.168.000.112''</code> par l'adresse IP de l'IPX800 V4. Les séparateurs sont des points.<br>
:Cette adresse IP sera utilisée pour le retour d'état via l'API IPX800.
* '''IPX800_Port''' : remplacez la valeur <code>''80''</code> par le port paramétré sur l'IPX800 (port http)
* '''APIKEY_SECURE''' : renseignez 1 si vous avez activé la protection de l'API, sinon renseignez 0
* '''IPX800_KEY''' : remplacez <code>''apikey''</code> par votre clé API.


* '''APIKEY_SECURE''' : renseignez 1 si vous avez activé la protection de l'API
* '''IPX800_KEY''' : remplacez <code>''apikey''</code> par votre clé API.


=====Connexion au Wifi et Nom d'hôte et adresse IP statique=====
* '''API_Commande_ON''' : remplacez <code>''SetVO''</code> par une autre commande si vous ne souhaitez pas activer une sortie virtuelle sur l'IPX800 (''SetR'' par exemple pour activer un relais)
* '''API_Commande_OFF''' : remplacez <code>''ClearVO''</code> par une autre commande si vous ne souhaitez pas désactiver une sortie virtuelle sur l'IPX800 (''ClearR'' par exemple pour désactiver un relais)
* '''IPX800_SV_Retour''' : remplacez <code>''005''</code> par le numéro de la sortie virtuelle ou physique qui recevra le retour d'état.
::::Attention : pour une sortie virtuelle, le numéro doit être présenté sur 3 digits (ex : 005), pour une sortie relais, il doit être sur 2 digits (ex : 05).


::[[Fichier:ESP8266_Code_connexion.png]]
=====La configuration des Leds optionnelles=====


Si vous souhaitez affecter une adresse IP fixe au module, renseignez les valeurs
::[[Fichier:ESP8266_Relais_ConfigLeds.png]]
* '''IP''' : Remplacez <code>''192,168,0,64''</code> par l'adresse à attribuer. Attention, les séparateurs sont des virgules, et non des points.
* '''Passerelle''' : Remplacez <code>''192,168,0,254''</code> par l'adresse IP locale de votre routeur (box adsl), les séparateurs sont des virgules.
* '''Masque''' : Remplacez <code>''255,255,255,0''</code> par le masque de votre réseau, les séparateurs sont des virgules.


Si vous souhaitez que votre module conserve une adresse IP dynamique (DHCP), cliquez sur le bloc "IP Statique" puis appuyez la touche <code>'''Suppr'''</code> de votre clavier.
* '''LED_Link''' : remplacez <code>''1''</code> par <code>''0''</code> si la Led n'est pas installée en <code>D0</code>. La Led embarquée sera utilisée.


Lorsque le module est connecté à un PC dans l'environnement '''Arduino IDE''', le programme communique l'adresse IP sur le port USB.  
* '''LED_Relais''' : remplacez <code>''1''</code> par <code>''0''</code> si la Led n'est pas installée en  <code>D1</code>.


====Le reste du code====
====Le reste du code====
Ligne 137 : Ligne 173 :
::[[Fichier:ESP8266_Code_Serveur.png]]
::[[Fichier:ESP8266_Code_Serveur.png]]


Démarrage du serveur Http et envoi des informations sur le port série (USB)
::Démarrage du serveur Http et envoi des informations sur le port série (USB)


=====Mise en place de l'API Key s active=====
=====Mise en place de l'API Key s active=====
Ligne 145 : Ligne 181 :
=====Création des commandes API à envoyer à l'IPX800 (retour d'état)=====
=====Création des commandes API à envoyer à l'IPX800 (retour d'état)=====


[[Fichier:ESP8266_Code_Cde_API.png]]
::[[Fichier:ESP8266_Code_ApiON.png]]
 
::[[Fichier:ESP8266_Code_ApiOff.png]]


=====Création des requêtes attendues par le module=====
=====Création des requêtes attendues par le module=====


[[Fichier:ESP8266_Code_Request.png]]
::[[Fichier:ESP8266_Code_RequeteON.png]]
 
::[[Fichier:ESP8266_Code_RequeteOff.png]]
 
::Les requêtes sont composées avec le nom du dispositif afin de sécuriser le process.
 
=====Attente d'un client=====
 
::[[Fichier:ESP8266_Code_ConnexionWeb.png]]


Les requêtes sont composées avec le nom du dispositif afin de sécuriser le process.
::Le programme attend la connexion d'un client sur le serveur web embarqué


===== interprétation de la requête reçue par le module=====
===== interprétation de la requête reçue par le module=====


[[Fichier:ESP8266_Code_Request2.png]]
::[[Fichier:ESP8266_Code_request.png]]


En fonction de la valeur de la requête reçue, le module active ou désactive le relais, émet des informations sur le port série puis envoie un retour d'état à l'IPX800 via les commandes API. La réponse de l'IPX800 sera affichée via le port série également.
::En fonction de la valeur de la requête reçue, le module active ou désactive le relais, émet des informations sur le port série puis envoie un retour d'état à l'IPX800 via les commandes API. La réponse de l'IPX800 sera affichée via le port série également.
 
=====La réponse par le serveur Web=====


::Le code restant s'occupe d'émettre une réponse au client qui a émis la requête vers le module.


=====La réponse par le serveur Web=====
::La réponse se fait sous la forme d'une page web contenant toutes les informations sur la requête et les erreurs éventuelles.


Le code restant s'occupe d'émettre une réponse au client qui a émis la requête vers le module.
::La réponse de l'IPX800 à la commande API reçue (retour d'état) sera également affichée dans la page Web.
La réponse se fait sous la forme d'une page web contenant toutes les informations sur la requête et les erreurs éventuelles.
La réponse de l'IPX800 à la commande API reçue (retour d'état) sera également affichée dans la page Web.


</div></div>
</div></div>
Ligne 170 : Ligne 217 :
== Sauvegarde et Transfert du programme sur le module==
== Sauvegarde et Transfert du programme sur le module==


[[Fichier:ESP8266_Code_Transfertb.png|border]]
Cliquez sur [[Fichier:Easycoding_save.png|50px|Save XML]] pour sauvegarder votre projet.




[[Fichier:ESP8266_Code_Transfert.png|border]]
Exportez votre code vers Arduino IDE :
Sur l'interface de Easycoding, cliquez sur le bouton d'exécution [[Fichier:Easycoding_arduinoIDE.png|50px|Lancer le programme défini par les blocs dans l'espace de travail]].


 
Validez par OK
Sur l'interface de Easycoding, cliquez sur le bouton d'exécution.


[[Fichier:ESP8266_Code_Transfert2.png|border]]
[[Fichier:ESP8266_Code_Transfert2.png|border]]


Validez par OK


[[Fichier:ESP8266_Code_Transfert3.png|border]]
[[Fichier:ESP8266_Code_Transfert3.png|border]]


Choisissez l'option "Ouvrir avec" et choisissez le logiciel par défaut "Arduino IDE" installé au préalable.
Choisissez l'option "Ouvrir avec" et choisissez le logiciel par défaut "Arduino IDE" installé au préalable.
Validez
 
Validez,
 
le logiciel Arduino IDE s'ouvre et charge votre programme.
le logiciel Arduino IDE s'ouvre et charge votre programme.


==Arduino IDE : compilation & téléversement du code==
===Branchement du module au PC===
Connectez le module au port USB de votre PC. Vous pouvez laisser le relais et les leds connectés.
[[Fichier:ESP8266_Televersement.png|500px]]
Si vous devez intervenir dans le code C++, c'est le moment .


==Arduino IDE : Compilation & Téléversement du code==
===Vérification du code===


Dans l'interface du logiciel Arduino IDE, vérifiez les prérequis
Dans l'interface du logiciel Arduino IDE, vérifiez les prérequis
Ligne 195 : Ligne 252 :
* Installation des bibliothèques ESP8266 (Gestionnaire de cartes)
* Installation des bibliothèques ESP8266 (Gestionnaire de cartes)
* Sélection du Type de Carte (menu Outils)
* Sélection du Type de Carte (menu Outils)
Pour plus d'information, voir plus haut le paragraphe "Prérequis"
Pour plus d'information, voir plus haut le paragraphe "[[ESP8266_:_UN_RELAIS_WIFI#Pr.C3.A9requis|Prérequis]]"


Connectez le module au port USB de votre PC.
Cliquez sur le bouton [[Fichier:ArduinoIDE_VerifCode.png|25px]] afin de vérifier le code.


Si vous devez intervenir dans le code C++, c'est le moment .
Vérifiez les éventuelles erreurs dans la console.


Cliquez sur le bouton pour compiler et téléverser le code compilé dans la mémoire flash du module, et  ouvrez le moniteur Série.
===Téléversement vers le module===


A la fin du téléversement, le module démarre. Les informations arrivent par le port USB.
* Cliquez sur le bouton [[Fichier:ArduinoIDE_TeleverseCode.png|25px]] pour compiler et téléverser le code compilé dans la mémoire flash du module,


Notez l'adresse IP attribuée au module
* ouvrez le moniteur Série [[Fichier:ArduinoIDE_Moniteur.png|25px]]
Rendez vous dans votre navigateur internet, et entrez l'adresse IP du module.


Après programmation par le port série (USB) il est conseillé de redémarrer manuellement le module (débranchez/rebranchez) pour éviter toute instabilité.
* suivez la progression du téléversement dans la fenêtre console


Le serveur Web intégré au module devrait vous renvoyer une page Html comportant les instructions de base.
* A la fin du téléversement, le module démarre. Les informations arrivent par le port USB.


* '''Notez l'adresse IP attribuée au module'''
Après programmation par le port série (USB) il est conseillé de redémarrer manuellement le module (débranchez/rebranchez) pour éviter tout risque d'instabilité.


==Utilisation==
==Utilisation==
Alimentez le module en 5V par son port


Cas d'une requête absente (en url de navigation, vous avez entré l'adresse IP seule)
Alimentez le module en 5V par son port USB '(il peut également être utilisé lorsqu'il est connecté au port USB de votre PC).
 
===Accès au module===
 
'''Pour démarrer''', dans votre navigateur, entrez l'adresse IP de votre module (relevée précédemment dans Arduino IDE).
 
Le serveur http du module vous envoie une page Html comportant les commandes attendues.
 
Les commandes de pilotage du relais par le module sont sous la forme
: '''http://'''<''IP_Module''>''':'''<''Port_Module''>'''/ON_'''<''NomDispositif''>
: '''http://'''<''IP_Module''>''':'''<''Port_Module''>'''/OFF_'''<''NomDispositif''>
 
<''IP_Module''> représente l'adresse IP locale du module (fixe ou dynamique)
<''Port_Module''> représente le port Http du serveur Web intégré au module.
<''NomDispositif''> représente le nom d'hôte que vous avez attribué au module.
 
 
Le retour d'état se fait sur l'IPX800 avec les commandes API mises en place dans le programme.
Ces commandes sont également affichées dans la page réponse du module.
 
Voici la page Web retournée par le module, ainsi que les informations remontées sur le port USB.
Voici la page Web retournée par le module, ainsi que les informations remontées sur le port USB.


[[Fichier:ESP8266_Web_NoRequest.PNG|900px]]
[[Fichier:ESP8266_Web_NoRequest.PNG|900px]]


Cas d'une URL comprenant une requête incorrecte. Les instructions sont renvoyées dans la page Html.
'''Cas d'une URL comprenant une requête incorrecte'''. Les instructions sont rappelées dans la page Html.


[[Fichier:ESP8266_Web_ErrorRequest.PNG|900px]]
[[Fichier:ESP8266_Web_ErrorRequest.PNG|900px]]


Cas d'une requête comportant une commande ON correcte  
'''Cas d'une requête comportant une commande ON correcte'''


[[Fichier:ESP8266_Web_OnRequest.PNG|900px]]
[[Fichier:ESP8266_Web_OnRequest.PNG|900px]]


Cas d'une requête OFF correcte
'''Cas d'une requête OFF correcte'''


[[Fichier:ESP8266_Web_OffRequest.PNG|900px]]
[[Fichier:ESP8266_Web_OffRequest.PNG|900px]]
===La Led embarquée===
Au démarrage,
* la Led clignote '''5 fois''' pour signaler que le module est  '''connecté au réseau Wifi'''.
A la réception d'une requête,
* la Led clignote '''1 fois rapidement''' pour signaler qu'une '''requête correcte''' a été reçue.
* la Led clignote '''3 fois rapidement''' pour signaler qu'une '''requête incorrecte''' a été reçue.
==Pilotage depuis l'IPX800 V4==
Comme nous l'avons vu, le relais wifi est piloté par des requêtes Http ON ou OFF, un retour d'état se fait sur une sortie virtuelle.
===Création du Preset Watchdog===
Nous allons créer un Preset Watchdog pour vérifier l'accessibilité de notre module.
Pour cela, rendez vous dans le menu "Administrateur/Périphériques/Ping Watchdog".
Réglez et activez un preset sur l'adresse IP du module ESP8266.
[[Fichier:ESP8266_RelaisWifi_Watchdog.png]]
===Création du widget pour visualisation du retour d'état===
Comme nous l'avons vu, le relais wifi est piloté par des requêtes Http comprenant des commandes ON ou OFF, un retour d'état se fait sur 1 sortie virtuelle ou un relais.
En mode Administrateur sur le dashboard de l'IPX800, créez un widget de type '''HTML''' de hauteur '''1 bloc'''.
::[[Fichier:ESP8266_Relais1CH_widget.png]]
Cliquez sur le bouton <span style="color:green;">'''JAVASCRIPT'''</span> et collez ce code :
<source>
var SVa="4"; //num SV -1
var moduleRelais="RelaisIPCAM1";
var adresseIP="192.168.0.64";
var portIP="80";
var Desc1="Description Relais";
var TypeSortie="vout"; //renseignez vout pour une sortie virtuelle, ou led pour un relais
//Preset Watchdog
var SVw=0; //watchdog avec preset 1
return `
<div class="indicator-light3  pw${SVw}" style="float:right;margin-right:18px;margin-top:5px;width:5px;height:5px;"></div>
<br>
<div class="indicator-light2  ${TypeSortie}${SVa} ${TypeSortie}ta9${SVa}" style="margin-left:10px;margin-top:15px;"></div>
<span>
        <input type="button"  class="bouton2" style="margin-top:10px;margin-left:10px;width: 100px;" onclick="newAJAXCommand('api.cgi?SetPushURL=${adresseIP}&amp;Port=${portIP}&amp;Message=/ON_${moduleRelais}');" value="ON Relais 1"  title="${Desc1}">
        <input type="button"  class="bouton2" style="margin-top:10px;margin-left:10px;width: 100px;" onclick="newAJAXCommand('api.cgi?SetPushURL=${adresseIP}&amp;Port=${portIP}&amp;Message=/OFF_${moduleRelais}');" value="OFF Relais 1"  title="${Desc1}">
</span> 
`;
</source>
Dans les 5 premières lignes du code,
:* renseignez la valeur de SVa avec le numéro de la sorties virtuelle (ou relais IPX) à utiliser pour le retour d'état.<br>Cette information doit correspondre à celle qui a été mise en place dans le programme du module ESP8266. Renseignez 0 pour 1, ..., 127 pour 128)
:* renseignez le Nom que vous avez attribué au module ESP8266
:* renseignez l'adresse IP et le port Http du module ESP8266
:* renseignez une courte description du relais.<br>Cette description apparaîtra en info-bulle lors du survol des boutons avec la souris.
En ligne 6, indiquez le type de sortie qui affichera le retour d'état.
:* Si le module envoie des commandes API telles que <code>SetVO</code> ou <code>ClearVO</code>, renseignez '''vout'''
:* Si le module envoie des commandes API telles que <code>SetR</code> ou <code>ClearR</code>, renseignez '''led'''
En ligne 8, renseignez le numéro du preset Watchdog (renseignez 0 pour 1, ..., 31 pour 32).
Sauvegardez le Widget
Sauvegardez l'IHM
voici le résultat :
[[Fichier:ESP8266_Relais1CH_Widget1.png]]
L'ESP8266 est joignable. Le relais est activé.
[[Fichier:ESP8266_Relais1CH_Widget2b.png]]
L'ESP8266 n'est plus joignable. L'indicateur Wachdog est rouge.
L'indicateur du relais ne change pas d'état. Il indique la dernière position connue.

Version actuelle datée du 11 mai 2022 à 08:23

Relais WIFI

ESP8266 Relais presentation.png
Nom Relais WIFI
Famille Objets connectés
Wiki créé le 22/05/2018
Wiki mis à jour le 10/08/2018
Auteur fgtoul

Prérequis

Avant de pouvoir programmer le module NodeMCU, vous devez avoir installé l'environnement de développement spécifique à l'ESP8266.

Je vous invite à lire ce tutoriel : ESP8266 : Installation de l'environnement

Présentation

Difficulté de mise en oeuvre : ★★☆☆☆

Le montage que nous allons réaliser, permet de piloter un relais à distance avec l'ESP8266.

Nous utiliserons le module NodeMCU dans sa version LoLin, pour une programmation simplifiée par le port USB et la possibilité d'alimenter un relais 5V directement sur l'une de ses broches.

Attention :
ce ne sont pas des relais de puissance. Limite = 10A (résistif).
Ne pas utiliser pour piloter un ballon d'eau chaude ou tout appareil à forte consommation.
Réservez ce type de matériel aux circuits de commande (faible consommation) ou pour piloter des appareils basse tension (caméras, ...).

Pour faire les branchements électriques, veillez à toujours respecter les règles de sécurité.

Matériel nécessaire

1 cable micro USB Type B vers USB Type A (câble fréquemment utilisé pour les smartphones et les tablettes)

1 module NodeMCU V3 (LoLin) Lua WIFI basé sur ESP8266 ESP-12E

1 module relais 5V avec Trigger (entrée TTL)

COÛT : une dizaine d'Euro

le schéma

ESP8266 RelaisSchema.PNG


  • Le module NodeMCU est alimenté directement en 5V par son port USB.
  • Le module relais est un modèle avec Trigger. La broche S est connectée à la sortie D5 du NodeMCU.
Il suffira de piloter cette sortie via le programme afin d'activer ou désactiver le relais.
Le relais est alimenté par la sortie VU, qui est un report de la tension appliquée sur le port USB (5Vcc).


Les Leds LED_Link et LED_Relais sont optionnelles. Repérez le sens des Leds. Les cathodes (méplats) sont connectées à la borne Gnd

Les fonctionalités

Grâce à sa connectivité Wifi intégrée, le module se connecte à un réseau wifi, via lequel il pourra communiquer avec le reste de l'installation domotique. A la fois client et serveur, notre module recevra des consignes sous la forme de requêtes Http et pourra répondre par une page HTML. Il pourra également répondre par une autre requête permettant ainsi d'accuser réception de la consigne.

  • client Wifi. Le module se connecte automatiquement au réseau. Il est possible de lui appliquer une adresse IP statique.
  • informations (adresse IP locale) et retours d'état via le port série (USB) lorsqu'il est connecté à un PC.
  • Serveur Http activé au démarrage. Le client connecté au serveur recevra une réponse à chacune de ses requêtes, sous forme de page web.
  • la Led embarquée peut retourner des informations sur le statut des communications :
    • clignotement lent (5 fois) pour signaler une connexion correcte au réseau Wifi,
    • clignotement simple (1 fois) pour signaler la réception d'une requête correcte,
    • clignotement rapide (3 fois) pour signaler la réception d'une requête erronée.


En D0, si la Led nommée LED_Link est présente, elle clignotera à la place de la Led embarquée lors de la connexion au Wifi ou de la réception des requêtes.

En D1, si la Led nommée LED_Relais est présente, elle s'allumera lorsque le relais passera à l'état ON, puis s'éteindra lorsque le relais passera à l'état OFF.

L'environnement de programmation : Easycoding

Nous allons utiliser Easycoding pour éditer le code du projet.

Chargement du projet

  • Cliquez sur le bouton Load XML et sélectionnez le fichier XML précédemment téléchargé.
  • Validez par OK pour charger le fichier.
Load XML

Programmation

Le programme se décompose en deux parties :

  • Setup : Le code n'est exécuté qu'une fois au démarrage du module.
    • Configuration du réseau
    • Définition des variables
    • Connexion au réseau Wifi
    • Démarrage du serveur Http
  • Boucle Principale : Le code de cette boucle est répété jusqu'à extinction du module
    • attente d'une connexion sur le serveur Web embarqué
    • interprêtation de la requête reçue et pilotage du Relais (ON ou OFF)
    • réponses sur port série et http
    • envoi d'une commande API vers IPX800 pour le retour d'état du Relais.

La configuration

Dans la boucle SETUP, vous devez configurer

  • le réseau
  • Les commandes API qui seront envoyées vers IPX800 (retour d'état)
  • Les Leds optionnelles


La configuration du réseau
ESP8266 Code Wifi.png

Modifiez la valeur de chaque variable :

  • NOM_DISPOSITIF : remplacez RelaisIPCAM1 par le nom que vous souhaitez attribuer à votre module
  • WIFI_SSID : remplacez la valeur MON_SSID par le SSID de votre réseau wifi
  • WIFI_SECURITE : remplacez la valeur MA_CLE_WPA par la clé WPA de votre réseau Wifi
Nom d'hôte et adresse IP statique
ESP8266 Relais ConfigStatique.png

Si vous souhaitez affecter une adresse IP fixe au module, renseignez les valeurs

  • IP : Remplacez 192,168,0,64 par l'adresse à attribuer. Attention, les séparateurs sont des virgules, et non des points.
  • Passerelle : Remplacez 192,168,0,254 par l'adresse IP locale de votre routeur (box adsl), les séparateurs sont des virgules.
  • Masque : Remplacez 255,255,255,0 par le masque de votre réseau, les séparateurs sont des virgules.

Si vous souhaitez que votre module conserve une adresse IP dynamique (DHCP), sélectionnez le bloc "IP Statique" puis appuyez la touche Suppr de votre clavier. Les blocs situés en dessous, doivent remonter.

La configuration des commandes API

Après pilotage du relais, le module envoie une commande API à l'IPX800 pour confirmer l'état du relais (ON ou OFF)

ESP8266 Config API.png
  • IPX800_IP : remplacez 192.168.000.112 par l'adresse IP de l'IPX800 V4. Les séparateurs sont des points.
Cette adresse IP sera utilisée pour le retour d'état via l'API IPX800.
  • IPX800_Port : remplacez la valeur 80 par le port paramétré sur l'IPX800 (port http)
  • APIKEY_SECURE : renseignez 1 si vous avez activé la protection de l'API, sinon renseignez 0
  • IPX800_KEY : remplacez apikey par votre clé API.


  • API_Commande_ON : remplacez SetVO par une autre commande si vous ne souhaitez pas activer une sortie virtuelle sur l'IPX800 (SetR par exemple pour activer un relais)
  • API_Commande_OFF : remplacez ClearVO par une autre commande si vous ne souhaitez pas désactiver une sortie virtuelle sur l'IPX800 (ClearR par exemple pour désactiver un relais)
  • IPX800_SV_Retour : remplacez 005 par le numéro de la sortie virtuelle ou physique qui recevra le retour d'état.
Attention : pour une sortie virtuelle, le numéro doit être présenté sur 3 digits (ex : 005), pour une sortie relais, il doit être sur 2 digits (ex : 05).
La configuration des Leds optionnelles
ESP8266 Relais ConfigLeds.png
  • LED_Link : remplacez 1 par 0 si la Led n'est pas installée en D0. La Led embarquée sera utilisée.
  • LED_Relais : remplacez 1 par 0 si la Led n'est pas installée en D1.

Le reste du code

Aucune modification n'est nécessaire dans les blocs décrits dans ce paragraphe.
Nous les survolons juste pour en comprendre la fonction. Cliquez sur [Afficher] si vous êtes curieux.
Les autres variables
ESP8266 Code Var.png
Démarrage du Serveur Http
ESP8266 Code Serveur.png
Démarrage du serveur Http et envoi des informations sur le port série (USB)
Mise en place de l'API Key s active
ESP8266 Code APISECURE.png
Création des commandes API à envoyer à l'IPX800 (retour d'état)
ESP8266 Code ApiON.png
ESP8266 Code ApiOff.png
Création des requêtes attendues par le module
ESP8266 Code RequeteON.png
ESP8266 Code RequeteOff.png
Les requêtes sont composées avec le nom du dispositif afin de sécuriser le process.
Attente d'un client
ESP8266 Code ConnexionWeb.png
Le programme attend la connexion d'un client sur le serveur web embarqué
interprétation de la requête reçue par le module
ESP8266 Code request.png
En fonction de la valeur de la requête reçue, le module active ou désactive le relais, émet des informations sur le port série puis envoie un retour d'état à l'IPX800 via les commandes API. La réponse de l'IPX800 sera affichée via le port série également.
La réponse par le serveur Web
Le code restant s'occupe d'émettre une réponse au client qui a émis la requête vers le module.
La réponse se fait sous la forme d'une page web contenant toutes les informations sur la requête et les erreurs éventuelles.
La réponse de l'IPX800 à la commande API reçue (retour d'état) sera également affichée dans la page Web.

Sauvegarde et Transfert du programme sur le module

Cliquez sur Save XML pour sauvegarder votre projet.


Exportez votre code vers Arduino IDE : Sur l'interface de Easycoding, cliquez sur le bouton d'exécution Lancer le programme défini par les blocs dans l'espace de travail.

Validez par OK

ESP8266 Code Transfert2.png


ESP8266 Code Transfert3.png

Choisissez l'option "Ouvrir avec" et choisissez le logiciel par défaut "Arduino IDE" installé au préalable.

Validez,

le logiciel Arduino IDE s'ouvre et charge votre programme.

Arduino IDE : compilation & téléversement du code

Branchement du module au PC

Connectez le module au port USB de votre PC. Vous pouvez laisser le relais et les leds connectés.

ESP8266 Televersement.png

Si vous devez intervenir dans le code C++, c'est le moment .

Vérification du code

Dans l'interface du logiciel Arduino IDE, vérifiez les prérequis

  • Configuration du Port COM (menu Outils)
  • Installation des bibliothèques ESP8266 (Gestionnaire de cartes)
  • Sélection du Type de Carte (menu Outils)

Pour plus d'information, voir plus haut le paragraphe "Prérequis"

Cliquez sur le bouton ArduinoIDE VerifCode.png afin de vérifier le code.

Vérifiez les éventuelles erreurs dans la console.

Téléversement vers le module

  • Cliquez sur le bouton ArduinoIDE TeleverseCode.png pour compiler et téléverser le code compilé dans la mémoire flash du module,
  • ouvrez le moniteur Série ArduinoIDE Moniteur.png
  • suivez la progression du téléversement dans la fenêtre console
  • A la fin du téléversement, le module démarre. Les informations arrivent par le port USB.
  • Notez l'adresse IP attribuée au module
Après programmation par le port série (USB) il est conseillé de redémarrer manuellement le module (débranchez/rebranchez) pour éviter tout risque d'instabilité.

Utilisation

Alimentez le module en 5V par son port USB '(il peut également être utilisé lorsqu'il est connecté au port USB de votre PC).

Accès au module

Pour démarrer, dans votre navigateur, entrez l'adresse IP de votre module (relevée précédemment dans Arduino IDE).

Le serveur http du module vous envoie une page Html comportant les commandes attendues.

Les commandes de pilotage du relais par le module sont sous la forme

http://<IP_Module>:<Port_Module>/ON_<NomDispositif>
http://<IP_Module>:<Port_Module>/OFF_<NomDispositif>
<IP_Module> représente l'adresse IP locale du module (fixe ou dynamique)
<Port_Module> représente le port Http du serveur Web intégré au module.
<NomDispositif> représente le nom d'hôte que vous avez attribué au module.


Le retour d'état se fait sur l'IPX800 avec les commandes API mises en place dans le programme. Ces commandes sont également affichées dans la page réponse du module.

Voici la page Web retournée par le module, ainsi que les informations remontées sur le port USB.

ESP8266 Web NoRequest.PNG

Cas d'une URL comprenant une requête incorrecte. Les instructions sont rappelées dans la page Html.

ESP8266 Web ErrorRequest.PNG

Cas d'une requête comportant une commande ON correcte

ESP8266 Web OnRequest.PNG

Cas d'une requête OFF correcte

ESP8266 Web OffRequest.PNG

La Led embarquée

Au démarrage,

  • la Led clignote 5 fois pour signaler que le module est connecté au réseau Wifi.

A la réception d'une requête,

  • la Led clignote 1 fois rapidement pour signaler qu'une requête correcte a été reçue.
  • la Led clignote 3 fois rapidement pour signaler qu'une requête incorrecte a été reçue.

Pilotage depuis l'IPX800 V4

Comme nous l'avons vu, le relais wifi est piloté par des requêtes Http ON ou OFF, un retour d'état se fait sur une sortie virtuelle.

Création du Preset Watchdog

Nous allons créer un Preset Watchdog pour vérifier l'accessibilité de notre module. Pour cela, rendez vous dans le menu "Administrateur/Périphériques/Ping Watchdog". Réglez et activez un preset sur l'adresse IP du module ESP8266.

ESP8266 RelaisWifi Watchdog.png

Création du widget pour visualisation du retour d'état

Comme nous l'avons vu, le relais wifi est piloté par des requêtes Http comprenant des commandes ON ou OFF, un retour d'état se fait sur 1 sortie virtuelle ou un relais.

En mode Administrateur sur le dashboard de l'IPX800, créez un widget de type HTML de hauteur 1 bloc.

ESP8266 Relais1CH widget.png

Cliquez sur le bouton JAVASCRIPT et collez ce code :

var SVa="4"; //num SV -1
var moduleRelais="RelaisIPCAM1";
var adresseIP="192.168.0.64";
var portIP="80";
var Desc1="Description Relais";
var TypeSortie="vout"; //renseignez vout pour une sortie virtuelle, ou led pour un relais
//Preset Watchdog
var SVw=0; //watchdog avec preset 1

return `

<div class="indicator-light3  pw${SVw}" style="float:right;margin-right:18px;margin-top:5px;width:5px;height:5px;"></div>
<br>
<div class="indicator-light2  ${TypeSortie}${SVa} ${TypeSortie}ta9${SVa}" style="margin-left:10px;margin-top:15px;"></div>
<span>
        <input type="button"   class="bouton2" style="margin-top:10px;margin-left:10px;width: 100px;" onclick="newAJAXCommand('api.cgi?SetPushURL=${adresseIP}&amp;Port=${portIP}&amp;Message=/ON_${moduleRelais}');" value="ON Relais 1"  title="${Desc1}">
        <input type="button"   class="bouton2" style="margin-top:10px;margin-left:10px;width: 100px;" onclick="newAJAXCommand('api.cgi?SetPushURL=${adresseIP}&amp;Port=${portIP}&amp;Message=/OFF_${moduleRelais}');" value="OFF Relais 1"  title="${Desc1}">
</span>  
`;

Dans les 5 premières lignes du code,

  • renseignez la valeur de SVa avec le numéro de la sorties virtuelle (ou relais IPX) à utiliser pour le retour d'état.
    Cette information doit correspondre à celle qui a été mise en place dans le programme du module ESP8266. Renseignez 0 pour 1, ..., 127 pour 128)
  • renseignez le Nom que vous avez attribué au module ESP8266
  • renseignez l'adresse IP et le port Http du module ESP8266
  • renseignez une courte description du relais.
    Cette description apparaîtra en info-bulle lors du survol des boutons avec la souris.

En ligne 6, indiquez le type de sortie qui affichera le retour d'état.

  • Si le module envoie des commandes API telles que SetVO ou ClearVO, renseignez vout
  • Si le module envoie des commandes API telles que SetR ou ClearR, renseignez led

En ligne 8, renseignez le numéro du preset Watchdog (renseignez 0 pour 1, ..., 31 pour 32).

Sauvegardez le Widget

Sauvegardez l'IHM

voici le résultat :

ESP8266 Relais1CH Widget1.png

L'ESP8266 est joignable. Le relais est activé.

ESP8266 Relais1CH Widget2b.png

L'ESP8266 n'est plus joignable. L'indicateur Wachdog est rouge.

L'indicateur du relais ne change pas d'état. Il indique la dernière position connue.