Domotique DIY – Partie 7 – Interrupteur intelligent Wifi

prises et interrupteurs esp8266Apres l’utilisation de protocole 433 MHz avec les prises télécommandées (voir mon article Domotique DIY – Partie 3 – Hack des prises télécommandées) nous allons agrandir notre système #DIY avec les interrupteurs / Switch Wifi.

Cahier des charges:

Je voudrais commander facilement via mon système #Domotoque #DIY les différentes prises et interrupteurs de ma maison en utilisant mon réseau Wifi domestique et ma Box Domotique DIY. Il doit être facilement adaptable a tous les interrupteur , prise et lampes.

Matériels

  • Relais 5v / 220V
  • ESP8266 – 01
  • Deux résistances (47k et 1k)
  • Transistor NPN
  • un peu de courage

Branchement

Branchement_switch_esp8266

esp8266_switch

Programmation ESP8266

Il nous reste de programmer notre ESP et à l’intégrer notre système a nos interrupteurs et prises que nous désirons de domotiser. N’oublier pas de brancher le GPIO 0 à la masse avant d’envoyer votre croquis

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
/*
 *  This sketch demonstrates how to set up a simple HTTP-like server.
 *  The server will set a GPIO pin depending on the request
 *    http://server_ip/gpio/0 will set the GPIO2 low,
 *    http://server_ip/gpio/1 will set the GPIO2 high
 *  server_ip is the IP address of the ESP8266 module, will be 
 *  printed to Serial when the module is connected.
 */
 
#include <ESP8266WiFi.h>
 
const char* ssid = "login";
const char* password = "MotDePasse";
 
// Create an instance of the server
// specify the port to listen on as an argument
WiFiServer server(80);
 
void setup() {
  Serial.begin(115200);
  delay(10);
 
  // prepare GPIO2
  pinMode(2, OUTPUT);
  digitalWrite(2, 0);
  
  // Connect to WiFi network
  Serial.println();
  Serial.println();
  Serial.print("Connecting to ");
  Serial.println(ssid);
  
  WiFi.begin(ssid, password);
  
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
  Serial.println("");
  Serial.println("WiFi connected");
  
  // Start the server
  server.begin();
  Serial.println("Server started");
 
  // Print the IP address
  Serial.println(WiFi.localIP());
}
 
void loop() {
  // Check if a client has connected
  WiFiClient client = server.available();
  if (!client) {
    return;
  }
  
  // Wait until the client sends some data
  Serial.println("new client");
  while(!client.available()){
    delay(1);
  }
  
  // Read the first line of the request
  String req = client.readStringUntil('\r');
  Serial.println(req);
  client.flush();
  
  // Match the request
  int val;
  if (req.indexOf("/gpio/0") != -1)
    val = 0;
  else if (req.indexOf("/gpio/1") != -1)
    val = 1;
  else {
    Serial.println("invalid request");
    client.stop();
    return;
  }
 
  // Set GPIO2 according to the request
  digitalWrite(2, val);
  
  client.flush();
 
  // Prepare the response
  String s = "HTTP/1.1 200 OK\r\nContent-Type: text/html\r\n\r\n<!DOCTYPE HTML>\r\n<html>\r\nGPIO is now ";
  s += (val)?"high":"low";
  s += "</html>\n";
 
  // Send the response to the client
  client.print(s);
  delay(1);
  Serial.println("Client disonnected");
 
  // The client will actually be disconnected 
  // when the function returns and 'client' object is detroyed
}
/*
 *  This sketch demonstrates how to set up a simple HTTP-like server.
 *  The server will set a GPIO pin depending on the request
 *    http://server_ip/gpio/0 will set the GPIO2 low,
 *    http://server_ip/gpio/1 will set the GPIO2 high
 *  server_ip is the IP address of the ESP8266 module, will be 
 *  printed to Serial when the module is connected.
 */

#include <ESP8266WiFi.h>

const char* ssid = "login";
const char* password = "MotDePasse";

// Create an instance of the server
// specify the port to listen on as an argument
WiFiServer server(80);

void setup() {
  Serial.begin(115200);
  delay(10);

  // prepare GPIO2
  pinMode(2, OUTPUT);
  digitalWrite(2, 0);
  
  // Connect to WiFi network
  Serial.println();
  Serial.println();
  Serial.print("Connecting to ");
  Serial.println(ssid);
  
  WiFi.begin(ssid, password);
  
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
  Serial.println("");
  Serial.println("WiFi connected");
  
  // Start the server
  server.begin();
  Serial.println("Server started");

  // Print the IP address
  Serial.println(WiFi.localIP());
}

void loop() {
  // Check if a client has connected
  WiFiClient client = server.available();
  if (!client) {
    return;
  }
  
  // Wait until the client sends some data
  Serial.println("new client");
  while(!client.available()){
    delay(1);
  }
  
  // Read the first line of the request
  String req = client.readStringUntil('\r');
  Serial.println(req);
  client.flush();
  
  // Match the request
  int val;
  if (req.indexOf("/gpio/0") != -1)
    val = 0;
  else if (req.indexOf("/gpio/1") != -1)
    val = 1;
  else {
    Serial.println("invalid request");
    client.stop();
    return;
  }

  // Set GPIO2 according to the request
  digitalWrite(2, val);
  
  client.flush();

  // Prepare the response
  String s = "HTTP/1.1 200 OK\r\nContent-Type: text/html\r\n\r\n<!DOCTYPE HTML>\r\n<html>\r\nGPIO is now ";
  s += (val)?"high":"low";
  s += "</html>\n";

  // Send the response to the client
  client.print(s);
  delay(1);
  Serial.println("Client disonnected");

  // The client will actually be disconnected 
  // when the function returns and 'client' object is detroyed
}

Utilisation

Notre systeme et operationel pour commander notre interrupteur ou prise il suffit d’envoyer la commande http://server_ip/gpio/0 pour etindre et http://server_ip/gpio/1 pour allumer.

Intégration

HC2 Fibaro

  • créer un nouveau module virtuel
  • insérer deux boutons ON et OFF
  • coller le code LUA suivant
1
2
3
4
5
6
7
8
--[[
%% properties
%% globals
--]]
 
-- Bouton OFF
local http = net.HTTPClient();
http:request("http://IP_ESP8266/gpio/0");
--[[
%% properties
%% globals
--]]

-- Bouton OFF
local http = net.HTTPClient();
http:request("http://IP_ESP8266/gpio/0");
1
2
3
4
5
6
7
8
--[[
%% properties
%% globals
--]]
 
-- Bouton ON
local http = net.HTTPClient();
http:request("http://IP_ESP8266/gpio/1");
--[[
%% properties
%% globals
--]]

-- Bouton ON
local http = net.HTTPClient();
http:request("http://IP_ESP8266/gpio/1");

Jeedom

 

  • Plugin > Programmation > Script
  • Ajouter > Nom de l’équipement > D’accord
  • Commandes > Nom > On
  • Commandes > Type script > HTTP
  • Commandes > Type > Action
  • Commandes > Requête > IP_ESP8266/gpio/1
  • Commandes > Nom > Off
  • Commandes > Type script > HTTP
  • Commandes > Type > Action
  • Commandes > Requête > IP_ESP8266/gpio/0

Si vous avez des questions n’hésitez pas de les poser ici 🙂

 

4 réflexions au sujet de « Domotique DIY – Partie 7 – Interrupteur intelligent Wifi »

  1. Ping : Les actualités de la semaine du 10/12 au 17/12

  2. Bonjour, bon article, mais je me pose une question : Comment rentrer tout ça dans ma boite d’encastrement ? Une photo ne serait pas de trop. Merci et bonne continuation

  3. Bonjour

    Très interessant mais à partir de « Intégration », on ne comprend plus ce qu’on doit faire ?

    Vous proposez apparement un code LUA mais on ne peux injecter un code LUA dans l’esp à partir du moment où on a travaillé avec l’IDE arduino il me semble !

    • Bonjour @harold,
      La partie intégration comporte 2 sous parties.
      un exemple d’intégration dans la box domotique Home Center 2 (HC2) de Fibaro qui se programme en LUA, d’ou le code réservé pour cette Box et non pour l’ ESP.
      et un deuxième exemple d’intégration dans la Box domotique Jeedom

      Vous pouvez également commander l’interrupteur avec un simple navigateur internet (IE, Chrom, FF, Opera…) avec une simple requête HTTP:
      il suffit d’envoyer
      http://server_ip/gpio/0 pour etindre
      et
      http://server_ip/gpio/1 pour allumer.

      les possibilité sont grande.
      Hésitez pas de publier votre cas ici.

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *