lunes, 24 de octubre de 2016

Arduino - Conectando y probando el ESP8266

El desafío de la semana consistió en lograr hacer arrancar exitosamente el módulo ESP8266 (que permite conectarse  a redes WiFi) conectado a un Arduino Uno, cosa que hace un tiempo al momento de comprarlo no había resultado... A veces es bueno tomarse un tiempo y volver a armarlo porque ves cosas que no habías visto antes!

Arranqué conectando el módulo al Arduino Uno de esta forma:



El GND del ESP8266 a un pin GND del Arduino
El TX del ESP  al pin 2 del Arduino
El RX del ESP al pin 3 del Arduino
EL RST y el VCC al 3,3v del Arduino

Cargué un sketch básico para lograr la comunicación y probar los primeros comandos AT:

#include <SoftwareSerial.h>
SoftwareSerial ESP8266(3, 2); // RX | TX

void setup()
{  Serial.begin(9600);
     ESP8266.begin(9600);
  }

void loop()
  {  
     if (ESP8266.available())
         { char e = ESP8266.read() ;  // lee lo recibido del modulo ESP
           Serial.print(e);           // lo escribe en el monitor 
         }
     if (Serial.available())
         {  char s = Serial.read();   // lee lo escrito en el monitor
            ESP8266.print(s);         // lo manda al módulo ESP
         }
   }

Una vez cargado abrí el Serial Monitor, configurado a 9600... y nada... Siguiendo varias recomendaciones de soluciones de problemas, desconecté y volví a conectar la alimentación del módulo (lo que sale del 3,3v del Arduino) pero a lo sumo conseguí ver caracteres extraños.

Seguí investigando y encontré que de acuerdo al modulo puede variar la velocidad a la que trabaja. Probé cambiando la velocidad del Serial Monitor pero no hubo ninguna mejora... Hasta que me di cuenta que lo que tenía que hacer es cambiar la velocidad en el sketch!
#include <SoftwareSerial.h>                                                                                 
SoftwareSerial ESP8266(3, 2); // RX | TX                                 
void setup() {                                                            
 Serial.begin(115200);                                                    
 ESP8266.begin(115200);                                                   
}                                                                        
void loop()   {                                                                                                 
 if (ESP8266.available())          {                                      
  char e = ESP8266.read() ;  // lee lo recibido del modulo ESP            
  Serial.print(e);           // lo escribe en el monitor                  
 }                                                                        
 if (Serial.available())          {                                       
  char s = Serial.read();   // lee lo escrito en el monitor               
  ESP8266.print(s);         // lo manda al módulo ESP                     
 }                                                                        
}                                                                         
Con eso logré que finalmente se conecte el "modulito", aunque no recibi el ready que esperaba sino un ioavailable.

A partir de eso, desde el Serial Monitor, empecé a pasarle distintos comandos AT.

Para empezar AT para testear que funcione el sistema AT, recibo como respuesta OK, asi que seguimos...

Básicamente los comandos AT pueden tener 4 variantes (no todas aplican a todas):

SeteaConsultaTestea modos posiblesEjecuta
AT+<x>=<…>AT+<x>?AT+<x>=?AT+<x>
Las que yo utilicé son:

AT+GMR -> devuelve la version del firmware del módulo
AT+CWLAP -> lista las conexiones de WiFi disponibles
AT+CQJAP="ssid","password" -> se conecta a la red ssid con la contraseña password
AT+CIPMUX=1 -> habilita conexiones multiples
AT+CIPSERVER=1,80 -> activa un servidor web en el puerto 80
AT+CIPSTA? -> devuelve la dirección IP del módulo

Una vez obtenida la dirección IP se puede conectar a la misma a través de cualquier explorador de internet (de una maquina conectada a la misma red). Se observará en el monitor serial que se reciben datos de la conexión que después se podrían parsear para recibir comandos.

Pero eso lo dejamos para la próxima!

No hay comentarios.:

Publicar un comentario