Go Down

Topic: Uno R3 + ESP8266 + relais (Read 980 times) previous topic - next topic

robix62

May 06, 2015, 05:11 pm Last Edit: May 06, 2015, 08:56 pm by robix62
Bonjour,

je souhaite activer un relais via internet en utilisant une carte Uno R3, un module ESP8266 pour le wifi

pour le moment j'ai réussi à activer le relais via une carte ethernet, et à contrario la connexion à mon réseau via le module ESP8266 fonctionne aussi

j'ai donc besoin de mixer deux programmes, malheureusement j'ai des erreurs probablement à des fonctions mal placées ou autre je nsais pas.
pouvez vous y jeter un oeil svp ?

Merci d'avance

programme relais avec hébergement

Code: [Select]

#include <SPI.h>
#include <Ethernet.h>

const byte relayPinout = 2;                              // define relay pinout number

byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };     // set Arduino mac address (must be unique within the private LAN)
byte ip[] = { 192, 168, 0, 60 };                        // set Arduino LAN IP address
byte gateway[] = { 192, 168, 0, 1 };                     // set LAN gateway IP address
byte subnet[] = { 255, 255, 255, 0 };                    // set LAN subnet mask
EthernetServer server(8065);                             // set HTML server port
String readString ="";                                   // set readString
int outputStatus =0;                                     // set outputStatus
 
void setup(){
  pinMode(relayPinout, OUTPUT);                          // set pinout as output
  digitalWrite(relayPinout, HIGH);                       // set pinout to HIGH to disable the relay  (see note 2 for details)
  Ethernet.begin(mac, ip, gateway, subnet);              // initialize the Arduino ethernet device
  server.begin();                                        // start listening for clients
}                                                        // end of setup()
 
void loop(){
  EthernetClient client = server.available();            // create a client connection
  if (client) {
    while (client.connected()) {
      if (client.available()) {
        char c = client.read();
        if (readString.length() < 100) {                 // read char by char HTTP request
           readString += c;                              // store characters to string
        }
        if (c == '\n') {                                 // if HTTP request has ended
          if (readString.indexOf("?relayOn") >0) {       // check for on button clic
            digitalWrite(relayPinout, LOW);              // if true enable the relay (see note 2 for details)
            outputStatus = 1;
          }           
          else{
            if (readString.indexOf("?relayOff") >0) {    // check for off button clic
              digitalWrite(relayPinout, HIGH);           // if true disable the relay (see note 2 for details)
              outputStatus = 0;
            }
          }
          client.println("HTTP/1.1 200 OK");             // send new page
          client.println("Content-Type: text/html");
          client.println();
          client.println("<!DOCTYPE html>");
          client.println("<html>");
          client.println("<head>");
          client.println("<meta name='apple-mobile-web-app-capable' content='yes'>");
          client.println("<meta name='apple-mobile-web-app-status-bar-style' content='black-translucent'>");
          client.println("<style type='text/css'>");
          client.println("body {margin:40px 5px; text-align:center; font-family:'Trebuchet MS',Arial, Helvetica, sans-serif; }");
          client.println("h1 {font-size:1.6em; padding-bottom:25px; border-bottom:3px dotted gray; }");
          client.println("a {color:white; font-size:1.6em; font-weight:bold; text-decoration:none; padding:5px 10px; margin:15px; }");
          client.println("a.button1 {background-color:green;}");
          client.println("a.button2 {background-color:firebrick;}");
          client.println("a {display:inline-block; width:125px; border:2px solid black; }");
          client.println("a {border-radius:10px ; -o-border-radius:10px ; -webkit-border-radius:10px ; -moz-border-radius:10px ; }");
          client.println("a.button1:hover {background-color:limegreen} ");
          client.println("a.button2:hover {background-color:crimson} ");
          client.println("</style>");
          client.println("<title>WebRel</title>");
          client.println("</head>");
          client.println("<body>");
          client.print("<h1>IMPRIMANTE ACTUELLEMENT <br>");
          switch (outputStatus) {
            case 0:
              client.print("A L'ARRET");
              break;
            case 1:
              client.print("EN MARCHE");
              break;
          }   
          client.println("</h1>");
          client.println("<a href=\"/?relayOn\"\" class='button1'>MARCHE</a>");
          client.println("<a href=\"/?relayOff\"\" class='button2'>ARRET</a>");       
          client.println("</body>");
          client.println("</html>");
          delay(1);                                      // waiting for a while...
          client.stop();                                 // stop Web client
          readString="";                                 // clear string for next read
        }
      }
    }
  }
}                                                        // end of loop()


programme activation sans fil auto

Code: [Select]

    #include <SoftwareSerial.h>

    SoftwareSerial ESP8266(10, 11);

    String NomduReseauWifi = "NUMERICABLE-D522"; // Garder les guillements
    String MotDePasse      = "huhu"; // Garder les guillements

    /****************************************************************/
    /*                             INIT                             */
    /****************************************************************/
    void setup()
    {
      Serial.begin(9600);
      ESP8266.begin(9600); 
      initESP8266();
    }
    /****************************************************************/
    /*                        BOUCLE INFINIE                        */
    /****************************************************************/
    void loop()
    {
       while(ESP8266.available())
       {   
         Serial.println(ESP8266.readString());
       }   
    }
    /****************************************************************/
    /*                Fonction qui initialise l'ESP8266             */
    /****************************************************************/
    void initESP8266()
    { 
      Serial.println("**********************************************************"); 
      Serial.println("**************** DEBUT DE L'INITIALISATION ***************");
      Serial.println("**********************************************************"); 
      envoieAuESP8266("AT+RST");
      recoitDuESP8266(2000);
      Serial.println("**********************************************************");
      envoieAuESP8266("AT+CWMODE=3");
      recoitDuESP8266(5000);
      Serial.println("**********************************************************");
      envoieAuESP8266("AT+CWJAP=\""+ NomduReseauWifi + "\",\"" + MotDePasse +"\"");
      recoitDuESP8266(10000);
      Serial.println("**********************************************************");
      envoieAuESP8266("AT+CIFSR");
      recoitDuESP8266(1000);
      Serial.println("**********************************************************");
      envoieAuESP8266("AT+CIPMUX=1");   
      recoitDuESP8266(1000);
      Serial.println("**********************************************************");
      envoieAuESP8266("AT+CIPSERVER=1,80");
      recoitDuESP8266(1000);
      Serial.println("**********************************************************");
      Serial.println("***************** INITIALISATION TERMINEE ****************");
      Serial.println("**********************************************************");
      Serial.println(""); 
    }

    /****************************************************************/
    /*        Fonction qui envoie une commande à l'ESP8266          */
    /****************************************************************/
    void envoieAuESP8266(String commande)
    { 
      ESP8266.println(commande);
    }
    /****************************************************************/
    /*Fonction qui lit et affiche les messages envoyés par l'ESP8266*/
    /****************************************************************/
    void recoitDuESP8266(const int timeout)
    {
      String reponse = "";
      long int time = millis();
      while( (time+timeout) > millis())
      {
        while(ESP8266.available())
        {
          char c = ESP8266.read();
          reponse+=c;
        }
      }
      Serial.print(reponse);   
    }


robix62

#1
May 10, 2015, 02:54 pm Last Edit: May 10, 2015, 02:54 pm by robix62
j'ai avancé et modifié le code, j'ai donc ceci, aucunes erreur et connexion toujours ok au réseau

Code: [Select]

    #include <SoftwareSerial.h>
    #include <SPI.h>

    SoftwareSerial ESP8266(10, 11);

    String NomduReseauWifi = "NUMERICABLE-D522"; // Garder les guillements
    String MotDePasse      = "huhu"; // Garder les guillements
    const byte relayPinout = 2;

    /****************************************************************/
    /*                             INIT                             */
    /****************************************************************/
    void setup()
    {
      Serial.begin(9600);
      ESP8266.begin(9600); 
      initESP8266();
      pinMode(relayPinout, OUTPUT);                          // set pinout as output
      digitalWrite(relayPinout, HIGH);                       // set pinout to HIGH to disable the relay  (see note 2 for details)
    }
    /****************************************************************/
    /*                        BOUCLE INFINIE                        */
    /****************************************************************/
    void loop()
    {
       while(ESP8266.available())
       {   
         Serial.println(ESP8266.readString());
       }   
    }
    /****************************************************************/
    /*                Fonction qui initialise l'ESP8266             */
    /****************************************************************/
    void initESP8266()
    { 
      Serial.println("**********************************************************"); 
      Serial.println("**************** DEBUT DE L'INITIALISATION ***************");
      Serial.println("**********************************************************"); 
      envoieAuESP8266("AT+RST");
      recoitDuESP8266(2000);
      Serial.println("**********************************************************");
      envoieAuESP8266("AT+CWMODE=3");
      recoitDuESP8266(5000);
      Serial.println("**********************************************************");
      envoieAuESP8266("AT+CWJAP=\""+ NomduReseauWifi + "\",\"" + MotDePasse +"\"");
      recoitDuESP8266(10000);
      Serial.println("**********************************************************");
      envoieAuESP8266("AT+CIFSR");
      recoitDuESP8266(1000);
      Serial.println("**********************************************************");
      envoieAuESP8266("AT+CIPMUX=1");   
      recoitDuESP8266(1000);
      Serial.println("**********************************************************");
      envoieAuESP8266("AT+CIPSERVER=1,80");
      recoitDuESP8266(1000);
      Serial.println("**********************************************************");
      Serial.println("***************** INITIALISATION TERMINEE ****************");
      Serial.println("**********************************************************");
      Serial.println(""); 
    }

    /****************************************************************/
    /*        Fonction qui envoie une commande à l'ESP8266          */
    /****************************************************************/
    void envoieAuESP8266(String commande)
    { 
      ESP8266.println(commande);
    }
    /****************************************************************/
    /*Fonction qui lit et affiche les messages envoyés par l'ESP8266*/
    /****************************************************************/
    void recoitDuESP8266(const int timeout)
    {
      String reponse = "";
      long int time = millis();
      while( (time+timeout) > millis())
      {
        while(ESP8266.available())
        {
          char c = ESP8266.read();
          reponse+=c;
        }
      }
      Serial.print(reponse);   
    }



il me reste à incorporer ce bout de code mais je pense qu'il doit être modifié

Code: [Select]
void loop(){
  EthernetClient client = server.available();            // create a client connection
  if (client) {
    while (client.connected()) {
      if (client.available()) {
        char c = client.read();
        if (readString.length() < 100) {                 // read char by char HTTP request
           readString += c;                              // store characters to string
        }
        if (c == '\n') {                                 // if HTTP request has ended
          if (readString.indexOf("?relayOn") >0) {       // check for on button clic
            digitalWrite(relayPinout, LOW);              // if true enable the relay (see note 2 for details)
            outputStatus = 1;
          }           
          else{
            if (readString.indexOf("?relayOff") >0) {    // check for off button clic
              digitalWrite(relayPinout, HIGH);           // if true disable the relay (see note 2 for details)
              outputStatus = 0;
            }
          }
          client.println("HTTP/1.1 200 OK");             // send new page
          client.println("Content-Type: text/html");
          client.println();
          client.println("<!DOCTYPE html>");
          client.println("<html>");
          client.println("<head>");
          client.println("<meta name='apple-mobile-web-app-capable' content='yes'>");
          client.println("<meta name='apple-mobile-web-app-status-bar-style' content='black-translucent'>");
          client.println("<style type='text/css'>");
          client.println("body {margin:40px 5px; text-align:center; font-family:'Trebuchet MS',Arial, Helvetica, sans-serif; }");
          client.println("h1 {font-size:1.6em; padding-bottom:25px; border-bottom:3px dotted gray; }");
          client.println("a {color:white; font-size:1.6em; font-weight:bold; text-decoration:none; padding:5px 10px; margin:15px; }");
          client.println("a.button1 {background-color:green;}");
          client.println("a.button2 {background-color:firebrick;}");
          client.println("a {display:inline-block; width:125px; border:2px solid black; }");
          client.println("a {border-radius:10px ; -o-border-radius:10px ; -webkit-border-radius:10px ; -moz-border-radius:10px ; }");
          client.println("a.button1:hover {background-color:limegreen} ");
          client.println("a.button2:hover {background-color:crimson} ");
          client.println("</style>");
          client.println("<title>WebRel</title>");
          client.println("</head>");
          client.println("<body>");
          client.print("<h1>IMPRIMANTE ACTUELLEMENT <br>");
          switch (outputStatus) {
            case 0:
              client.print("A L'ARRET");
              break;
            case 1:
              client.print("EN MARCHE");
              break;
          }   
          client.println("</h1>");
          client.println("<a href=\"/?relayOn\"\" class='button1'>MARCHE</a>");
          client.println("<a href=\"/?relayOff\"\" class='button2'>ARRET</a>");       
          client.println("</body>");
          client.println("</html>");
          delay(1);                                      // waiting for a while...
          client.stop();                                 // stop Web client
          readString="";                                 // clear string for next read
        }
      }
    }
  }
}                                                        // end of loop()


pouvez vous m'aider svp ?

robix62

je remonte une dernière fois le topic....
j'ai ajouté le bout de programme restant sauf qu'en entrant l'adresse ip dans un navigateur j'ai rien à l'écran
je ne dois plus être très loin...


Code: [Select]
    #include <SoftwareSerial.h>
    #include <SPI.h>
    #include <WiFi.h>
 
    SoftwareSerial ESP8266(10, 11);

    String NomduReseauWifi = "NUMERICABLE-D522"; // Garder les guillements
    String MotDePasse      = "huhu"; // Garder les guillements
    const byte relayPinout = 2;
    String readString ="";                                   
    int outputStatus =0;                                   
    /****************************************************************/
    /*                             INIT                             */
    /****************************************************************/
    void setup()
    {
      Serial.begin(9600);
      ESP8266.begin(9600); 
      initESP8266();
      pinMode(relayPinout, OUTPUT);                         
      digitalWrite(relayPinout, HIGH);                       
    }
    /****************************************************************/
    /*                        BOUCLE INFINIE                        */
    /****************************************************************/
    void loop()
    {
       while(ESP8266.available())
       {   
         Serial.println(ESP8266.readString());
         
         WiFiClient client = ESP8266.available();           
  if (client) {
    while (client.connected()) {
      if (client.available()) {
        char c = client.read();
        if (readString.length() < 100) {                 
           readString += c;                             
        }
        if (c == '\n') {                                 
          if (readString.indexOf("?relayOn") >0) {       
            digitalWrite(relayPinout, LOW);             
            outputStatus = 1;
          }           
          else{
            if (readString.indexOf("?relayOff") >0) {   
              digitalWrite(relayPinout, HIGH);           
              outputStatus = 0;
            }
          }
          client.println(F("HTTP/1.1 200 OK"));             
          client.println(F("Content-Type: text/html"));
          client.println();
          client.println(F("<!DOCTYPE html>"));
          client.println(F("<html>"));
          client.println(F("<head>"));
          client.println(F("<meta name='apple-mobile-web-app-capable' content='yes'>"));
          client.println(F("<meta name='apple-mobile-web-app-status-bar-style' content='black-translucent'>"));
          client.println(F("<style type='text/css'>"));
          client.println(F("body {margin:40px 5px; text-align:center; font-family:'Trebuchet MS',Arial, Helvetica, sans-serif; }"));
          client.println(F("h1 {font-size:1.6em; padding-bottom:25px; border-bottom:3px dotted gray; }"));
          client.println(F("a {color:white; font-size:1.6em; font-weight:bold; text-decoration:none; padding:5px 10px; margin:15px; }"));
          client.println(F("a.button1 {background-color:green;}"));
          client.println(F("a.button2 {background-color:firebrick;}"));
          client.println(F("a {display:inline-block; width:125px; border:2px solid black; }"));
          client.println(F("a {border-radius:10px ; -o-border-radius:10px ; -webkit-border-radius:10px ; -moz-border-radius:10px ; }"));
          client.println(F("a.button1:hover {background-color:limegreen} "));
          client.println(F("a.button2:hover {background-color:crimson} "));
          client.println(F("</style>"));
          client.println(F("<title>WebRel</title>"));
          client.println(F("</head>"));
          client.println(F("<body>"));
          client.print(F("<h1>IMPRIMANTE ACTUELLEMENT <br>"));
          switch (outputStatus) {
            case 0:
              client.print("A L'ARRET");
              break;
            case 1:
              client.print("EN MARCHE");
              break;
          }   
          client.println("</h1>");
          client.println("<a href=\"/?relayOn\"\" class='button1'>MARCHE</a>");
          client.println("<a href=\"/?relayOff\"\" class='button2'>ARRET</a>");       
          client.println("</body>");
          client.println("</html>");
          delay(1);                                     
          client.stop();                                 
          readString="";                                 
        }
      }
    }
  }
}                     
       }   


                                   
    /****************************************************************/
    /*                Fonction qui initialise l'ESP8266             */
    /****************************************************************/
    void initESP8266()
    { 
      Serial.println(F("**********************************************************")); 
      Serial.println(F("**************** DEBUT DE L'INITIALISATION ***************"));
      Serial.println(F("**********************************************************")); 
      envoieAuESP8266("AT+RST");
      recoitDuESP8266(2000);
      Serial.println(F("**********************************************************"));
      envoieAuESP8266("AT+CWMODE=3");
      recoitDuESP8266(5000);
      Serial.println(F("**********************************************************"));
      envoieAuESP8266("AT+CWJAP=\""+ NomduReseauWifi + "\",\"" + MotDePasse +"\"");
      recoitDuESP8266(10000);
      Serial.println(F("**********************************************************"));
      envoieAuESP8266("AT+CIFSR");
      recoitDuESP8266(1000);
      Serial.println(F("**********************************************************"));
      envoieAuESP8266("AT+CIPMUX=1");   
      recoitDuESP8266(1000);
      Serial.println(F("**********************************************************"));
      envoieAuESP8266("AT+CIPSERVER=1,80");
      recoitDuESP8266(1000);
      Serial.println(F("**********************************************************"));
      Serial.println(F("***************** INITIALISATION TERMINEE ****************"));
      Serial.println(F("**********************************************************"));
      Serial.println(""); 
    }

    /****************************************************************/
    /*        Fonction qui envoie une commande à l'ESP8266          */
    /****************************************************************/
    void envoieAuESP8266(String commande)
    { 
      ESP8266.println(commande);
    }
    /****************************************************************/
    /*Fonction qui lit et affiche les messages envoyés par l'ESP8266*/
    /****************************************************************/
    void recoitDuESP8266(const int timeout)
    {
      String reponse = "";
      long int time = millis();
      while( (time+timeout) > millis())
      {
        while(ESP8266.available())
        {
          char c = ESP8266.read();
          reponse+=c;
        }
      }
      Serial.print(reponse);   
    }


Go Up