Introduccion
Actualmente el Iot(internet of thing) es una tendencia en el mundo que va creciendo cada dias mas, sin duda comenzar a experimentar con pequeños proyectos nos brinda la oportunidad de conocer lo importante y critico que resulta el desarrollo de aplicaciones que controlen aparatos electricos.
Desarrollo
Voy a mostrar en este tutorial como encender o apagar un foco de forma remota a-traves de una aplicacion web, usando un servicion Rest de por medio.
Materiales
Arduino yun
Sensor de corriente para arduino con una corriente maxima de 5A
Rele para arduino con un soporte de hasta 220v
Foco o lampara.
Conocimientos Previos
Se necesita conocimientos previos en C++
Servicio Rest
Rest deriva de «Representational State Transfer» es un estilo de arquitectura software para desarrollar servicios. Los servicios web que siguen este estilo deben cumplir con las siguientes premisas.
Cliente y Servidor .- Definen un interface de comunicación entre ambos separando completamente las responsabilidades entre ambas partes
Sin Estado .- Son servicios web que no mantienen estado asociado al cliente.Cada petición que se realiza a ellos es completamente independiente de la siguiente . Todas las llamadas al mismo servicio serán idénticas.
Cache : El contenido de los servicios web REST se pueden cachear de tal forma que una vez realizada la primera petición al servicio el resto puedan apoyarse en la cache si fuera necesario.
Servicios Uniformes :Todos lo servicios REST compartirán una forma de invocación y métodos uniforme utilizando los metodos GET,POST,PUT ,DELETE.
Arquitectura en Capas: Todos los servicios REST estan orientados hacia la escalabilidad y un cliente REST no será capaz de distinguir entre si esta realizando una petición directamente al servidor , o se lo esta devolviendo un sistema de caches intermedio o por ejemplo existe un balanceador que se encarga de redirigirlo a otro servidor.
Pero una particular de un servicio rest es que sufre «amnecia completa» es decir si un cliente realiza una peticion a un servidor, la proxima vez que el cliente realice la misma peticion el servidor no recordara quien ese cliente y tambien si ese paquete es el mismo.
Afortunadamente Arduino yun tiene ya implementado las dos capas de redes de datos dentro de su infraestructura(Capa de red y de la Capa de enlace de datos), ademas contiene librerias para realizar el levantamiento del servicio.
Configuracion del Arduino Yun
1.- Conectar el arduino Yun a la computadora
2.- Se necesita resetear el wifi del arduino Yun. Nos ubicamos en el boton de reset del arduino Yun.
Dejamos presionado el boton de reset de wifi durante 30 segundos. Esto provocara que se reinicie las configuraciones por defecto del Yun.
Debemos tomar en cuenta que el Arduno Yún tiene un comportamiento similar al de un router WIFI, por lo que cuando lo conectemos no tendremos el WIFI disponible de inmediato, sino que será necesario esperar al menos un minuto hasta que se habilite la red inalámbrica.
Una vez se haya habilitado la red inalámbrica, nos vamos las redes inalámbricas de Windows, donde veremos disponible una red llamada ArduinoYún-XXXXXXXXXXX.
Nos conectamos a la red del arduino y en un navegador escribimos arduino.local.
Si al escribir arduino.local te sale un mensaje de error, entonces busca a que ip esta asociada la red del arduino y pegala en el browser y da enter!.
Inmediantamente se te aparecera una pantalla solicitando que ingreses una contraseña para entrar a la pantalla de configuraciones(por defecto es «arduino»).
Si no logras entrar con esa contraseña adjunto un programa que deberan cargarlo en el IDE de arduino,ejecutarlo y posteriormente abrir un terminal y debera mostrarse una interfaz como esta.
#include <BridgeServer.h>
#include <BridgeClient.h>
Bridge.begin();
time = millis();
// For debugging, wait until the serial console is connected
while(!Serial);
Serial.begin(9600);
if (!date.running()){
date.begin(«date»);
date.addParameter(«+%T»);
date.run();
}
pinMode(RELAY_PIN,OUTPUT);
server.listenOnLocalhost();
server.begin();
void loop() {
BridgeClient client = server.accept();
if (client) {
// Process request
process(client);
// Close connection and free resources.
client.stop();
}
// read the command
String command = client.readStringUntil(‘/’);
// is «digital» command?
if (command == «digital») {
digitalCommand(client);
}
// is «analog» command?
if (command == «analog») {
analogCommand(client);
}
// is «mode» command?
if (command == «mode») {
modeCommand(client);
}
}
int pin, value;
// Read pin number
pin = client.parseInt();
// If the next character is a ‘/’ it means we have an URL
// with a value like: «/digital/13/1»
if (client.read() == ‘/’) {
value = client.parseInt();
digitalWrite(pin, value);
}
else {
value = digitalRead(pin);
}
// Send feedback to client
client.print(F(«Pin D»));
client.print(pin);
client.print(F(» set to «));
client.println(value);
// Update datastore key with the current pin value
String key = «D»;
key += pin;
Bridge.put(key, String(value));
}
int pin, value;
// Read pin number
pin = client.parseInt();
// If the next character is a ‘/’ it means we have an URL
// with a value like: «/analog/5/120»
if (client.read() == ‘/’) {
// Read value and execute command
value = client.parseInt();
analogWrite(pin, value);
// Send feedback to client
client.print(F(«Pin D»));
client.print(pin);
client.print(F(» set to analog «));
client.println(value);
// Update datastore key with the current pin value
String key = «D»;
key += pin;
Bridge.put(key, String(value));
}
else {
// Read analog pin
value = analogRead(pin);
// Send feedback to client
client.print(F(«Pin A»));
client.print(pin);
client.print(F(» reads analog «));
client.println(value);
// Update datastore key with the current pin value
String key = «A»;
key += pin;
Bridge.put(key, String(value));
}
return ;
}
void modeCommand(BridgeClient client) {
int pin;
// Read pin number
pin = client.parseInt();
// If the next character is not a ‘/’ we have a malformed URL
if (client.read() != ‘/’) {
client.println(F(«error»));
return;
}
String mode = client.readStringUntil(‘\r’);
if (mode == «input») {
pinMode(pin, INPUT);
// Send feedback to client
client.print(F(«Pin D»));
client.print(pin);
client.print(F(» configured as INPUT!»));
return;
}
if (mode == «output») {
pinMode(pin, OUTPUT);
// Send feedback to client
client.print(F(«Pin D»));
client.print(pin);
client.print(F(» configured as OUTPUT!»));
return;
}
client.print(F(«error: invalid mode «));
client.print(mode);
}
<html>
<head>
<meta charset=»utf-8″>
<script type=»text/javascript» src=»script-arduino.js»></script>
<script type=»text/javascript» src=»jquery-3.1.1.min.js»></script>
<link rel=»stylesheet» type=»text/css» href=»style.css»>
<title>Control_Remoto-Luz</title>
</head>
<body>
<h1>
Control Remoto de Luz
</h1>
<form id=»relay» method=»GET» accept-charset=»utf-8″>
<input type=»button» name=»» value=»On» id=»on» class=»commandButton» onclick=»relayOn()» />
<input type=»button» name=»» value=»Off» id=»off» class=»commandButton» onclick=»relayOff()» />
</form>
</body>
</html>
$.get(«update_state.php»,{command:1});
}
function relayOff(){
$.get(«update_state.php»,{command:0});
}
// Create cURL call, make sure to change it with your Yun name
$service_url = ‘http://kevinleonelgrupo1.local/arduino/digital/8/’ . $_GET[«command»];
$curl = curl_init($service_url);
// Send cURL to Yun board
curl_setopt($curl, CURLOPT_IPRESOLVE, CURL_IPRESOLVE_V4 );
$curl_response = curl_exec($curl);
curl_close($curl);
?>
No se han encontrado comentarios