Node Mcu v2+HTML

Hola linda comunidad de Arduinolovers

Bueno el motivo por el cual inicie este post, es para pedirles un poco de orientación con respecto a un proyecto que estoy realizando y tengo algunos problemas.

Mi proyecto consiste en el control de un relé por medio de un servidor web montado en el Node MCU con algo de HTML y a su vez la lectura de una entrada digital que dependiendo del estado lógico imprima lo que desee, en este caso con un “1” Alarma Activada Intruso" o si es “0” simplemente “Perímetro Cerrado” en el cual lo describo como una alarma que mas tarde agregare al HTML.

Ahora bien no logro que la entrada que asigne lea e imprima los cambios de niveles que le entrego.Solo imprime alarmar Activada…
No se si es un error de código o no estoy entregando el voltaje para que el equipo interprete el nivel alto y bajo… se que son 5v aproximadamente.

Dejo adjunto el código adjunto y desde ya agradeciendo sus comentarios.

// Cargando la libreria de  Wi-Fi.
#include <ESP8266WiFi.h>

const int EstadoAlarma = 5;//Asignando El pin GPIO 5 

int temp = 0;//Variable temporal para leer el estado la alarma

// Nuestra SSID y Contraseña del Wifi.
const char* ssid     = "WIFI_GEEK";
const char* password = "1451827342";

// Setiamos el puerto en 80.
WiFiServer server(80);

// Variable para almacenar la solicitud HTTP.
String header;

// Variables auxiliares para almacenar el estado de salida actual.

String output4State = "off";

// Asignar variables de salida a pines GPIO

const int output4 = 4;

void setup() {

  pinMode(EstadoAlarma, INPUT); // declaro GPI0 5 Como entrada.

  Serial.begin(115200);
  // Inicializar las variables de salida como salidas.
  pinMode(output4, OUTPUT);
  // Ajuste las salidas a estado bajo
  digitalWrite(output4, LOW);

  // Conéctando a la red Wi-Fi con SSID y contraseña.
  Serial.print("Connecting to ");
  Serial.println(ssid);
  WiFi.begin(ssid, password);
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
  // Imprime la dirección IP local y arranque el servidor web
  Serial.println("");
  Serial.println("WiFi connected.");
  Serial.println("IP address: ");
  Serial.println(WiFi.localIP());
  server.begin();
}

void loop()
{

temp = digitalRead(EstadoAlarma);

if (temp == HIGH) 
       {
  
        Serial.println("Alarma Activada");
        delay(1000);
       }
else
       {
        Serial.println("Alarma No Activa");
        delay(1000);
       }

  WiFiClient client = server.available();   // Escucha a los clientes entrantes.

  if (client) {                             // Si un nuevo cliente se conecta,
    Serial.println("New Client.");          // Imprimir un mensaje en el puerto serie
    String currentLine = "";                // Hacer una cadena para contener los datos entrantes del cliente
    while (client.connected()) {            // Bucle mientras el cliente está conectado
      if (client.available()) {             // Si hay bytes para leer desde el cliente,
        char c = client.read();             // leer un byte, entonces
        Serial.write(c);                    // imprímelo en el monitor serial
        header += c;
        if (c == '\n') {                    // Si el byte es un caracter de nueva linea
          // Si la línea actual está en blanco, tienes dos caracteres de nueva línea seguidos.
          // Ese es el final de la solicitud HTTP del cliente, así que envíe una respuesta:
          if (currentLine.length() == 0) {
            // Los encabezados HTTP siempre comienzan con un código de respuesta (por ejemplo, HTTP / 1.1 200 OK)
            // y un tipo de contenido para que el cliente sepa lo que viene, luego una línea en blanco:
            client.println("HTTP/1.1 200 OK");
            client.println("Content-type:text/html");
            client.println("Connection: close");
            client.println();
            
            // Enciende y apaga el GPIO 4
            if (header.indexOf("GET /4/on") >= 0) 
            {
              Serial.println("GPIO 4 on");
              output4State = "on";
              digitalWrite(output4, HIGH);
            } 
            else if (header.indexOf("GET /4/off") >= 0) 
            {
              Serial.println("GPIO 4 off");
              output4State = "off";
              digitalWrite(output4, LOW);
            }
            
            // Mostrar la página web HTML
            client.println("<!DOCTYPE html><html>");
            client.println("<head><meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">");
            client.println("<link rel=\"icon\" href=\"data:,\">");
            // CSS para el estilo de los botones de encendido / apagado 
            // Siéntase libre de cambiar los atributos de color de fondo y tamaño de fuente para adaptarse a sus preferencias
            client.println("<style>html { font-family: Helvetica; display: inline-block; margin: 0px auto; text-align: center;}");
            client.println(".button { background-color: #195B6A; border: none; color: white; padding: 16px 40px;");
            client.println("text-decoration: none; font-size: 30px; margin: 2px; cursor: pointer;}");
            client.println(".button2 {background-color: #77878A;}</style></head>");
            
            // Encabezado de página web
            client.println("<body><h1>Cierre Perimetral</h1>");
               
            // Muestra el estado actual y los botones ON / OFF para GPIO 4  
            client.println("<p>Estado Del Cierre Perimetral  " + output4State + "</p>");
            // Si el output4State está apagado, muestra el botón ON       
            if (output4State=="off") {
              client.println("<p><a href=\"/4/on\"><button class=\"button\">ON</button></a></p>");
            } else {
              client.println("<p><a href=\"/4/off\"><button class=\"button button2\">OFF</button></a></p>");
            }
            client.println("</body></html>");
            
            // La respuesta HTTP termina con otra línea en blanco.
            client.println();
            // Salir del bucle while
            break;
          } else { // Si tienes una nueva línea, entonces borra currentLine
            currentLine = "";
          }
        } else if (c != '\r') {  // Si tienes algo más que un carácter de retorno de carro
          currentLine += c;      // añadirlo al final de la línea actual
        }
      }
    }
    // Borrar la variable del encabezado
    header = "";
    // Cierra la conexion.
    client.stop();
    Serial.println("Client disconnected.");
    Serial.println("");
  }
}

Creo que tu problema está en el hardware, he comprobado el código con un nodeMCU y funciona perfectamente (al menos la alarma), así que revisa bien cómo estas conectado esto.

La alarma que estas usando qué es? un botón? un buzzer? Debes brindar más información para poder ayudarte.

@Jhony9625 Lo que necesito que la entrada que asigne como la responsable de leer los estados lógicos, sea capaz de detectar dichos niveles y cambiar el estado de impresión, es decir 0= Perímetro cerrado ó "1" intruso alarma activada", lo que me esta pasando es que cuando le mando un pulso o nivel alto enciende la alarma pero sigue imprimiendo intruso alarma activada" cuando ya deje de enviar el pulso...

Ahora cuando le mando un pulso o nivel bajo imprime Perímetro Cerrado,si lo vemos de esa forma el código funciona, pero lo que yo necesito que sea todo automático

No se si me explico?

No se si es un error de código o no estoy entregando el voltaje para que el equipo interprete el nivel alto y bajo... se que son 5v aproximadamente.

Un ESP entrega 3.3V en sus pines de salida, de modo que nunca llegará a 5V. Sin embargo 3.3V son suficientes para ser reconocidos como nivel lógico ALTO en un dispositivo que quiera leer dicha salida.

Te recomiendo que olvides todo lo que esas haciendo y trabajes con un código simple, leyendo una entrada digital.
Comprueba eso y cuando lo domines vuelve a este código.