ESP8266 : RELAIS WIFI 4 CANAUX avec le module GCE

De GCE Electronics
Aller à la navigation Aller à la recherche

Relais WIFI 4 CH

Relais4CH Presentation 2.png
Nom Relais WIFI 4 CH
Famille Objets connectés
Wiki créé le 11/06/2018
Wiki mis à jour le 24/07/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 est basé sur le module relais de GCE.

Il dispose de 4 relais pouvant être pilotés à distance (wifi) par l'ESP8266 ou tout autre Arduino Compatible.

Comme pour les montages précédents, nous utiliserons le module NodeMCU dans sa version LoLin, pour une programmation simplifiée par le port USB.

Le matériel nécessaire

Module 4 Relais TTL 5V.png Alimentation modulaire.png
Voici les caractéristiques électriques du module Relais GCE
  • 4 relais de puissance supportant 250V/10A
  • Alimentation 5Vdc 380mA Max (95mA / relais)
  • Très grande plage d'entrée de 0 à 24Vdc
  • 4 Leds pour visualiser les commutations
  • 1 Contact inverseur NO et NF par Relais
  • Supporte les niveaux logiques 3.3V et 5V (0.9mA sous 5v)
  • Niveaux d'entrée 0 à 1.6Vdc (0 logique)
  • Niveaux d'entrée de 1.8 à 24 Dvc (1 Logique)
Remarque : 
Vous pouvez remplacer le module 4 Relais 5V par le module 4 Relais 12V.
Dans ce cas l'alimentation 5V sera à remplacer par une alimentation 12V Vous pouvez bien sûr utiliser une batterie 12V comme source d'alimentation en fonction de vos besoins. Dans le cas d'une source d'alimentation supérieure à 9Vcc, il est préférable d'insérer un régulateur de tension afin de protéger l'ESP8266. Personnellement, j'utilise des modules TracoPower TSR 1-2450 qui ne nécessitent aucun composant supplémentaire pour Vin<=32Vcc et supportent un courant de 1A.

Schéma

Relais4CH 2 5 6 7.png


  • Le module NodeMCU est alimenté directement par la broche Vin.
    Pour une tension supérieure à 9V, il est préférable d'insérer un régulateur (un convertisseur CC/CC est présenté sur le schéma pour plus de compréhension).
  • Le module relais est alimenté par les bornes PWR + et PWR Gnd.
Il est équipé de 4 entrées logiques Logic Inputs. Les bornes 1 2 3 4 sont connectées aux broches D2 D5 D6 D7 du NodeMCU.
Il suffira de configurer ces broches en tant que sorties digitales et les piloter via le programme afin d'activer ou désactiver chaque relais grâce aux transistors Darlington présents sur le module Relais.
  • Les Leds nommées LED_Blink et LED_DEFAUT (facultatives) sont respectivement connectées en D0 et D1au travers d'une résistance de 330Ω.

Les fonctionalités

Grâce à sa connectivité Wifi intégrée, le module NodeMCU 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.

  • client Wifi. Le module se connecte automatiquement au réseau. Il est possible de lui attribuer 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.


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

Si la Led nommée LED_DEFAUT est présente en D1, elle sera allumée lors d'un défaut de connexion au réseau wifi.

L'environnement de programmation : Easycoding

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

Relais4CH Config reseau2.png

Modifiez la valeur de chaque variable :

  • NOM_DISPOSITIF : remplacez RelaisGCE 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 password par la clé WPA de votre réseau Wifi
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 un retour d'état via une commande API à l'IPX800 .


Relais4CH Cfg API2.png
  • IPX800_IP : remplacez 192.168.0.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_SV1_Retour : remplacez 005 par le numéro de la sortie virtuelle ou physique qui recevra le retour d'état du relais n°1.
  • IPX800_SV2_Retour : remplacez 006 par le numéro de la sortie virtuelle ou physique qui recevra le retour d'état du relais n°2.
  • IPX800_SV3_Retour : remplacez 007 par le numéro de la sortie virtuelle ou physique qui recevra le retour d'état du relais n°3.
  • IPX800_SV4_Retour : remplacez 008 par le numéro de la sortie virtuelle ou physique qui recevra le retour d'état du relais n°4.
La configuration des Leds optionnelles
Relais4CH Config LED.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_DEFAUT : remplacez 1 par 0 si la Led n'est pas installée en D1.

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

Branchez le module au port USB de votre PC.


ESP8266 USB.png

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 conformément au schéma, ou par son port USB.

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>_<Num_canal>
http://<IP_Module>:<Port_Module>/OFF_<NomDispositif>_<Num_canal>
<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.
<Num_canal> représente le numéro du relais à piloter (1 à 4)


Exemples :

Pour activer le relais 1 du système nommé RelaisGCE
http://192.168.0.64:80/ON_RelaisGCE_1

Pour désactiver le relais 4 du système nommé RelaisGCE
http://192.168.0.64:80/OFF_RelaisGCE_4

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 ou LED_Link

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.

La Led Défaut

Au démarrage, la Led est allumée en attendant une connexion au réseau Wifi.

Lorsque la connexion est établie avec succès, la Led s'éteint.

Pendant le fonctionnement du module relais, le programme vérifie l'état de la connexion et allume la Led en cas de perte réseau. Il faudra appuyer sur le bouton SW_Reset afin de redémarrer le module.

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 4 sorties virtuelles.


Création du Widget de pilotage

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

Relais 4CH WidgetCreate2.PNG

Cliquez sur le bouton JAVASCRIPT et collez ce code :

var SVa="0";
var SVb="1";
var SVc="2";
var SVd="3";
var moduleGCE="RelaisGCE";
var adresseIP="192.168.0.64";
var portIP="80";
var Desc1="Description Relais 1";
var Desc2="Description Relais 2";
var Desc3="Description Relais 3";
var Desc4="Description Relais 4";
var TypeSortie="led"; //renseigner vout pour une sortie virtuelle, ou led pour un relais


return `

<br>
<div class="indicator-light2  ${TypeSortie}${SVa} ${TypeSortie}ta9${SVa}" style="margin-left:10px;margin-top:25px;"></div>
    <span>
        <input type="button"   class="bouton2" style="margin-top:25px;margin-left:10px;width: 100px;" onclick="newAJAXCommand('api.cgi?SetPushURL=${adresseIP}&amp;Port=${portIP}&amp;Message=/ON_${moduleGCE}_1');" value="ON Relais 1"  title="${Desc1}">
        <input type="button"   class="bouton2" style="margin-top:25px;margin-left:10px;width: 100px;" onclick="newAJAXCommand('api.cgi?SetPushURL=${adresseIP}&amp;Port=${portIP}&amp;Message=/OFF_${moduleGCE}_1');" value="OFF Relais 1"  title="${Desc1}">
     </span>  
    <div class="indicator-light2 ${TypeSortie}${SVb} ${TypeSortie}ta${SVb}"  style="margin-left:10px;margin-top:15px;"></div>
    <span>
        <input type="button"   class="bouton2" style="margin-top:15px;margin-left:10px;width: 100px;" onclick="newAJAXCommand('api.cgi?SetPushURL=${adresseIP}&amp;Port=${portIP}&amp;Message=/ON_${moduleGCE}_2');" value="ON Relais 2"  title="${Desc2}">
        <input type="button"  class="bouton2" style="margin-top:15px;margin-left:10px;width: 100px;" onclick="newAJAXCommand('api.cgi?SetPushURL=${adresseIP}&amp;Port=${portIP}&amp;Message=/OFF_${moduleGCE}_2');" value="OFF Relais 2"  title="${Desc2}">
    </span>    
    <div class="indicator-light2 ${TypeSortie}${SVc} ${TypeSortie}ta${SVc}"  style="margin-left:10px;margin-top:15px;"></div>
    <span>
        <input type="button"   class="bouton2" style="margin-top:15px;margin-left:10px;width: 100px;" onclick="newAJAXCommand('api.cgi?SetPushURL=${adresseIP}&amp;Port=${portIP}&amp;Message=/ON_${moduleGCE}_3');" value="ON Relais 3"  title="${Desc3}">
        <input type="button"   class="bouton2" style="margin-top:15px;margin-left:10px;width: 100px;" onclick="newAJAXCommand('api.cgi?SetPushURL=${adresseIP}&amp;Port=${portIP}&amp;Message=/OFF_${moduleGCE}_3');" value="OFF Relais 3"  title="${Desc3}">
    </span>
    <div class="indicator-light2 ${TypeSortie}${SVd} ${TypeSortie}ta${SVd}"  style="margin-left:10px;margin-top:15px;"></div>    
    <span>
        <input type="button"   class="bouton2" style="margin-top:15px;margin-left:10px;width: 100px;" onclick="newAJAXCommand('api.cgi?SetPushURL=${adresseIP}&amp;Port=${portIP}&amp;Message=/ON_${moduleGCE}_4');" value="ON Relais 4" title="${Desc4}">
        <input type="button"   class="bouton2" style="margin-top:15px;margin-left:10px;width: 100px;" onclick="newAJAXCommand('api.cgi?SetPushURL=${adresseIP}&amp;Port=${portIP}&amp;Message=/OFF_${moduleGCE}_4');" value="OFF Relais 4" title="${Desc4}">
    </span>

`;

Dans les 11 premières lignes du code,

  • renseignez la valeur de SVa, SVb, SVc et SVd avec les numéros des sorties virtuelles (ou relais IPX) à utiliser pour le retour d'état. Renseignez 0 pour 1, ..., 31 pour 32, ...).
    Ces informations doivent correspondre à celles qui ont été mises en place dans le programme du module ESP8266
  • 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 pour chaque relais du module GCE.
    Cette description apparaîtra en info-bulle lors du survol des boutons avec la souris.

En ligne 12, 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


  • Sauvegardez le Widget
  • Sauvegardez l'IHM

voici le résultat (exemple avec les Relais 1 et 4 à l'état ON) :

Relais 4CH Widget.PNG