ESP-01 arranca con GPIOs HIGH

0

Estoy tratando de implementar un "pulsador de botones" con algunos transistores controlados por un módulo ESP-01, para presionar los botones de un control remoto. Tengo un problema en el que si los GPIO (estoy usando 0, 2 y 3) están conectados a la base del transistor (a través de una resistencia de 1 k) cuando aplico energía, el ESP no se iniciará y los transistores (2n2222) están en el estado on. La luz roja se enciende, la luz azul parpadea brevemente, pero los LED con los que estoy probando los transistores están encendidos y ESP nunca comienza a transmitir su red. Si desconecto los pines GPIO 0, 2 y 3, enciendo el ESP, luego los reconecto, entonces todo funciona bien hasta que se reinicie. Aquí hay una parte del circuito, el real tiene 3 transistores, pero todos están configurados de la misma manera.

simular este circuito : esquema creado usando CircuitLab

Y aquí está mi código:

#include <ESP8266WiFi.h>
#include <DNSServer.h>
#include <ESP8266WebServer.h>

const char *ssid = "RemoteControl";
const char *password = "********";
const int button1 = 0;
const int button2 = 2;
const int button3 = 3;

const byte DNS_PORT = 53;
IPAddress apIP(192, 168, 1, 1);
DNSServer dnsServer;
ESP8266WebServer webServer(80);

String webpage = "<!DOCTYPE html><html><head><title>Remote Control</title><meta name='mobile-web-app-capable' content='yes' /><meta name='viewport' content='width=device-width' /><script type='text/javascript'>var eventLocked=false;function handleEvent(button){if(eventLocked||button>3){return;}var params='b='+button;var req=new XMLHttpRequest();req.open('POST','?'+params,true);req.send();eventLocked=true;req.onreadystatechange=function(){if(req.readyState==4){eventLocked=false;}}}</script></head><body style='margin: 0px; padding: 0px;'><button onclick='handleEvent(1)' style='width:100%;'><h1>1</h1></button><br><br><button onclick='handleEvent(2)' style='width:100%;'><h1>2</h1></button><br><br><button onclick='handleEvent(3)' style='width:100%;'><h1>3</h1></button></body></html>";

void handleRoot() {
  String button = webServer.arg(0);

  switch(button.toInt()) {
    case 0:
      // initialize webpage
      digitalWrite(button1, LOW);
      digitalWrite(button2, LOW);
      digitalWrite(button3, LOW);
      break;
    case 1:
      digitalWrite(button1, HIGH);
      delay(250);
      digitalWrite(button1, LOW);
      break;
    case 2:
      digitalWrite(button2, HIGH);
      delay(250);
      digitalWrite(button2, LOW);
      break;
    case 3:
      digitalWrite(button3, HIGH);
      delay(250);
      digitalWrite(button3, LOW);
      break;
  }

  webServer.send(200, "text/html", webpage);
}

void setup() {
  pinMode(button1, OUTPUT);
  pinMode(button2, OUTPUT);
  pinMode(button3, OUTPUT);

  digitalWrite(button1, LOW);
  digitalWrite(button2, LOW);
  digitalWrite(button3, LOW);

  delay(1000);

  WiFi.mode(WIFI_AP);
  WiFi.softAPConfig(apIP, apIP, IPAddress(255, 255, 255, 0));
  WiFi.softAP(ssid, password);

  dnsServer.start(DNS_PORT, "remote", apIP);

  webServer.on("/", handleRoot);

  webServer.begin();
}

void loop() {
  dnsServer.processNextRequest();
  webServer.handleClient();
}

¿Hay algo que estoy haciendo mal o es algo inevitable con el ESP en sí?

    
pregunta HaLo2FrEeEk

1 respuesta

1

io 0 y io 2 son pines de configuración de arranque. io 2 no debe estar BAJO en el inicio para un arranque correcto del esp8266. io 0 determina si el gestor de arranque comienza a parpadear. ALTO es para arranque normal, BAJO para flasheo. debe respetar estos requisitos de arranque de la esp8266.

io 3 es UART TX y se inicializa en el inicio porque genera un registro de arranque. como UART TX es ALTO.

    
respondido por el Juraj

Lea otras preguntas en las etiquetas