Serial.begin en ESP8266 no funciona

3

Estoy tratando de usar el IDE de Arduino para programar un ESP8266 (ESP-12F). Puedo cargar un programa simple que parpadea el led incorporado. Tan pronto como coloco una referencia a Serial.begin() en cualquier parte del código, mi programa ya no funciona. Incluso el código que se ejecuta antes de que se ejecute la llamada a Serial.begin() .

Estoy usando el siguiente código:

const int ledPin = 2;

void setup() {
  pinMode(ledPin, OUTPUT);
}

void loop() {
  digitalWrite(ledPin, LOW);
  delay(1000);
  digitalWrite(ledPin, HIGH);
  delay(2000);

  // If this line is present, the led never turns on, not even the first time.
  // Removing it makes the led blink, as expected.
  Serial.begin(115200);
}

Estoy conectando el ESP de la siguiente manera. Probablemente no sea muy relevante ya que puedo cargar y ejecutar el código correctamente siempre que no intente usar el puerto serie. También he intentado reemplazar la conexión a RTS y DTR con botones de presión a GND, y el resultado es el mismo.

¿Qué estoy haciendo mal? ¿Cómo uso el puerto serie en el ESP8266?

PS: Sé que Serial.begin() no debería ir dentro de loop() . Solo lo he movido allí para que suceda después de encender el led.

Actualizar

Intentéactualizarelúltimofirmwareconlaherramientaoficial,peroesteprocesosiemprefallaconunerrorde"Jefe de paquete no válido". Parece que ocurre cuando se escribe el último paquete, porque si flasheo un archivo grande, da el error solo al 99%.

Después de estos intentos, no he podido hacer que ningún programa funcione. Incluso el simple parpadeo del led sin ninguna referencia en serie parece no hacer nada, aunque el monitor en serie muestra los mensajes de arranque de ESP.

    
pregunta Antoine Aubry

5 respuestas

2

Hay dos opciones que te quedan por probar en función de toda la información contenida en este hilo.

1. Corrija las conexiones de la siguiente manera:

Necesita conectar algunos pines GPIO en el ESP-12 a 3.3V o tierra, para configurarlo en el modo correcto para comunicarse con él. Puede agregar capacitores y resistencias donde crea que pueden ser necesarios, sin embargo, los módulos AI ya los tienen internamente. Además, recuerde eliminar esta configuración cuando reinicie la placa para ejecutar su firmware, de lo contrario se iniciará en el "Modo de Programación / Intermitencia" que puede tener efectos indeseables. Tenga en cuenta que este diagrama utiliza un regulador de voltaje LM1117. Si tiene una fuente de alimentación de 3.3 V, puede sustituirlo en el diagrama. Aquí están las conexiones que necesita hacer:

ESP-12<-------->TTL-USB

TX---->RX

RX---->TX

GND---->GND

RESTO---->RST(solosiplaneausarlaconsolaserieparareiniciarlaplaca.)

ESP-12<-------->FUENTEDEALIMENTACIÓN

VCC---->Fuentedealimentaciónde3.3V(VoutofVoltageRegulatoroPowerSupply)

GND---->Conexiónatierradelafuentedealimentación

CH_PD---->ALTO(3.3V)

GPIO2---->ALTO(3.3V)

GPIO15---->BAJO(GND)

GPIO0---->ALTOoflotanteparaelmodoAT(3.3V)[*sideseadestellar firmwarecompletamentediferente,entoncesdebesconectarloatierra]Pareceque tengaestoconectadoaALTO,porloquepuedetenerproblemasparaparpadear BocetosdeArduino.

2.VuelvaainstalarelfirmwaredeATusando ESPTOOL

Si todavía tiene problemas después de la reconfiguración de sus conexiones, le recomiendo encarecidamente que vuelva a actualizar el firmware AT de Espressif y comience desde cero. Si esto no soluciona tu problema, me temo que has frito tu tabla.

(Para obtener instrucciones más detalladas, consulte Instructables )

    
respondido por el RedDogAlpha
1

Use serial.begin antes de pinmode: enlace en la configuración.

    
respondido por el Rob
1

Me siento tentado a pensar que tu chip está defectuoso.

Cuando un programa se compila con el SDK de Arduino, es realmente como cualquier otro programa escrito en C ++ con una función main () personalizada:

int main(void)
{
  init();
  setup();

  for (;;)
    loop();

  return 0;
}

Es completamente irrelevante si un bloque de código en particular va dentro de setup() o loop() aparte del hecho de que el código de configuración se ejecuta una vez y el código de bucle se ejecuta en un bucle infinito.

También es irrelevante si llama a pinMode() antes o después de que Serial.begin() debería funcionar. Tengo un bosquejo en ejecución actualmente que establece los pinModes primero y luego configura las comunicaciones en serie. Sin embargo, se está ejecutando en una NodeMCU, por lo que es un hardware diferente, pero el hardware en particular no debería importar.

Mi consejo sería:

  • asegúrese de haber seleccionado la 'Placa' correcta en el menú 'Herramientas' en el SDK de Arduino. Esto afectará cómo compila tu código. No estoy seguro de qué selección corresponde a su ESP-12F, tendrá que consultar la documentación.

  • vuelva a verificar que su cableado sea correcto. intente quitar los cables de los pines Tx, Rx y vea si su código se ejecuta al mismo tiempo que incluye la llamada a Serial.begin() . Esto podría indicar si las cargas en esos pines están causando problemas.

  • asegúrese de que el LEDpin que está utilizando no esté conectado al pin Tx o Rx. Muchas tarjetas micro tienen un LED a bordo para monitorear la actividad en serie.

  • prueba un chip ESP-8266 completamente diferente

respondido por el Octopus
1

Mi respuesta se basa en la experiencia pasada con el convertidor de USB a TTL para arduino, quemé varios chips, antes de darme cuenta de que el TX y el RX están invertidos. lo que significa es que el USB a TTL RX no son los pines que utiliza para recibir datos, es el pin que se debe conectar al pin RX del microcontrolador.

Entonces, lo que hago en estos días es que siempre uso la resistencia de 330 a 1k en serie con líneas TX y RX, para evitar daños si se conecta de forma incorrecta.

En cuanto a su problema, no puede estar seguro, a menos que comience con nuevas piezas de trabajo. porque tu chip podría estar dañado El uso de Serial.begin inicializa el puerto en modo serie y los pines en Entrada y salida, por eso, después de esta inicialización si la conexión es incorrecta, el puerto comienza a SINK o Fuente más actual de lo que debería ser ...

Eso es solo mi 2 centavos espero que ayude

    
respondido por el ElectronS
1

En este sitio web se explica paso a paso cómo dar conexiones y cómo flashear esp8266 para evitar valores de basura

  1. Para flash ESP8266: enlace
  2. Para conectar esp8266 con arduino: enlace
respondido por el Gowtham S

Lea otras preguntas en las etiquetas