Comunicacion Arduino, WIFI con ESP8266

Un lugar donde desarrollar, documentar y organizar los diferentes proyectos.
Responder
Disenator
Mensajes: 66
Registrado: 31 Ene 2015 11:51

Comunicacion Arduino, WIFI con ESP8266

Mensaje por Disenator » 21 Mar 2015 17:49

Hola tras trastear unos días con el modulo ESP8266 he conseguido ver los valores de un sensor DHT22 en una pagina del navegador, tras mucho investigar e seguido los pasos de esta pagina y modificando el programa ya se pueden mandar datos del arduino al navegador: http://www.prometec.net/servidor-web-esp8266/
Ahora me queda conseguir que no deje de transmitir al de un periodo corto de tiempo y conseguir que no me haga falta tener conectado el arduino al ordenador con el cable serie, ya que si lo desconectas aunque este alimentado deja de funcionar al no tener comunicación serial
Hay va el codigo por si os sirve


#include "DHT.h"
#define DHTPIN 12 // Establecemos la entrada digital en la que tenemos
// conectada la salida data del sensor.
#define DHTTYPE DHT22 // Definimos el sensor que vamos a usar DHT 11
DHT dht(DHTPIN, DHTTYPE); // Configuramos la entrada y el sensor

String ordenes[]=
{ //"AT+RST", // Resetea el modulo esta comentado porque no funciona no se porque
"AT+CWMODE=3", // Para poner el modulo en modo 3
"AT+CIFSR" , // Consulta la dirección IP del modulo
"AT+CIPMUX=1", // Habilita varias conexiones simultaneas
"AT+CIPSERVER=1,80", // Arranca un servidor web con el numero de servicio = 1 en el puerto 80
"END" // Para reconocer el fin de los comandos AT
};

void setup()
{ Serial3.begin(19200);
Serial.begin(19200);
dht.begin();
delay (1000);
int index = 0;
while(ordenes[index] != "END")
{ Serial3.println(ordenes[index++]);
while ( true)
{ String s = GetLineWIFI();
if ( s!= "") Serial.println(s);
if ( s.startsWith("no change"))
break;
if ( s.startsWith("OK"))
break;
if ( s.startsWith("ready"))
break;
// if (millis()-T >10000) break;
}
Serial.println("....................");
}
}
void loop()
{ while (Serial3.available() >0 )
{ char c = Serial3.read();
if (c == 71)
{ Serial.println("Enviada Web Request");
webserver();
delay(500);
}
}
}

void http(String output)
{
Serial3.print("AT+CIPSEND=0,"); // AT+CIPSEND=0, num
Serial3.println(output.length());
if (Serial3.find(">")) // Si recibimos la peticion del mensaje
{ Serial.println(output);
Serial3.println(output); //Aqui va el string hacia el WIFI
delay(10);
while ( Serial3.available() > 0 )
{ if ( Serial3.find("SEND OK") ) // Busca el OK en la respuesta del wifi
break;
}
}
}
void webserver(void)
{ http("<!DOCTYPE HTML>");
http("<html>");
http("<head><title>LECTURAS ANALOGICAS.</title>");
http("<meta http-equiv=\"refresh\" content=\"15\"></head>");
http("<body><h1> Situacion Ambiente</h1>");





//convertir lectura del sensor temperatura de float a string
float Temp = dht.readTemperature(); //Guardamos la lectura de temperatura del sensor en una variable tipo float
char valtemp[10]; //Creamos un array de 10 elementos tipo char
dtostrf(Temp,4,2,valtemp); //Convertimos la variable Temp en tipo char y la guardamos en el array valTemp,
//el primer valor de la funcion dtostrf es que convertir de float a char en este caso la variable Temp,
//el segundo valor es un entero que indica el numero de caracteres minimo, incluyendo el punto decimal,en este caso 4
//el tercer valor es la precisión, el numero de decimales detras del punto en este caso 2
//el cuarto valor es donde almacenar el resultado, en este caso en el array tipo char valtemp

//convertir lectura del sensor humedad de float a string
float Hum = dht.readHumidity();
char valhum[10];
dtostrf(Hum,4,2,valhum); //Convertimos la variable Temp en tipo char y la guardamos en el array valTemp,
//el primer valor de la funcion dtostrf es que convertir de float a char en este caso la variable Hum,
//el segundo valor es un entero que indica el numero de caracteres minimo, incluyendo el punto decimal, en este caso 4
//el tercer valor es la precisión, el numero de decimales detras del punto en este caso 2
//el cuarto valor es donde almacenar el resultado, en este caso en el array tipo char valhum


//Escribe los valores del senor en el navegador
http("Sensor ");
http( String("DHT22"));
http(" temperatura ");
http(String(valtemp));
http("<br />");


http("Sensor ");
http( String("DHT22"));
http(" Humedad ");
http(String(valhum));
http("<br />");

http("<p><em> La página se actualiza cada 15 segundos.</em></p></body></html>");

delay(1);
Serial3.println("AT+CIPCLOSE=0");
//delay(500);
}
String GetLineWIFI()
{ String S = "" ;
if (Serial3.available())
{ char c = Serial3.read(); ;
while ( c != '\n' ) //Hasta que el caracter sea intro
{ S = S + c ;
delay(25) ;
c = Serial3.read();
}
return( S ) ;
}
}

kurtsik
Mensajes: 124
Registrado: 30 Ene 2015 11:29

Re: Comunicacion Arduino, WIFI con ESP8266

Mensaje por kurtsik » 22 Mar 2015 17:41

Ivan, como accedes desde fuera al modulo: este esta conectado a una red wifi externa o el mismo es un AP?

Disenator
Mensajes: 66
Registrado: 31 Ene 2015 11:51

Re: Comunicacion Arduino, WIFI con ESP8266

Mensaje por Disenator » 22 Mar 2015 20:03

Esta conectado a mi red, lo hize de modo manual cuando empeze a jugar con el y ahora guarda la utima red wifi y se conecta a esa red el solo,
para hacerlo le pasas el comonda AT+CWLAP y te da un listado de las wifis disponibles, despues le pasas el comando AT+CWJAP=”charly”,”contrase” donde "charly" es el nombre de la red wifi y "contrase" la contraseña de la red
De todas las maneras el modulo tambien se puede configurar como AP con la orden AT+CWMODE

Disenator
Mensajes: 66
Registrado: 31 Ene 2015 11:51

Re: Comunicacion Arduino, WIFI con ESP8266

Mensaje por Disenator » 22 Mar 2015 20:18

Aqui van algunos de los comandos AT que he recopilado la mayoria los he probado y funcionan:

AT+RST Resetea el modulo (no funciona)
AT+CWMODE? Consulta en que modo esta el modulo
AT+CWLAP Examina que redes WIFI detecta
AT+CWJAP="Nombre de la wifi","Contraseña" Se conecta a la Wifi indicada
AT+CIFSR Consulta la IP de nuestro modulo
AT+CIPMUX=1 Habilita multiples conexiones simultaneas
AT+CIPSERVER=1,80 Arranca un servidor web (con el numero de servicio = 1) en el puerto 80
AT+CIOBAUD=? Consulta a que velocidad de comunicación puede funcionar el modulo en baudios
AT+CIOBAUD? Consuta la velocidad de comunicación actual en baudios
AT+CIOBAUD=XXXX Modifica la velocidad de comunicación del modulo en baudios
AT+CWSAP Salir de la WIFI
AT+CIPSTATUS Obtener el estado de la conexion
AT+CIPSTART Establece conexion TCP o UDP
AT+CIPSEND Enviar datos
AT + CIPSTA Configura el modulo con una IP fija (no lo he probado)

Disenator
Mensajes: 66
Registrado: 31 Ene 2015 11:51

Re: Comunicacion Arduino, WIFI con ESP8266

Mensaje por Disenator » 22 Mar 2015 22:43

Aqui va un enlace con todos los comandos AT hasta el momento:
https://translate.googleusercontent.com ... ogbmg-xcrA

kurtsik
Mensajes: 124
Registrado: 30 Ene 2015 11:29

Re: Comunicacion Arduino, WIFI con ESP8266

Mensaje por kurtsik » 23 Mar 2015 09:28

Me has picado con el modulo este, voy a echarle una mirada y a ver que consigo hacer con el.

dmarofer
Mensajes: 57
Registrado: 02 Feb 2015 15:40

Re: Comunicacion Arduino, WIFI con ESP8266

Mensaje por dmarofer » 23 Mar 2015 10:05

Mmmm, me gusta mucho ese modulo ...... Creo que hay que pedir un par de ellos o tres.

JotaCe
Mensajes: 83
Registrado: 30 Ene 2015 13:12

Re: Comunicacion Arduino, WIFI con ESP8266

Mensaje por JotaCe » 23 Mar 2015 10:18

Inicialmente la comunicación con el robot autobalanceado iba a ser con bluetooth porque los módulos wifi eran muy caros. Pero luego se empezó a hablar de estos que estaban a un precio muy asequible y, como tenía que comprar algunas otras cosas a dx, pedí uno o dos (no recuerdo). Los tengo en casa. Confío en poder llegar a usarlos algún día pero si quieres trastear ya con ellos cuenta con estos.

kurtsik
Mensajes: 124
Registrado: 30 Ene 2015 11:29

Re: Comunicacion Arduino, WIFI con ESP8266

Mensaje por kurtsik » 23 Mar 2015 15:57

Ivan, en tus pruebas de donde sacas los 3.3V, del arduino?

kurtsik
Mensajes: 124
Registrado: 30 Ene 2015 11:29

Re: Comunicacion Arduino, WIFI con ESP8266

Mensaje por kurtsik » 23 Mar 2015 21:24

Otra pregunta: has reflaseado el modulo?, a mi todos los comandos AT me retornan error.

Disenator
Mensajes: 66
Registrado: 31 Ene 2015 11:51

Re: Comunicacion Arduino, WIFI con ESP8266

Mensaje por Disenator » 23 Mar 2015 23:40

No el modulo esta como me lo distes, para alimentarlo con 3.3v lo hago desde una fuente de ordenador que modifique en una makersnight para convertirla a fuente de laboratorio.
El problema puede ser si lo alimentas con el arduino cuando arranca no tiene chicha suficiente y se cuelga. También puede ser que la velocidad de comunicación sea mas pequeña, empieza con 9600 y vete subiéndola, para mandarle comandos de uno en uno puedes probar este código

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

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

void loop()
{ String B= "." ;
if (BT1.available())
{ char c = BT1.read() ;
Serial.print(c);
}
if (Serial.available())
{ char c = Serial.read();
BT1.print(c);
}
}

kurtsik
Mensajes: 124
Registrado: 30 Ene 2015 11:29

Re: Comunicacion Arduino, WIFI con ESP8266

Mensaje por kurtsik » 24 Mar 2015 08:20

Ivan, las primeras pruebas las estoy haciendo sin Arduino, con un modulo USB a TTL. En principio la velocidad a la que funciona es 9600 (en tu sketch tienes otra, la cambiaste?).

kurtsik
Mensajes: 124
Registrado: 30 Ene 2015 11:29

Re: Comunicacion Arduino, WIFI con ESP8266

Mensaje por kurtsik » 24 Mar 2015 08:20

Ivan, las primeras pruebas las estoy haciendo sin Arduino, con un modulo USB a TTL. En principio la velocidad a la que funciona es 9600 (en tu sketch tienes otra, la cambiaste?).

Disenator
Mensajes: 66
Registrado: 31 Ene 2015 11:51

Re: Comunicacion Arduino, WIFI con ESP8266

Mensaje por Disenator » 24 Mar 2015 08:24

Si la puese a 19200 y como va bien, lo he dejado

kurtsik
Mensajes: 124
Registrado: 30 Ene 2015 11:29

Re: Comunicacion Arduino, WIFI con ESP8266

Mensaje por kurtsik » 25 Mar 2015 16:36

No me lo puedo creer, ya se cual era el problema: resulta que este cacharrito diferencia entre mayusculas y minusculas, y at+cifsr no es lo mismo que AT+CIFSR.
Hay que escribir los comandos en mayusculas.

Responder