ESP8266-01 carga y ejecución automáticas (sin cambiar manualmente GPIO0 a GND)

3

Compré uno de los módulos baratos de ESP8266-01 y cargué exitosamente el boceto utilizando Arduino IDE. El módulo es excelente (en 5 minutos tengo un servidor web simple en funcionamiento) pero encontré un poco difícil cambiar entre el modo de programación / modo de ejecución. En detalles:

Para cargar firmware

  1. módulo de apagado
  2. conecta GPIO_0 a GND
  3. enciende y carga desde Arduino IDE

Para ejecutar el boceto después de subir

  1. volver a apagar el módulo
  2. eliminar puente GPIO_0-GND
  3. vuelve a encender

Cuando desarrollas y realizas cargas frecuentes de firmware, este proceso se vuelve muy tedioso. Así que quiero preguntar: ¿hay alguna forma de automatizar el proceso con un circuito personalizado?

Al igual que la placa Arduino, cuando la carga se inicia, se reinicia automáticamente y luego se ejecuta el boceto.

    
pregunta Noisemaker

2 respuestas

1

Sí, tal circuito existe. Necesita 2 transistores NPN y algunas resistencias conectadas a GPIO_0 y reinicio

enlace

Tenga en cuenta que necesita utilizar un convertidor / chip USB a UART con pines adicionales DTR y RTS además de los pines RX y TX habituales.

    
respondido por el Adil Malik
1

¡Las placas ESP8266 que tienen al menos 1 MB de flash (para el ESP-01, generalmente indicado por una PCB negra) admiten actualizaciones por aire, que son compatibles de forma nativa con el IDE de Arduino! El ejemplo en Arduino OTA > BasicOTA tiene el siguiente código básico:

#include <ESP8266WiFi.h>
#include <ESP8266mDNS.h>
#include <WiFiUdp.h>
#include <ArduinoOTA.h>

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

void setup() {
  Serial.begin(115200);
  Serial.println("Booting");
  WiFi.mode(WIFI_STA);
  WiFi.begin(ssid, password);
  while (WiFi.waitForConnectResult() != WL_CONNECTED) {
    Serial.println("Connection Failed! Rebooting...");
    delay(5000);
    ESP.restart();
  }

  // Port defaults to 8266
  // ArduinoOTA.setPort(8266);

  // Hostname defaults to esp8266-[ChipID]
  // ArduinoOTA.setHostname("myesp8266");

  // No authentication by default
  // ArduinoOTA.setPassword((const char *)"123");

  ArduinoOTA.onStart([]() {
    Serial.println("Start");
  });
  ArduinoOTA.onEnd([]() {
    Serial.println("\nEnd");
  });
  ArduinoOTA.onProgress([](unsigned int progress, unsigned int total) {
    Serial.printf("Progress: %u%%\r", (progress / (total / 100)));
  });
  ArduinoOTA.onError([](ota_error_t error) {
    Serial.printf("Error[%u]: ", error);
    if (error == OTA_AUTH_ERROR) Serial.println("Auth Failed");
    else if (error == OTA_BEGIN_ERROR) Serial.println("Begin Failed");
    else if (error == OTA_CONNECT_ERROR) Serial.println("Connect Failed");
    else if (error == OTA_RECEIVE_ERROR) Serial.println("Receive Failed");
    else if (error == OTA_END_ERROR) Serial.println("End Failed");
  });
  ArduinoOTA.begin();
  Serial.println("Ready");
  Serial.print("IP address: ");
  Serial.println(WiFi.localIP());
}

void loop() {
  ArduinoOTA.handle();
}

Al cambiar el código comentado // ArduinoOTA.setPassword((const char *)"123"); , puede establecer una contraseña. Si combina este código con su código existente, en lugar de seleccionar el puerto serie del ESP8266 al programar, su ESP8266 aparecerá en el menú "Puertos". Se le pedirá una contraseña si establece una. Luego, simplemente haga clic en "Cargar" como de costumbre. Una vez que se complete la carga, el ESP8266 se reiniciará automáticamente y ejecutará su nuevo código. No conectas GPIO 0 a un modo especial al programar, simplemente déjalo en su posición normal.

    
respondido por el lights0123

Lea otras preguntas en las etiquetas