ESP8266 : RELAIS WIFI 4 CANAUX avec le module GCE
| |||
---|---|---|---|
Nom | Relais WIFI 4 CH | ||
Famille | Objets connectés | ||
Wiki créé le | 11/06/2018 | ||
Wiki mis à jour le | 11/06/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
- 1 module à 4 relais 5V vendu ici par GCE,
- 1 alimentation modulaire 5V
- 1 module NodeMCU V3 (LoLin) Lua WIFI basé sur ESP8266 ESP-12E
- 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
- Le module NodeMCU est alimenté directement par la broche
Vin
. Celle-ci est régulée et admet une tension maximale qui varie en fonction du fabriquant (entre 10V et 20V).
Pour une tension supérieure à 9V, il est préférable d'insérer un régulateur.
- C'est pourquoi je préserve le NodeMCU par un convertisseur CC/CC afin d'abaisser la tension à 5 V sur
Vin
.
- Le module relais est alimenté par les bornes
PWR +
etPWR Gnd
.
- Il est équipé de 4 entrées logiques
Logic Inputs
. Les bornes1
2
3
4
sont connectées aux sorties digitalesD0
D1
D2
D3
du NodeMCU. - Il suffira de piloter ces sorties via le programme afin d'activer ou désactiver chaque relais grâce aux transistors Darlington.
- La Led nommée LED_Blink (facultative) est connectée en
D5
au travers d'une résistance de 100Ω ou 110Ω.
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 D5
, elle clignotera à la place de la Led embarquée lors de la connexion au Wifi ou de la réception des requêtes.
L'environnement de programmation : Easycoding
La programmation du module NodeMCU se fait soit en script LUA, soit en langage C++ via Arduino IDE.
Pour cette réalisation, nous écrirons un programme en langage C++ (vous n'allez pas vous en rendre compte ...)
Afin de ne pas effrayer les débutants, nous utiliserons un générateur de code nommé Easycoding, qui permet une écriture simplifiée et graphique du code.
Easycoding a été développé avec Google Blockly
(bibliothèque logicielle javascript, Open Source, créée par Google en 2012).
Cet outil permettra aux débutants de configurer l'application, sans avoir à se préoccuper du langage. Cependant le système blocly ne permet d'écrire que des commandes simples, qui qui allonge considérablement le code, notamment pour la gestion des chaînes de caractères (concaténations).
Les lecteurs plus férus de programmation, pourront intervenir dans le code C++, après l'avoir injecté dans Arduino IDE.
Easycoding.tn
Pour accéder à l'interface de développement, rendez-vous sur le site Easycoding.tn
Dans le sous-menu TUNIOT FOR ESP8266, cliquez sur le drapeau de votre choix, afin d'accéder à l'interface dans votre langue préférée.
L'outil prend un peu de temps pour s'ouvrir, mais devient très performant par la suite. Ne vous impatientez pas.
Premiers pas
Easycoding présente une interface comportant 5 zones
1 : Menu permettant la sélection du mode
Blocs
: mode permettant la saisie du programme par glisser/déposer des blocs.CODE
: mode permettant la consultation du code C++ généré en temps réel. Lecture seule.XML
: mode permettant la consultation du code XML généré automatiquement.
2 : Menu principal de gestion du projet
- copie du code C++ dans le presse-papier
- accès à des tutoraux vidéos (en français)
- vidage de la surface de travail et du code
- Lancer le programme (bascule dans Arduino IDE pour compilation et téléversement)
- chargement de modèles de code.
- sauvegarde du projet au format EasyCoding (XML)
- chargement d'un projet au format EasyCoding (XML)
3 : Menu d'accès aux blocs de programmation, positionnables par Glisser/Déposer
4 : Zone de travail.
5 : Menu d'affichage.
- Recentrer
- Zoomer +
- Zoomer -
- Corbeille (suppression de blocs par glisser/déposer)
Chargement du projet
- Téléchargez et décompressez ce fichier : ESP8266_Relais4CH.zip
- Validez par OK pour charger le fichier.
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
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
Ma_Cle_WPA
par la clé WPA de votre réseau Wifi
Adresse IP statique
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)
- 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 de la Led optionnelle
- LED_Link : remplacez
1
par0
si la Led n'est pas installée enD5
. La Led embarquée sera utilisée.
Sauvegarde et Transfert du programme sur le module
Cliquez sur pour sauvegarder votre projet.
Exportez votre code vers Arduino IDE :
Sur l'interface de Easycoding, cliquez sur le bouton d'exécution .
Validez par OK
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.
L'espace de travail
1 : Barre d'outils
2 : espace programmation
3 : console
4 : Sélection en cours (type de carte et port COM)
La barre d'outil en détail :
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 afin de vérifier le code.
Vérifiez les éventuelles erreurs dans la console.
Téléversement vers le module
- 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
Pour activer le relais 4 et désactiver le relais 3 sur le système nommé RelaisGCE
http://192.168.0.64:80/ON_RelaisGCE_4/OFF_RelaisGCE_3
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.
Cas d'une URL comprenant une requête incorrecte. Les instructions sont rappelées dans la page Html.
Cas d'une requête comportant une commande ON correcte
Cas d'une requête OFF correcte
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.
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.
En mode Administrateur sur le dashboard de l'IPX800, créez un widget de type HTML de hauteur 3 blocs.
Cliquez sur le bouton JAVASCRIPT et collez ce code :
var SVa="96";
var SVb="97";
var SVc="98";
var SVd="99";
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";
return `
<div class="indicator-light2 vout${SVa} voutta9${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}&Port=${portIP}&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}&Port=${portIP}&Message=/OFF_${moduleGCE}_1');" value="OFF Relais 1" title="${Desc1}">
</span>
<div class="indicator-light2 vout${SVb} voutta${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}&Port=${portIP}&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}&Port=${portIP}&Message=/OFF_${moduleGCE}_2');" value="OFF Relais 2" title="${Desc2}">
</span>
<div class="indicator-light2 vout${SVc} voutta${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}&Port=${portIP}&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}&Port=${portIP}&Message=/OFF_${moduleGCE}_3');" value="OFF Relais 3" title="${Desc3}">
</span>
<div class="indicator-light2 vout${SVd} voutta${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}&Port=${portIP}&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}&Port=${portIP}&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 à utiliser pour le retour d'état.
- renseignez l'adresse IP et le port Http du module GCE
- renseignez le Nom que vous avez attribué au module
- renseignez une courte description pour chaque relais
- Sauvegardez le Widget
- Sauvegardez l'IHM
voici le résultat (exemple avec les Relais 1 et 4 à l'état ON) :
La description des relais apparaît dans une info-bulle, au passage de la souris.