Arduino (IoT): Simple Tutorial Estación Ambiental Parte I

Arduino Honduras Santiapps Marcio Valenzuela
Arduino Honduras

Tutorial Estación Ambiental: Parte I

En este tutorial combinaremos 2 habilidades electrónicas que hemos aprendido:

  1. Colectar datos en sensores digitales
  2. Comunicar datos via WiFi

Incorporaremos una habilidad distinta que no es precisamente de Arduino pero si de IoT.  La habilidad de recibir datos en un servidor en la web.

Requisitos:

  1. Computadora (mac)
  2. Arduino MEGA (u otra variante Arduino) o incluso Arduino clone, Edison, Raspberry…  Este tutorial en particular usa una Arduino MEGA.
  3. Wifi Shield & WiFi Library
  4. Grove Shield con Sensor CO2 y/o Dust Sensor
  5. Servidor PHP (hay servicios gratuitos de php por ejemplo: http://www.000webhost.com/) o Parse.com
  6. Arduino IDE (https://www.arduino.cc/en/Main/Software)
Arduino TinySine WiFi Grove Air Monitor
Arduino TinySine WiFi Grove Air Monitor

 

Aquí tenemos la Arduino UNO debajo de la TinySine WiFi inter-conectada a la Grove Shield.

Lo que vamos a querer hacer es tomar muestras cada 100,000 ms usando el Dust Sensor y postear la data a un servidor usando php & MySQL como base de datos.  En mi caso particular tengo un servidor con MySQL database y una pagina sencilla de código php para recibir datos de un cliente y grabarlos a la base de datos.  Los servicios PHP por lo general son gratis.  Con un código como este puedes recibir datos e un cliente y postearlo a la base de datos:

<?php
$conex = mysql_connect("localhost", "usuario", "clave");
if(!$conex){
die("Couldn't connect to the server...<br />".mysql_error());
}
$db = mysql_select_db("test", $conex);
if(!$db){
die("Couldn't connect to the database...<br />".mysql_error());
}
$dato1 = $_POST['dato1'];
$dato2 = $_POST['dato2'];
$sql = "INSERT INTO example (co2,dust,fuente) VALUES ('$dato1','$dato2',"Arduino")";
$res = mysql_query($sql, $conex);
?>

También podríamos usar un servicio mas especializado como Parse.com.  Para Parse.com puedes usar un código sencillo como jQuery así:

Parse.initialize(“APPKEY”, “JSKEY”);
var TestObject = Parse.Object.extend(“TestObject”);
var testObject = new TestObject();
testObject.save({foo: “bar”}, {
success: function(object) {
$(“.success”).show();
},
error: function(model, error) {
$(“.error”).show();
}
});
Pero regresemos al proyecto en mano.  La idea es poder postear datos a un servidor, ya sea a traves de php o jquery.  Asi que veamos como usar WiFi para comunicar datos a un servidor via HTTP.  Estas son funciones mas avanzadas y por ende usaremos nuevamente una library.  La library es una serie de archivos de código que agrupan las funciones mas comunes de un dispositivo (sensor o WiFi o BT) para darle al programador una serie de funciones amigables con cuales interactuar.

Veamos el codigo por partes:

int pin = 8;
unsigned long duration;
unsigned long starttime;
unsigned long sampletime_ms = 30000;
unsigned long lowpulseoccupancy = 0;
float ratio = 0;
float concentration = 0;
#include <WiFlyHQ.h>
#include <SoftwareSerial.h>
SoftwareSerial wifiSerial(2,3);
WiFly wifly;
String data;
const char mySSID[] = "linksys";
const char myPassword[] = "miclave";
const char site[] = "miservidor.com";
void terminal();

Aquí iniciamos las mismas constantes de antes cuando usamos el sensor de Dust pero adicionalmente iniciamos algunas constantes para el WiFly module.  Hacemos otras cosas en el setup que imprimen datos del modulo y su estado al Monitor Serial.

Veamos el código completo aqui…

Arduino WiFi Dust Grove Sensor

Los resultados deberían poderse verificar tanto en el Monitor Serial como en la base de datos configurada para recibir los datos.  Si los datos aparecen en el Monitor Serial pero no en la base de datos, seguramente tiene alguna problema con la comunicación HTTP y deberá revisar los logs de su servidor para verificar lo que el servidor esta recibiendo de la MEGA y lo que responde.  Ademas puede verificarse los ingresos a la base de datos con un simple php query al MySQL db:

id: 46 – Name: Arduino 3885
id: 47 – Name: Arduino 4413
id: 48 – Name: Arduino 4047
id: 49 – Name: Arduino 2619
id: 50 – Name: Arduino 2938
id: 51 – Name: Arduino 5090
id: 52 – Name: Arduino 2858
id: 53 – Name: Arduino 3181
id: 54 – Name: Arduino 2842
id: 55 – Name: Arduino 2498
id: 56 – Name: Arduino 4518

Ok ahora nuestro robot tiene la habilidad de tomar muestras de aire.  Deberemos incorporarle el código para muestra el CO2 también para poderlo reportar al servidor.

Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s