Enviar comandos AT a ESP8266 desde Arduino Uno a través de un puerto serie de software

10

OBJETIVO

Desde Arduino UNO, envíe comandos AT a ESP8266 a través de un puerto SoftwareSerial y reciba resultados.

ESTADO ACTUAL

Envío comandos AT y no recibo nada ( esquema de cableado 1 ) o envío comandos AT y recupero basura ( esquema de cableado 2 ).

Usando el Arduino como un paso (como se explica en el tutorial que figura en la sección de recursos), puedo enviar comandos AT. He descubierto que puedo comunicarme con el ESP8266 a 115200 baudios.

Estos son los resultados de la ejecución AT+GMR:

AT version:0.40.0.0(Aug  8 2015 14:45:58)
SDK version:1.3.0
Ai-Thinker Technology Co.,Ltd.
Build:1.3.0.2 Sep 11 2015 11:48:04

ESQUEMA DE CABLEADO 1

!! Tengo el cable verde conectado al pin 3 en el Arduino Uno y el cable amarillo conectado al pin 2; ¡No 1 y 0 como sugiere la imagen!

ingrese la descripción de la imagen aquí

ESQUEMA DE CABLEADO 2

El mismo cableado que el anterior, pero tengo RX y TX invertidos. El cable verde está conectado al pin 2 y el cable amarillo está conectado al pin 3.

CÓDIGO

Esto se está ejecutando en Arduino Uno

#include <SoftwareSerial.h>

SoftwareSerial esp8266(2, 3);

void setup() {
  // Open serial communications and wait for port to open:
  Serial.begin(115200);
  while (!Serial) {
    ; // wait for serial port to connect. Needed for native USB port only
  }

  Serial.println("Started");

  // set the data rate for the SoftwareSerial port
  esp8266.begin(115200);
  esp8266.write("AT\r\n");
}

void loop() {
  if (esp8266.available()) {
    Serial.write(esp8266.read());
  }
  if (Serial.available()) {
    esp8266.write(Serial.read());
  }
}

RESULTADOS DEL BOSQUEJO EN EJECUCIÓN

Esquema de cableado 1

Started

Esquema de cableado 2

Started
�����

He probado el ESP8266 a través de las instrucciones enumeradas en el tutorial en la sección Recursos que he usado a continuación. El ESP8266 funciona bien cuando se le envían instrucciones a través del indicador de serie.

RECURSOS QUE HE UTILIZADO http://rancidbacon.com/files/kiwicon8/ESP8266_WiFi_Module_Quick_Start_Guide_v_1.0.4.pdf

PREGUNTA

¿Alguien sabe si lo que estoy tratando de hacer es posible? Y si es así, ¿qué estoy haciendo mal?

Pablo
fuente
Intente como se sugiere en el PDF para usar arduino como un bypass a la serie (use las conexiones como en la imagen). Después de intentar establecer baudios en 115200 y probarlo usando un monitor en serie. Necesita enviar \ r \ n como la línea termina también. Si el esp no responde, intente 9600 baudios. Si obtiene una buena salida, pase al software serial con la velocidad de transmisión en funcionamiento. También puede intentar actualizar el firmware de esp a la última versión si aún no lo ha hecho.
brtiberio
¿Puedes publicar el código de serie del software?
Magic-Mouse
@Personagem, gracias. He hecho esa solución de problemas (es decir, comprobar que puedo enviar comandos AT usando Arduino como un bypass). He descubierto que puedo comunicarme con el esp en 115200. Intentaré actualizar el firmware como me sugirió.
Paul
@ Magic-Mouse SoftwareSerial es una biblioteca proporcionada por, creo, Arduino. Gracias por su ayuda en la pregunta, pero no creo que sea útil publicar la biblioteca aquí.
Paul
Sé cuál es la biblioteca de serie de software, quiero ver el código donde usa la serie de software.
Magic-Mouse

Respuestas:

9

¿Alguien sabe si lo que estoy tratando de hacer es posible?

Absolutamente posible :)

Y si es así, ¿qué estoy haciendo mal?

SoftwareSerial no tiene capacidad para 115200 baudios (a pesar de "permitir" esto como configuración). Algunos informes sugieren que hasta 57600 es viable, aunque en mi experiencia 9600 es el mejor para la confiabilidad. Cómo cambiar la velocidad en baudios en el ESP8266 dependerá de la versión del firmware. He tenido éxito con AT+IPR=9600. Solo necesita ejecutar este comando una vez (es una configuración persistente). Sugeriría, según su descripción, que este es el culpable más probable que está causando la salida de "basura" que usted describe.

Un par de otras notas:

  • El ESP8266 se ejecuta en 3v3, no en 5v, por lo que no debería tenerlo directamente conectado a los pines digitales; debe ejecutarlo a través de un convertidor de nivel lógico. Correr 5v puede freír tu ESP8266.
  • La salida 3v3 del Arduino no tiene suficiente corriente para admitir el ESP8266 de manera confiable (Arduino de 50 mA frente a hasta 300 mA para el ESP8266 según algunas cuentas), intente ejecutar el ESP8266 con un suministro separado. Probablemente no afectará a comandos simples como, ATpero cuando intenta conectarse a una red, etc., puede provocar reinicios inesperados del dispositivo.
  • Como han señalado otros, debe enviar \ r \ n, así que asegúrese de que su ventana de serie esté configurada para enviar ambos (este es un menú desplegable en la ventana de serie)
Conceder
fuente
1
Tenga en cuenta que AT + IPR a veces puede bloquear ESP8266. Más detalles en: arduino.stackexchange.com/questions/24156/…
Emir
7

Bueno, puedes probar esto:

Comience cargando un boceto parpadeante en su Arduino y luego conéctelo a su ESP8266 de esta manera: TX-TX y RX-RX.

Ahora abra Serial Monitor y envíe el comando AT y vea si responde. Si es así, puede controlarlo usando su Arduino conectándolo de nuevo a TX-RX y RX-TX.

PD: No olvide establecer la línea que termina en el Monitor de serie en Nueva línea o Retorno de carro.

Use este código para conectarse a ESP8266:

#include <SoftwareSerial.h>

const byte rxPin = 2; // Wire this to Tx Pin of ESP8266
const byte txPin = 3; // Wire this to Rx Pin of ESP8266

// We'll use a software serial interface to connect to ESP8266
SoftwareSerial ESP8266 (rxPin, txPin);

void setup() {
  Serial.begin(115200);
  ESP8266.begin(115200); // Change this to the baudrate used by ESP8266
  delay(1000); // Let the module self-initialize
}

void loop() {
  Serial.println("Sending an AT command...");
  ESP8266.println("AT");
  delay(30);
  while (ESP8266.available()){
     String inData = ESP8266.readStringUntil('\n');
     Serial.println("Got reponse from ESP8266: " + inData);
  }  
}

Dado que la interfaz serial de hardware estará ocupada cuando esté conectada a la computadora, entonces debe usar otra interfaz serial para comunicarse con su ESP8266. En este caso, Software Serial es útil.

Ikbel
fuente
Si bien este enlace puede responder la pregunta, es mejor incluir las partes esenciales de la respuesta aquí y proporcionar el enlace como referencia. Las respuestas de solo enlace pueden volverse inválidas si la página vinculada cambia. - De la opinión
Ricardo
1
Sí, supongo que tienes razón. Edité mi respuesta.
Ikbel
@KiraSan ¿por qué se requiere un retraso (30)?
Rahul Rastogi
@RahulRastogi solo para este ejemplo, puede usar el retraso para permitir que el ESP responda, 30 ms es solo un valor aleatorio, pero en un programa de la vida real, debe evitar eso y usar otro mecanismo para verificar la respuesta.
Ikbel
1

¿Alguien sabe si lo que estoy tratando de hacer es posible? Es posible, lo hice con 2 arduinos donde uno simulaba ESP8266 (esperando el pedido de eBay).

Y si es así, ¿qué estoy haciendo mal?

Lo que estás haciendo está mal en la mayoría de los niveles, pero creo que te resolviste más.

Una idea es implementar a este pequeño amigo: el cambiador de nivel lógico te ahorrará muchos problemas más adelante.

En su "ESQUEMA DE CABLEADO 1" está utilizando el puerto serie de hardware de arduino para comunicarse directamente con el dispositivo como si estuviera conectado a través de un cable TTL o un cable FTDI.

Esto significa que, en teoría, el dispositivo arduino leería del hardware al hablar también del ESP8266, si tiene otro arduino o un cable TTL, intente conectarlo a las puertas 2 y 3 en el arduino "principal" y debería obtener un similar resultado como para su ejemplo resultado 2. Ya que de esa manera sería proxy a través del arduino. Si no, ese sería un lugar para comenzar a depurar.

Además de eso, solo podría recomendarle que invierta en un TTL 3,3v o un convertidor de nivel lógico. Cuando obtuve mi cable todo salió de la caja.

Ratón Mágico
fuente
1

Tuve muchos problemas también. En mi caso, los problemas casi se resuelven cambiando de SoftwareSerial a AltSoftSerial . Parecía que en el Uno la biblioteca en serie de software estándar no funcionaba para mí. Después de cambiar, comencé a obtener resultados por primera vez. (También usé cambio de nivel y fuente de alimentación externa para 3.3V)


Y por casi resuelto, quiero decir, sigo teniendo, de vez en cuando, galimatías en la terminal. Entonces, incluso AltSoftSerial no es una solución perfecta. Estaba usando el ESP-07 con una velocidad de datos de 115200 bps.

Janar Jürisson
fuente
¿Puedes agregar a tu descripción? Sería útil saber cómo conectó la conexión entre Uno y ESP. ¡Gracias!
dlu
0

Aquí hay algunos consejos al usar el módulo ESP8266.

  1. No use el software en serie ya que no es confiable, especialmente a velocidades de transmisión más altas.

  2. Siempre conecte el módulo ESP a la computadora y pruebe todos los comandos AT antes de interactuar con Arduino para asegurarse de que está trabajando en la dirección correcta

  3. Haga una placa adaptadora de corriente para que el módulo ESP sea compatible con el suministro Arduino 5v

Consulte también este enlace para obtener más detalles.

AAA
fuente