Solución:
¿Alguien sabe si lo que estoy tratando de hacer es posible?
Absolutamente posible 🙂
Y si es así, ¿qué estoy haciendo mal?
SoftwareSerial no es capaz de alcanzar una velocidad de 115200 baudios (a pesar de “permitir” esto como configuración). Algunos informes sugieren que hasta 57600 es factible, aunque en mi experiencia 9600 es el mejor para la confiabilidad. La forma de cambiar la velocidad en baudios del 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 “basura” que describe.
Un par de otras notas:
- El ESP8266 funciona con 3v3, no con 5v, por lo que no debería tenerlo conectado directamente a los pines digitales; necesita ejecutar un convertidor de nivel lógico. Ejecutar 5v puede freír su ESP8266.
- La salida 3v3 del Arduino tiene corriente insuficiente para admitir el ESP8266 de manera confiable (50mA Arduino frente a hasta 300mA para el ESP8266 según algunas cuentas); intente ejecutar el ESP8266 con un suministro separado. Probablemente no afectará a comandos simples como
AT
pero 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 serial esté configurada para enviar ambos (este es un menú desplegable en la ventana serial)
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 configurar 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 de serie de hardware estará ocupada cuando se conecte a la computadora, entonces debe usar otra interfaz de serie para comunicarse con su ESP8266. En este caso, Software Serial es útil.