как отправить аргумент объектам ESP8266WebServer в функции

Вероятно, это простая вещь, однако я не могу придумать, как передать аргумент при вызове функции

ESP8266WebServer server ( 80 );

void toggleRelayOne() {
  char temp[400];
  String msg = "";
  if (relay1 == 0) {
    relay1 = 1;
    msg = "Light is turned on";
  }
  else {
    relay1 = 0;
    msg = "Light is turned off";
  }


  digitalWrite (5, relay1); //GPIO 5 // Реле 1
  snprintf ( temp, 400,
             "<html>\
  <head>\
    <meta http-equiv='refresh' content='5'/>\
    <title>NodeMCU DHT11 Sensor and Relay Board</title>\
    <meta http-equiv='refresh' content='0; url=../'>\
    </head>\
  <body>\
  %d .</body>\
  </html>"
             , 1);
  server.send ( 200, "text/html", temp );
}

void setup ( void ) {

  pinMode(10, OUTPUT);
  pinMode(5, OUTPUT);
  pinMode(4, OUTPUT);

  Serial.begin ( 9600 );
  WiFi.begin ( ssid, password );
  Serial.println ( "" );
  // Ожидаем соединения
  while ( WiFi.status() != WL_CONNECTED ) {
    delay ( 500 );
    Serial.print ( "." );
  }

  Serial.println ( "" );
  Serial.print ( "Connected to " );
  Serial.println ( ssid );
  Serial.print ( "IP address: " );
  Serial.println ( WiFi.localIP() );

  if ( MDNS.begin ( host ) ) {
    Serial.println ( "MDNS responder started" );
  }
  MDNS.addService("http", "tcp", 80);
  server.on ( "/", handleRoot );
  server.on("/relay1", toggleRelayOne);
  server.begin();
  Serial.println ( "HTTP server started" );
}

в приведенной выше функции, где я вызываю toggleRelayOne, используя server.on("/relay1", toggleRelayOne); я хочу иметь возможность передавать идентификатор реле, поэтому я можно использовать одну и ту же функцию для переключения нескольких реле.

, 👍2

Обсуждение

server.on( "/", handleRoot); почему его использовали??, @Guru Prasad Nayak

Когда пользователь пытается перейти к "/", я вызываю функцию handleRoot. Эта функция считывает данные с датчиков, подключенных к ESP826., @Ciasto piekarz


1 ответ


Лучший ответ:

2

Используйте server.arg() для передачи команд из Интернета в качестве параметров GET:

digitalWrite (5, реле1);

становится

digitalWrite (server.arg("pin").toInt(), реле1);

где URL-адрес имеет вид http://192.168.1.5/relay1?pin=15

Конечно, остальную часть вашего кода, вероятно, необходимо адаптировать для управления дополнительными состояниями, чтения/записи всего за один http-вызов и т. д.

,