'HTTP_handleRoot' was not declared in this scope

Тема в разделе "Arduino & Shields", создана пользователем yden, 2 дек 2016.

  1. yden

    yden Гик

    Здравствуйте.
    Подскажите пожалуйста. Использую пример работы с ESP8266 :

    .
    Залил скетч из примера, сменил параметры wifi, снова залил - модуль завелся, страница загружается. Ничего не меняю в коде. Пробую опять залить код, не заливается, ошибка:
    WiFi_ring.ino:39: error: 'HTTP_handleRoot' was not declared in this scope
    Ничего не понимаю. В первые разы же залился без проблем. Что я делаю неверно?

    Код (C++):

    #include <ESP8266WiFi.h>
    #include <ESP8266mDNS.h>
    #include <ESP8266WebServer.h>
    #include <WiFiClient.h>



    // GPIO, куда подключено реле
    int rele1 = 14;
    int rele2 = 16;
    bool PowerRele1  = false;
    bool PowerRele2  = false;


    // Имя хоста
    const char* host = "smart-home";

    // параметры вашей WiFi сети. (Те что всегда вводите на тел. и планшете)
    const char* ssid = "***";
    const char* password = "***";


    ESP8266WebServer server(80);

    void setup() {
      pinMode(rele1 , OUTPUT);
      digitalWrite(rele1 , PowerRele1);
      pinMode(rele2 , OUTPUT);
      digitalWrite(rele2 , PowerRele2);

    // Подлючение к WiFi
      WiFi.mode(WIFI_AP_STA);
      WiFi.begin(ssid, password);
      if(WiFi.waitForConnectResult() == WL_CONNECTED){

    // Запускаем сервер
         MDNS.begin(host);
         server.on ( "/", HTTP_handleRoot );
         server.onNotFound ( HTTP_handleRoot );
         server.begin();    
      }
    }
    void loop() {
      server.handleClient();
       delay(50);
    }


    void HTTP_handleRoot(void) {
      bool statrele1 = false;
      bool statrele2 = false;

    // Реле 1
      if( server.hasArg("statrele1") ){
         if( strncmp(server.arg("statrele1").c_str(),"1",1) == 0 )
         statrele1 = true;
      }
      else {
         statrele1 = PowerRele1;
      }

    // Реле 2
        if( server.hasArg("statrele2") ){
         if( strncmp(server.arg("statrele2").c_str(),"1",1) == 0 )
         statrele2 = true;
      }
      else {
         statrele2 = PowerRele2;
      }

    // Формируем ШТМЛ страницу
      String out = "";

      out =
    "<html>\
     <head>\
       <meta charset=\"utf-8\" />\
       <title>iRing</title>\
       <style>\
         body { background-color: #cccccc; font-family: Arial, Helvetica, Sans-Serif; Color: #000088; }\
       </style>\
     </head>\
     <body>\
    "
    ;

    // Для реле 1
      if( statrele1 ){
          out+="\
       <hr width=100 size=30 align=left color=red><h2><a href=\"/?statrele1=0\">OFF</a></h2>\
       "
    ;
      }
      else {
          out+="\
       <hr width=100 size=30 align=left color=green><h2><a href=\"/?statrele1=1\">ON</a></h2>\
       "
    ;          
      }

      // Для реле 2
      if( statrele2 ){
          out+="\
       <hr width=100 size=30 align=left color=red><h2><a href=\"/?statrele2=0\">OFF</a></h2>\
       "
    ;
      }
      else {
          out+="\
       <hr width=100 size=30 align=left color=green><h2><a href=\"/?statrele2=1\">ON</a></h2>\
       "
    ;          
      }

       // Общее
       out+= "\
     </body>\
    </html>"
    ;
       server.send ( 200, "text/html", out );

       
          // Для реле 1
       if( statrele1 != PowerRele1 ){
          PowerRele1 = statrele1;
          digitalWrite(rele1 , PowerRele1);
       
       }
             // Для реле 2
        if( statrele2 != PowerRele2 ){
          PowerRele2 = statrele2;
          digitalWrite(rele2 , PowerRele2);
       
       }
     
             // Скобку оставить!
    }
    спасибо
     
    Последнее редактирование: 2 дек 2016
  2. rkit

    rkit Гуру

    Функции надо декларировать до вызова. Иначе компилятор не знает, что вы там вызываете.
     
  3. yden

    yden Гик

    Куда ее впихнуть то :)
     
  4. daiver

    daiver Нерд

    Код (C++):
    void HTTP_handleRoot(void){
    Зачем в скобках void? В моих рабочих примерах пусто...
     
  5. yden

    yden Гик

    Благодарю.