|   FOROS      |         |     KIO4 |      
   Inicio B4A (Basic4Android) App inventor 2 WAMP - PHP - MySQL
   Elastix - VoIP Cosas de Windows Webs interesantes Arduino
  Estación meteorológica Visual Basic Script (VBS) Translate:
Búsqueda en este sitio:


Nuevo concurso para España, Argentina, Brasil, Chile, Colombia, Ecuador, México, Perú y Portugal.

Arduino en español
Circuitos con Arduino - Juan Antonio Villalpando

-- Tutorial de iniciación a Arduino --

Volver al índice del tutorial   

____________________________

 

57B.- Vamos a crear un servidor web. En el Arduino tendremos dos pulsadores. Cuando pulsemos alguno, se indicará esa pulsación en una página web.

_____________________________________
1.- Presentación.

- Vamos a ver en una página web el estado de dos pulsadores del Arduino. Tambíén vamos a controlar el LED13 del Arduino mediante una página web. Por último veremos en una web el estado del LED13 una vez controlado desde un botón de la página web.

- Utilizaremos la versión de firmware 9.2.4 y pondremos al módulo a una velocidad de 19200 baudios.

- Cargamos los programas y luego arrancamos el Serial Monitor del Arduino.

- Aunque se recomienda una alimentación con un módulo exterior de 3,3V no es totalmente necesario. Además tampoco es necesario poner divisores de tensión en RX, ni usar un convertidor de 5V a 3,3V para probar su funcionamiento. He utilizado un convertidor de 5V/3,3V y me ha dado problemas. En cambio la fuente de alimentación externa es una buena opción. Ver fuente de alimentación.

- De todos modos, haciendo pruebas, a veces es mejor conectarlo al 3,3 V del Arduino que a la fuente de alimentación externa, así que es bueno probar una forma y otra.

_____________________________________
2.- Grabación de un nuevo firmware.

Lo primero que vamos hacer es modificar el firmware del módulo ESP8266, ummm... ya veo que no quieres seguir adelante... crees que vas a averiar tu módulo y... a la basura. Te da lástima que "pierda" el firmware que traía de fábrica...

Nada hombre... sigue adelante, total por 1,5 € que te ha costado. Te gustará la experiencia. Además va a funcionar seguro.

Adelante. Esto ya lo hicimos en el tutorial anterior. Realiza esta conexión...

Conexión para realizar la grabación del firmware.

Arduino
Módulo ESP8266
TX TX
3,3 V CH_PD
3,3 V Vcc
GND GND
GPIO 0 GND
RX RX

b.- Cargamos en el Arduino el Sketch que se encuentra en...

Archivos / Ejemplos / 01.Basics / BareMinimum

BareMinimum
void setup() {
// put your setup code here, to run once:

}

void loop() {
// put your main code here, to run repeatedly:

}

c.- Bajas este archivo ESP8266_flasher.zip

d.- Arrancas esp8266_flasher.exe. Pulsas el botón BIN y carga v0.9.2.4 AT Firmware-ESPFIX.bin

e.- Establece el número de puerto donde está conectado tu Arduino, en mi caso el COM25.

f.- Pulsa Download y se cargará la versión firmware 0.9.2.4

g.- Al final parece dar un error, ignóralo.

NOTA: mientras cargas no debe estar funcionando el Serial Monitor.


NOTA: en el gráfico anterior el archivo es ai-thinker-0.9.5.2-9600.bin, ese no es que
tiene que cargar, carga el v0.9.2.4 AT Firmware-ESPFIX.bin

____________________________________________________

Otros firmware: http://wiki.aprbrother.com/wiki/Firmware_For_ESP8266

_____________________________________
3.- Cambio de velocidad del módulo a 19200.

- Quita el cable de GPIO 0

Conexión para trabajar con el módulo.

Arduino
Módulo ESP8266
TX TX
3,3 V CH_PD
3,3 V Vcc
GND GND
GPIO 0  
RX RX

- En el Arduino sigue cargado el Sketch BareMinimum, si no lo tienes cargado, cárgalo.

- Vamos al Serial Monitor y escribimos AT
(Los comandos AT en mayúsculas.)
(Cuidado con los espacios y las dobles comillas ")

Debe salir OK.

- Escribe estos dos comandos para ver la velocidad y establecer 19200


AT+CIOBAUD=?                --------- Muestra la gama de velocidades disponibles
AT+CIOBAUD?                  --------- Muestra la velocidad actual

AT+CIOBAUD=19200       --------- Establece la velocidad en 19200

BAUD->19200

Hemos puesto la velocidad del módulo ESP8266 a 19200 baudios.

- Aquí tienes otros comandos pero no es necesario escribirlos, ya que los que necesitamos se ejecutarán directamente desde el código de nuestro programa.

AT+GMR

Versión del firmware

[Vendor:www.ai-thinker.com Version:0.9.2.4]

0018000902-AI03

AT+CWMODE? Ver en qué modo está (Como cliente STA (1), como Punto de Acceso (2) AP o ambos (3))
AT+CWMODE=3 Lo ponemos en modo 3.
AT+CWLAP Saldrá un listado de los Puntos de Accesos WiFi que hay en las cercanías.
AT+CWJAP="MIROUTER","micontraseña" Voy a conectarme a la red de mi Router (Punto de Acceso, AP). Escribo su nombre y contraseña.
AT+CWJAP? Indica a qué Punto de Acceso estás conectado.
AT+CIFSR - Muestra la IP del módulo como servidor: APIP = 192.168.4.1
- Muestra la IP del módulo como cliente conectado a mi Router STAIP = 192.168.1.5
Vamos a convertirlo en un servidor web
AT+CIPMUX=1 Para que el servidor funcione con múltiples conexiones.
AT+CIPSERVER=1,80 Abre el servidor web (1). Utiliza el puerto 80.

Si quitamos y ponemos la alimentación del módulo saldrá un mensaje como este...

Fíjate que he cambiado la velocidad a 19200.

- Todo lo anterior lo hemos realizado simplemente para cambiarle la velocidad al módulo. Se podría haber realizado de otra manera, pero muchos usuarios tienen problemas al cambiar la velocidad mediante código. Además hemos aprendido a cambiar el firmware y a utilizar varios códigos.


_____________________________________
4.- Conexión y carga del programa.

- Vamos a realizar esta conexión. Simplemente he desplazado el TX y el RX como ves en la imagen.

Conexión para realizar el programa.

Arduino
Módulo ESP8266
3 TX
3,3 V CH_PD
3,3 V Vcc
GND GND
GPIO 0  
2 RX

- Carga este código en el Arduino. Para mayor seguridad quítale la alimentación al módulo ESP8266 para que no haya problema de carga. Cuando ya esté cargado el Arduino, vuelve a ponerle la alilmentación al módulo.

Código
/***********
Juan A. Villalpando
KIO4.COM
28/12/15

Version del módulo 9.2.4
Velocidad 19200
Carga el programa. Ve al Serial Monitor.
Escribe en un navegador 192.168.1.5

***********/

#include <SoftwareSerial.h>

#define DEBUG true

SoftwareSerial esp8266(3,2); 
// El TX del módulo al terminal 3 del Arduino.
// El RX del módulo al terminal 2 del Arduino.
void setup()
{
pinMode(13,OUTPUT);
Serial.begin(9600);
esp8266.begin(19200); // Importante la velocidad del módulo.

sendData("AT+RST\r\n",2000,DEBUG); // Borra la configuración que tenía el módulo
sendData("AT+CWJAP=\"nombredeturedwifi\",\"contraseñadelwifi\"\r\n", 2000, DEBUG);
delay(5000); // Espera un poco que conecte con el Router.
sendData("AT+CWMODE=3\r\n",1000,DEBUG); // Modo de cliente y servidor.
sendData("AT+CIFSR\r\n",1000,DEBUG); // En el Serial Monitor aparece la IP de cliente y servidor.
sendData("AT+CIPMUX=1\r\n",1000,DEBUG); // Multiples conexiones.
sendData("AT+CIPSERVER=1,80\r\n",1000,DEBUG); // El Puerto web es el 80
}

void loop()
{
if(esp8266.available()) // Consulta si el módulo está enviando algún mensaje
{

if(esp8266.find("+IPD,"))
{
delay(1000);

int connectionId = esp8266.read()-48; 
// Aquí las construcción de la página.

String webpage = "<head><meta http-equiv=\"refresh\" content=\"4\"></head>";
webpage += "<h1>KIO4.COM</h1>";
webpage += "Estado del pulsador 8: ";
int p8 = digitalRead(8);
webpage += p8;
webpage += "<br>Estado del pulsador 9: ";
int p9 = digitalRead(9);
webpage += p9;

String cipSend = "AT+CIPSEND=";
cipSend += connectionId;
cipSend += ",";
cipSend +=webpage.length();
cipSend +="\r\n";

sendData(cipSend,1000,DEBUG);
sendData(webpage,1000,DEBUG);

// Cierra la conexión
String closeCommand = "AT+CIPCLOSE="; 
closeCommand+=connectionId;
closeCommand+="\r\n";

sendData(closeCommand,3000,DEBUG);
}
}
}

// Función para Enviar datos al Servidor.
String sendData(String command, const int timeout, boolean debug)
{
String response = "";
esp8266.print(command); // Envía la información de command al servidor
long int time = millis();

while( (time+timeout) > millis())
{
while(esp8266.available())
{
// A response van los datos que regresan al servidor.
char c = esp8266.read(); // Va leyendo caracter a caracter.
response+=c; 
} 
}

if(debug)
{
Serial.print(response);
} 
return response;
}

- Aquí observamos la IP que debemos poner en un navegador web, en mi caso: 192.168.1.5
- También observamos que el Serial Monitor está a 9600.

- Esta es otra manera de poner la contraseña en el código:

#include <SoftwareSerial.h>
// Escribimos la SSD del Router y nuestra contraseña.
#define router "MIROUTER"
#define contrasena "MICONTRASEÑA"

sendData("AT+CWJAP=\""router"\",\""contrasena"\"\r\n\n", 2000, DEBUG);

_____________________________________
5.- Visualización en un navegador web.

- Una vez cargado el programa vamos a un navegador web y escribimos: 192.168.1.5

Obtendremos esto...

El módulo wifi ESP8266 es un servidor web (192.168.1.5) y está enviando información del Arduino.

La página se refresca cada 3 segundos.

Consulta el Serial Monitor para que la información que llega al módulo Wifi y que presenta en el Serial Monitor.

Si has llegado hasta aquí, todo ha sido un éxito, pero esto no ha terminado...

_____________________________________
6.- Al activar dos pulsadores cambia la información de la pagina web anterior.

- Aunque este proyecto funcionaría con dos pulsadores, para simplificarlo vamos a utilizar solamente uno en el terminal 9. El otro pulsador iría al terminal 8 del Arduino.
- En el código que hemos cargado ya está escrito el algoritmo de detección del pulsador 8 y 9.

Al activar el pulsador, cambiará la página web. Debemos dejarlo pulsado hasta que se refresque la página.

La página web se refresca automáticamente cada 4 segundos, según se ha establecido en el código.

_____________________________________
7.- Observamos en la web el valor de un potenciómetro.

- Es un código parecido al anterior.

- Al mover el potenciómetro, su valor se muestra en una página web.

- La página web se refresca automáticamente cada 4 segundos, según se ha establecido en el código.

- Se puede mapear el valor obtenido como vimos en el tutorial del potenciómetro.

- En vez de un potenciómetro podríamos haber puesto una LDR, un sensor de temperatura y humedad (DH11), de presión,...

Código
/***********
Juan A. Villalpando
KIO4.COM
28/12/15

Version del módulo 9.2.4
Velocidad 19200
Carga el programa. Ve al Serial Monitor.
Escribe en un navegador 192.168.1.5
Verás el valor de potenciómetro

Conecta un potenciómetro: el terminal central al ANALOG-A2, un terminal a Vcc y el otro a GND. 

***********/

int P2 = A2; // ANALOG IN: A2, va al terminal intermedio del potenciómetro.
float valor = 0;
#include <SoftwareSerial.h>
#define DEBUG true

SoftwareSerial esp8266(3,2); 
// El TX del módulo al terminal 3 del Arduino.
// El RX del módulo al terminal 2 del Arduino.
void setup()
{
pinMode(13,OUTPUT);

Serial.begin(9600);
esp8266.begin(19200); // Importante la velocidad del módulo.

sendData("AT+RST\r\n",2000,DEBUG); // Borra la configuración que tenía el módulo
sendData("AT+CWJAP=\"nombredeturouter\",\"contraseñadelrouter\"\r\n", 2000, DEBUG);
delay(5000); // Espera un poco que conecte con el Router.
sendData("AT+CWMODE=3\r\n",1000,DEBUG); // Modo de cliente y servidor.
sendData("AT+CIFSR\r\n",1000,DEBUG); // En el Serial Monitor aparece la IP de cliente y servidor.
sendData("AT+CIPMUX=1\r\n",1000,DEBUG); // Multiples conexiones.
sendData("AT+CIPSERVER=1,80\r\n",1000,DEBUG); // El Puerto web es el 80
}

void loop()
{
valor = analogRead(P2);
if(esp8266.available()) // Consulta si el módulo está enviando algún mensaje
{

if(esp8266.find("+IPD,"))
{
delay(1000);

int connectionId = esp8266.read()-48; 
// Aquí las construcción de la página con dos formularios.

String webpage = "<head><meta http-equiv=\"refresh\" content=\"4\"></head>";
// String webpage = "<head></head>";
webpage += "<h1>KIO4.COM</h1>";
webpage += "Valor: ";
webpage += valor;

String cipSend = "AT+CIPSEND=";
cipSend += connectionId;
cipSend += ",";
cipSend +=webpage.length();
cipSend +="\r\n";

sendData(cipSend,1000,DEBUG);
sendData(webpage,1000,DEBUG);

// Cierra la conexión
String closeCommand = "AT+CIPCLOSE="; 
closeCommand+=connectionId;
closeCommand+="\r\n";

sendData(closeCommand,3000,DEBUG);
}
}
}

// Función para Enviar datos al Servidor.
String sendData(String command, const int timeout, boolean debug)
{
String response = "";
esp8266.print(command); // Envía la información de command al servidor
long int time = millis();

while( (time+timeout) > millis())
{
while(esp8266.available())
{
// A response van los datos que regresan al servidor.
char c = esp8266.read(); // Va leyendo caracter a caracter.
response+=c; 
} 
}

if(debug)
{
String variable;
Serial.print(response);
} 
return response;
}

____________________________________________________________________
____________________________________________________________________
____________________________________________________________________
____________________________________________________________________
Aquí tenemos el caso contrario...

_____________________________________
8.- Presenta un página web (192.168.1.5) con dos botones, con ellos podemos encender o apagar el LED13 del Arduino.

Código
/***********
Juan A. Villalpando
KIO4.COM
28/12/15

Version del módulo 9.2.4
Velocidad 19200
Carga el programa. Ve al Serial Monitor.
Escribe en un navegador 192.168.1.5
Pulsa los botones para encender o apagar el LED13 del Arduino.

***********/

#include <SoftwareSerial.h>

#define DEBUG true

SoftwareSerial esp8266(3,2); 
// El TX del módulo al terminal 3 del Arduino.
// El RX del módulo al terminal 2 del Arduino.
void setup()
{
pinMode(13,OUTPUT);
Serial.begin(9600);
esp8266.begin(19200); // Importante la velocidad del módulo.

sendData("AT+RST\r\n",2000,DEBUG); // Borra la configuración que tenía el módulo
sendData("AT+CWJAP=\"nombredeturouter\",\"contraseñadelrouter\"\r\n", 2000, DEBUG);
delay(5000); // Espera un poco que conecte con el Router.
sendData("AT+CWMODE=3\r\n",1000,DEBUG); // Modo de cliente y servidor.
sendData("AT+CIFSR\r\n",1000,DEBUG); // En el Serial Monitor aparece la IP de cliente y servidor.
sendData("AT+CIPMUX=1\r\n",1000,DEBUG); // Multiples conexiones.
sendData("AT+CIPSERVER=1,80\r\n",1000,DEBUG); // El Puerto web es el 80
}

void loop()
{
if(esp8266.available()) // Consulta si el módulo está enviando algún mensaje
{

if(esp8266.find("+IPD,"))
{
delay(1000);

int connectionId = esp8266.read()-48; 
// Aquí las construcción de la página con dos formularios.
String webpage = "<h1>KIO4.COM</h1>";
webpage += "<form method=\"get\" action=\"/enci\">";
webpage += "<button type=\"submit\">ENCIENDE</button></form>";
webpage += "<form method=\"get\" action=\"/apag\">";
webpage += "<button type=\"submit\">APAGA</button></form>";


String cipSend = "AT+CIPSEND=";
cipSend += connectionId;
cipSend += ",";
cipSend +=webpage.length();
cipSend +="\r\n";

sendData(cipSend,1000,DEBUG);
sendData(webpage,1000,DEBUG);

// Cierra la conexión
String closeCommand = "AT+CIPCLOSE="; 
closeCommand+=connectionId;
closeCommand+="\r\n";

sendData(closeCommand,3000,DEBUG);
}
}
}

// Función para Enviar datos al Servidor.
String sendData(String command, const int timeout, boolean debug)
{
String response = "";
esp8266.print(command); // Envía la información de command al servidor
long int time = millis();

while( (time+timeout) > millis())
{
while(esp8266.available())
{
// A response van los datos que regresan al servidor.
char c = esp8266.read(); // Va leyendo caracter a caracter.
response+=c;

// Consulta si en la información que regresa al servidor
// viene "GET /enci" o "GET /apag"
// Encenderá o apagará el LED13 del Arduino

if(response.indexOf("GET /enci") >0){
// Serial.print("enciende");
digitalWrite(13,HIGH);
}
if(response.indexOf("GET /apag") >0){
//Serial.print("apaga");
digitalWrite(13,LOW);;
}

} 
}

if(debug)
{
Serial.print(response);
} 
return response;
}


 

Se encenderá o apagará el LED13 del Arduino según el botón pulsado.

En la figura de la derecha se observa que cuando pulsamos un botón llega la información GET /enci? o GET /apag?.

El código, mediante un par de if, distingue si ha llegado esta información y pone el terminal 13 a HIGH o LOW.

Mejora:

En el código se podría quitar el GET / y dejar solo el enci y el apag.

if(response.indexOf("enci")

if(response.indexOf("apag")

_____________________________________
9.- Presenta un página web (192.168.1.5) con dos botones y enlaces, con ellos podemos encender o apagar el LED13 del Arduino. Además se verá el estado del LED13 (Encendido=1 o Apagado=0).

- Es un código similar a los anteriores. Además de los dos botones, he puesto dos enlaces.

- El refresco de la página es problemático y a veces se desconecta.

Código
/***********
Juan A. Villalpando
KIO4.COM
28/12/15

Version del módulo 9.2.4
Velocidad 19200
Carga el programa. Ve al Serial Monitor.
Escribe en un navegador 192.168.1.5
Pulsa los botones para encender o apagar el LED13 del Arduino.
En la web se ve el estado del LED13

***********/

#include <SoftwareSerial.h>

#define DEBUG true

SoftwareSerial esp8266(3,2); 
// El TX del módulo al terminal 3 del Arduino.
// El RX del módulo al terminal 2 del Arduino.
void setup()
{
pinMode(13,OUTPUT);
Serial.begin(9600);
esp8266.begin(19200); // Importante la velocidad del módulo.

sendData("AT+RST\r\n",2000,DEBUG); // Borra la configuración que tenía el módulo
sendData("AT+CWJAP=\"nombredeturouter\",\"contraseñadelrouter\"\r\n", 2000, DEBUG);
delay(5000); // Espera un poco que conecte con el Router.
sendData("AT+CWMODE=3\r\n",1000,DEBUG); // Modo de cliente y servidor.
sendData("AT+CIFSR\r\n",1000,DEBUG); // En el Serial Monitor aparece la IP de cliente y servidor.
sendData("AT+CIPMUX=1\r\n",1000,DEBUG); // Multiples conexiones.
sendData("AT+CIPSERVER=1,80\r\n",1000,DEBUG); // El Puerto web es el 80
}

void loop()
{
if(esp8266.available()) // Consulta si el módulo está enviando algún mensaje
{

if(esp8266.find("+IPD,"))
{
delay(1000);

int connectionId = esp8266.read()-48; 
// Aquí las construcción de la página con dos formularios.

String webpage = "<head><meta http-equiv=\"refresh\" content=\"4\"></head>";
webpage += "<h1>KIO4.COM</h1>";
webpage += "<form method=\"get\" action=\"/enci\">";
webpage += "<button type=\"submit\">ENCIENDE</button></form>";
webpage += "<form method=\"get\" action=\"/apag\">";
webpage += "<button type=\"submit\">APAGA</button></form>";
webpage += "Estado del LED13: ";
int p13 = digitalRead(13);
webpage += p13;
// Además de botones también lo he puesto con enlaces
webpage += "<br><br><a href=\"enci\">ENCIENDE</a>";
webpage += "<br><br><a href=\"apag\">APAGA</a>";


String cipSend = "AT+CIPSEND=";
cipSend += connectionId;
cipSend += ",";
cipSend +=webpage.length();
cipSend +="\r\n";

sendData(cipSend,1000,DEBUG);
sendData(webpage,1000,DEBUG);

// Cierra la conexión
String closeCommand = "AT+CIPCLOSE="; 
closeCommand+=connectionId;
closeCommand+="\r\n";

sendData(closeCommand,3000,DEBUG);
}
}
}

// Función para Enviar datos al Servidor.
String sendData(String command, const int timeout, boolean debug)
{
String response = "";
esp8266.print(command); // Envía la información de command al servidor
long int time = millis();

while( (time+timeout) > millis())
{
while(esp8266.available())
{
// A response van los datos que regresan al servidor.
char c = esp8266.read(); // Va leyendo caracter a caracter.
response+=c;

// Consulta si en la información que regresa al servidor
// viene "GET /enci" o "GET /apag"
// Encenderá o apagará el LED13 del Arduino

if(response.indexOf("GET /enci") >0){
// Serial.print("enciende");
digitalWrite(13,HIGH);
}
if(response.indexOf("GET /apag") >0){
//Serial.print("apaga");
digitalWrite(13,LOW);;
}

} 
}

if(debug)
{
Serial.print(response);
} 
return response;
}

- La parte del refresco de página para comprobar el estado del LED13 hace que se desconecte el módulo.

- Una mejora sería quitar el refresco de página...

//String webpage = "<head><meta http-equiv=\"refresh\" content=\"4\"></head>";
String webpage = "<head></head>";

- Pulsar sobre los enlaces en vez de los botones. Pulsar sobre ENCENDIDO, esperar unos 6 segundos, volver a pulsar ENCENDIDO, de esta manera en la segunda vez leerá el estado del LED13

- Con el apagado lo mismo, pulsamos una vez esperamos un poco y luego pulsamos otra vez.

_____________________________________________________

Otra forma de hacer la conexión.

Código
Serial.begin(9600);
  esp8266.begin(19200); // Importante la velocidad del módulo.  

  Serial.print("AT+RST\r\n"); // Borra la configuración que tenía el módulo
  Serial.print("AT+CWJAP=\"nombredeturouter\",\"contraseñadelrouter\"\r\n");
  delay(5000); // Espera un poco que conecte con el Router.
  Serial.print("AT+CWMODE=3\r\n"); // Modo de cliente y servidor.
  Serial.print("AT+CIFSR\r\n"); // En el Serial Monitor aparece la IP de cliente y servidor.
  Serial.print("AT+CIPMUX=1\r\n"); // Multiples conexiones.
  Serial.print("AT+CIPSERVER=1,80\r\n"); // El Puerto web es el 80
  //Serial.print("AT+CIPSTART=\"TCP\",\"192.168.1.5\",80");

_____________________________________
10.- Intranet. Internet.

- Ya hemos visto el funcionamiento de este módulo en nuestra red local. También podría funcionar en Internet.

- Para ello vamos a la configuración de nuestro Router (192.168.1.1), ponemos nombre y contraseña y entramos en la configuración.

- Abrimos el puerto 80 a la IP del módulo: 192.168.1.5

- Por otra parte entramos en esta página de internet: http://www.showmemyip.com/ Nos mostrará nuestra IP pública.

- Ahora vamos a un navegador en cualquier sitio, escribimos la dirección de la IP pública y podremos conectarnos a nuestro módulo ESP8266

_____________________________________

11.- Alimentación con módulo externo.

En este tutorial puedes obtener más información

- Al módulo lo alimentamos con una fuente de alimentación

 

 

http://allaboutee.com/2015/01/02/esp8266-arduino-led-control-from-webpage/

________________________________

- Mi correo:
juana1991@yahoo.com
- KIO4.COM - Política de cookies. Textos e imágenes propiedad del autor:
© Juan A. Villalpando
No se permite la copia de información ni imágenes.
Usamos cookies propias y de terceros que entre otras cosas recogen datos sobre sus hábitos de navegación y realizan análisis de uso de nuestro sitio.
Si continúa navegando consideramos que acepta su uso. Acepto    Más información