ESP8266 no arranca correctamente si el pin GPIO está conectado

0

Estoy usando una placa ESP8266 para controlar un relé a través de un transistor como este:

simular este circuito : esquema creado usando CircuitLab

Sin embargo, cuando arranco el ESP8266 con el pin GPIO0 conectado como se muestra, el LED azul está encendido constantemente, como si estuviera en un reinicio constante o en un modo de flash. Si conecto el GPIO una vez que el arranque ha terminado, funciona bien. ¿Alguien sabe una manera de evitar este problema?

Estoy utilizando el IDE de Arduino para programar la placa con este código:

#include <ESP8266WiFi.h>

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

int ledPin = 2; // GPIO2 of ESP8266
WiFiServer server(80);//Service Port

void setup() {
  Serial.begin(115200);
  delay(10);

  pinMode(ledPin, OUTPUT);
  digitalWrite(ledPin, LOW);

  // Connect to WiFi network
  Serial.println();
  Serial.println();
  Serial.print("Connecting to ");
  Serial.println(ssid);

  WiFi.begin(ssid, password);

  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
  Serial.println("");
  Serial.println("WiFi connected");

  // Start the server
  server.begin();
  Serial.println("Server started");

  // Print the IP address
  Serial.print("Use this URL to connect: ");
  Serial.print("http://");
  Serial.print(WiFi.localIP());
  Serial.println("/");
}

void loop() {
  // Check if a client has connected
  WiFiClient client = server.available();
  if (!client) {
    return;
  }

  // Wait until the client sends some data
  Serial.println("new client");
  while(!client.available()){
    delay(1);
  }

  // Read the first line of the request
  String request = client.readStringUntil('\r');
  Serial.println(request);
  client.flush();

  // Match the request

  int value = LOW;
  if (request.indexOf("/LED=ON") != -1) {
    digitalWrite(ledPin, HIGH);
    value = HIGH;
  } 
  if (request.indexOf("/LED=OFF") != -1){
    digitalWrite(ledPin, LOW);
    value = LOW;
  }

  //Set ledPin according to the request
  //digitalWrite(ledPin, value);

  // Return the response
  client.println("HTTP/1.1 200 OK");
  client.println("Content-Type: text/html");
  client.println(""); //  do not forget this one
  client.println("<!DOCTYPE HTML>");
  client.println("<html>");

  client.print("Led pin is now: ");

  if(value == HIGH) {
    client.print("On");  
  } else {
    client.print("Off");
  }
  client.println("<br><br>");
  client.println("Click <a href=\"/LED=ON\">here</a> turn the LED on pin 2 ON<br>");
  client.println("Click <a href=\"/LED=OFF\">here turn the LED on pin 2 OFF<br>");
  client.println("</html>");

  delay(1);
  Serial.println("Client disconnected");
  Serial.println("");
}

Gracias.

    
pregunta Ben Stobbs

2 respuestas

2

Lea esto .

Su resistencia 3k es suficiente para reducir GPIO0 durante el encendido y es probable que el ESP8266 entre en modo de carga en serie.

Use un FET para controlar su relé si desea usar GPIO0 ..... y coloque un diodo a través de la bobina.

    
respondido por el Jack Creasey
0

Lo primero que veo es que enciendes el led incorporado en setup ()

pinMode (ledPin, SALIDA); digitalWrite (ledPin, LOW); < --- Esto enciende el LED.

Además, no se muestra en el diagrama, pero debe jalar GPIO0, con una resistencia de pull-up, posiblemente 20 kOhm. No elegiría algo más pequeño, ya que activaría el transistor en el arranque (a menos que no sea un problema para usted).

Espero que esto ayude!

    
respondido por el Horacio75

Lea otras preguntas en las etiquetas