Analítica web
Reflexiones desde el mercado español de Analítica Web

Google Analytics y Arduino: primeros experimentos

Se lee en 4 minutos

¿Crees que se puede medir todo? El ya conocido Internet of Things (IoT) cada día está más presente en nuestros días pero, ¿podemos aplicarlo a nuestros propios proyectos de una manera sencilla?

Ya es de sobra conocido el hecho de que podemos recoger sucesos dentro del mundo real, procesarlos y cuantificarlos, y después enviar los valores resultantes a Google Analytics, que nos provee de todas las herramientas necesarias para interpretar el dato recogido. Bien, vamos a comprobarlo. Disculpadme si en algún punto el post se vuelve un poco “electrónico”, pero no puedo, si no, dejar aflorar mi verdadera identidad ingenieril 😉

En nuestro caso, vamos a utilizar la tecnología de Arduino, para recoger los valores de algunos sensores que conectaremos a nuestra placa: temperatura, presión, CO2, altura, corriente, voltaje, movimiento, interruptores, etc. (realmente las posibilidades son infinitas) y enviarlos como si de una baliza se tratara, cada cierto tiempo, a Google Analytics, para que almacene los datos.

arduino-mega-2560

Para este mini-proyecto utilizaremos un sensor de temperatura y enviaremos un evento por minuto a Google Analytics a través del módulo WiFi con la siguiente configuración:

eventCategory Arduino
eventAction sensor-temperatura
eventLabel N (donde N es un nº entero, que informa la temperatura en ºC)

Sin profundizar demasiado en la configuración necesaria dentro de Arduino, y no bajar demasiado al nivel puro de electrónica y/o código el post, os incluyo la parte más importante del código, que es la petición POST. Así, cada uno pueda investigar por su buena cuenta y riesgo:

// Funcion loop de Arduino
void loop() {

 // Leemos el valor de la entrada analógica A0 (donde tenemos conectado el sensor de temp.)
 int val = analogRead(A0);
 val = map(val, 0, 1023, 0, 50); // mapeamos el valor del sensor a los valores máximo (50ºC) y mínimo (0ºC) del rango que admiten.
 sensorValor = val;

 // Estructuramos el evento a enviar
 String objetoPost = "v=";
 objetoPost += versionTracker;
 objetoPost += "&tid=";
 objetoPost += trackingID;
 objetoPost += "&cid=";
 objetoPost += idDispositivo;
 objetoPost += "&t=";
 objetoPost += eventoTipo;
 objetoPost += "&ec=";
 objetoPost += eventoCategoria;
 objetoPost += "&ea=";
 objetoPost += eventoAccion;
 objetoPost += "&el=";
 objetoPost += sensorValor;
 objetoPost += "&ev=";
 objetoPost += "1";
 
 //---------enviamos las variables al servidor---------------------
 
 // Nos conectamos al servidor de Google Analytics
 SerialESP8266.println("AT+CIPSTART=\"TCP\",\"" + server + "\",80");

 // Si recibimos OK por parte del módulo WiFi comenzamos
 if( SerialESP8266.find("OK"))
 { 
 // Preparamos el encabezado de la petición POST
 String peticionHTTP= "POST /collect HTTP/1.1\r\n";
 peticionHTTP=peticionHTTP+"Host: www.google-analytics.com\r\n";
 peticionHTTP=peticionHTTP+"Content-Length: "+objetoPost.length()+"\r\n\r\n";
 peticionHTTP=peticionHTTP+objetoPost+"\r\n";

 //Enviamos el tamaño en caracteres de la peticion HTTP (necesario) 
 SerialESP8266.print("AT+CIPSEND=");
 SerialESP8266.println(peticionHTTP.length());

 //esperamos a ">" para enviar la petición HTTP
 if(SerialESP8266.find(">")){
 SerialESP8266.println(peticionHTTP);
 if( SerialESP8266.find("SEND OK")){ 
 boolean fin_respuesta=false; 
 long tiempo_inicio=millis(); 
 cadena="";
 
 while(fin_respuesta==false){
 while(SerialESP8266.available()>0){
 char c=SerialESP8266.read();
 Serial.write(c);
 cadena.concat(c); //guardamos la respuesta en el string "cadena"
 }
 //finalizamos si la respuesta es mayor a 500 caracteres
 if(cadena.length()>500){ 
 SerialESP8266.println("AT+CIPCLOSE");
 if( SerialESP8266.find("OK"))
 fin_respuesta=true;
 }
 if((millis()-tiempo_inicio)>10000){
 SerialESP8266.println("AT+CIPCLOSE");
 if( SerialESP8266.find("OK"))
 fin_respuesta=true;
 }
 if(cadena.indexOf("CLOSED")>0){
 fin_respuesta=true;
 }
 } 
 } 
 }
 }
 
 //-------------------------------------------------------------------------------
 delay(5000); //pausa de 5seg antes de conectarse nuevamente al servidor
}

Resumen de los pasos realizados:

1. Actualización del firmware del módulo WiFi con la librería necesaria para recibir comandos AT. Se necesita un adaptador de puerto serie a USB (por ejemplo, el FT232RL FTDI) y realizar bien el cableado (hay que puentear una resistencia entre dos pins del ESP8266 para poner el módulo en modo escritura).

2. Conexión del módulo WiFi a nuestra placa Arduino Mega2560, a través de un nivelador de voltaje o level shifter (cuidado en este punto, el sensor trabaja con 3,3V y nuestra placa con 5V). Como en determinados momentos el módulo WiFi consume bastante corriente, y puede llegar a reiniciarse, lo alimentamos mediante un módulo de potencia independiente –en nuestro proyecto hemos utilizado un módulo de alimentación para protoboards–.

3. Conexión del sensor de temperatura y humedad DHT11 a la placa Arduino Mega2560. Para ello nos apoyamos en los esquemas existentes en la red.

4. Añadimos las librerías necesarias a nuestro proyecto en el IDE de Arduino, y lo compilamos.

5. Por último, creamos en Google Analytics una propiedad y una vista en nuestra cuenta, que será la que reciba los datos del sensor, y la configuramos en el programa para que sea a la que se envíen los datos.
arduinada

Una vez configurado y compilado todo, encendemos la placa y abrimos la vista de Google Analytics que tenemos configurada para la recepción de los datos. Podemos ver que, al encender el sistema, en tiempo real se reciben correctamente los valores de temperatura que lee el sensor:

20180607_capturaPicPick_011

Una vez que ya tenemos los datos disponibles en Google Analytics, podemos trabajar con ellos, realizar informes, dashboards, reports de Data Studio, etc. Las posibilidades en el caso de explotación del dato, como bien sabéis los analistas, son infinitas.

¿Hasta dónde se puede llegar? ¿Qué datos podemos sacar y estudiar? Aplicado a una oficina, por ejemplo, se me ocurre que podemos medir temperaturas de forma continuada, como hemos hecho en este post, pero también concentraciones de dióxido de carbono, humedad, presión ambiental o luz natural. Y aún podemos llegar a un nivel más loco si cabe: se pueden contar las veces que se abren las puertas, medir el flujo diario de personal, el consumo eléctrico de la oficina, medir la ocupación real de las salas de reunión con un sensor de presencia o infrarrojo, el nivel de ruido o de luz en cada una de las salas de trabajo. Todo lo que seas capaz de imaginar, casi seguro que se puede medir.

Como se suele decir en estos casos, el límite solo lo marca la imaginación, pero puede ser que esta expresión, tan utilizada en el tiempo que vivimos, sea hoy más real que nunca.

 

*Fuente de las imágenes: Kelly Sikkema (principal) y elaboración propia.

Escribe tu comentario

dieciseis + tres =

Navegar