ESP8266-01s Input GPIO2

Hola, estoy queriendo poner un el gpio2 como input, y mediante un rele 220vac, pasarle del pin 3v, al pin gpio2 que esta como input, pero no me cambia de valor nunca, siempre al hacer digitalRead(2), siempre en 1, probe haciendo puente con gpio0 con el gpio2 y ahi si funciona... Alguien sabe que puede ser?

No trabajara con GND para input?= no lo quiero quemar.

Con gnd funciona, pero lei esto:

GPIO Function State Restrictions
0 Boot mode select 3.3V No Hi-Z
1 TX0 - Not usable during Serial transmission
2 Boot mode select
TX1 3.3V (boot only) Don’t connect to ground at boot time
Sends debug data at boot time

Osea no puede tener gnd el gpio2 en el arranque supongo que se quema...

Bueno , tmb noto que tengo rebotes, voy a probar a usar la libreria Bounce2.

Osea no puede tener gnd el gpio2 en el arranque supongo que se quema...

Supones mal.
El GPIO2 se usa para seleccionar el modo de booteo entonces no es adecuado para lecturas inmediatas pero superado el tiempo de booteo, si lo puedes usar.
Cual es el código que usas?

#include <Bounce2.h>

//Usando Gestor de tarjetas esp version 2.0
#include <ESP8266WiFi.h>
#include <WiFiClient.h>
#include <ESP8266WebServer.h>
#include <ESP8266mDNS.h>

Bounce debouncer = Bounce();


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

ESP8266WebServer server(80);

IPAddress ip(192, 168, 1, 12);
IPAddress myDns(192, 168, 1, 1);
IPAddress gateway(192, 168, 1, 1);
IPAddress subnet(255, 255, 255, 0);

const int led = 0;
const int led2 = 2;

void handleRoot() {
  //digitalWrite(led, 1);
  server.send(200, "text/plain", "hello from esp8266!");
  //digitalWrite(led, 0);
}

void handleNotFound(){
  //digitalWrite(led, 1);
  String message = "File Not Found\n\n";
  message += "URI: ";
  message += server.uri();
  message += "\nMethod: ";
  message += (server.method() == HTTP_GET)?"GET":"POST";
  message += "\nArguments: ";
  message += server.args();
  message += "\n";
  for (uint8_t i=0; i<server.args(); i++){
    message += " " + server.argName(i) + ": " + server.arg(i) + "\n";
  }
  server.send(404, "text/plain", message);
  //digitalWrite(led, 0);
}

void setup(void){

  debouncer.attach(led2, INPUT_PULLUP);
  debouncer.interval(100); // interval in ms
  
  pinMode(led, OUTPUT);

  Serial.begin(115200);
  WiFi.mode(WIFI_STA);
  WiFi.config(ip, myDns, gateway, subnet);
  WiFi.begin(ssid, password);
  
  Serial.println("");

  // Wait for connection
  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());
  Serial.println(WiFi.macAddress());
  WiFi.printDiag(Serial);

  if (MDNS.begin("esp8266")) {
    Serial.println("MDNS responder started");
  }

  server.on("/", handleRoot);

  server.on("/inline", [](){
    server.send(200, "text/plain", "this works as well");
  });
  
  server.on("/led", [](){
    server.send(200, "text/plain", String(digitalRead(led)));
    digitalWrite(led, !digitalRead(led));
    Serial.println(digitalRead(led));
  });

  server.on("/estado", [](){
    server.send(200, "text/plain", String(debouncer.read()));
  });
  
  server.onNotFound(handleNotFound);

  server.begin();
  Serial.println("HTTP server started");
}

void loop(void){
  debouncer.update();
  server.handleClient();
  //Serial.println(debouncer.read());
}