Tutorial acceso por Internet
2.-Programa Arduino:
-byte ip[] = { 192, 168, 1, 15 }; Aquí con 15 definimos la IP interna. Puede ser cualquier valor hasta 254, siempre que no esté ocupada por otro dispositivo.
-byte gateway[] = { 192, 168, 1, 1 }; Es la IP de nuestro router. A veces es 192.168.0.1 y habría que cambiar la IP interna con el cero.
-EthernetServer server(100); Es el puerto por el que queremos acceder a la IP. Podemos usar el que queramos.
-Lo siguiente es generar una página básica para enviar los comandos de ON y OFF sobre el pin 4 y su detección para actuar en consecuencia.
¡Ojo! En la página aparece “Estado: Activado o Desactivado”, esto no nos asegura que la función se haya realizado, para ello tendríamos que hacer una programación con retorno a la página que garantizase la acción.
3.-Acceso desde LAN: Cargado el programa en nuestro Arduino solo nos queda cargar en nuestro navegador o móvil (con wifi) la página generada. Tendremos que teclear 192.168.1.15:100 y veremos dos botones de ON y OFF. Al pulsarlos se envían los comandos 192.168.1.15:100/?lighton=ON o 192.168.1.15:100/?lighton=OFF que encenderán o apagarán el LED. En realidad el programa solo lee la palabra lighton y lightoff para la conmutación.
//Control de Arduino via Internet
//Acceder al control tecleando la IP (desde nuesta LAN local)
// http://192.168.1.15:100
// o desde Internet con http://MiIPexterna:100
//Joaquín Paredes http://www.jopapa.me 2014
#include <SPI.h>
#include <Ethernet.h>
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED }; // mac address
byte ip[] = { 192, 168, 1, 15 }; // ip en nuestra LAN interna de casa. Poner una libre hasta .254
byte gateway[] = { 192, 168, 1, 1 }; // IP de nuestro router
byte subnet[] = { 255, 255, 255, 0 }; //máscara de subred
EthernetServer server(100); //puerto que queremos usar
int Pin4=4;
String readString;
String estado=String(11); //para mostrar en pantalla web el estado del pin 4
void setup(){
pinMode(Pin4, OUTPUT); //pin para control de algo; luz, rele, etc
Ethernet.begin(mac, ip, gateway, subnet);
server.begin();
estado="Desactivado";
}
void loop(){
// Crear un cliente de conexion
EthernetClient client = server.available();
if (client) {
while (client.connected()) {
if (client.available()) {
char c = client.read();
//leer char
if (readString.length() < 100) { //almacena caracteres en string
readString += c; }
if (c == '\n') { //si HTTP a terminado
///////////////////// control pin del arduino
if(readString.indexOf("?lighton") >0) { //¿Esta para activar?
digitalWrite(Pin4, HIGH); //Activamos lo que queramos, luz, rele, motor, etc
estado="Activado";
}
if(readString.indexOf("?lightoff") >0) { //¿Esta para desactivar?
digitalWrite(Pin4, LOW);
estado="Desactivado";
}
//Creamos página WEB que vermoa en nuestro navegador
client.println("HTTP/1.1 200 OK"); //send new page
client.println("Content-Type: text/html");
client.println();
client.println("<HTML>");
client.println("<HEAD>");
client.println("<TITLE>Control Arduino</TITLE>");
client.println("</HEAD>");
client.println("<BODY>");
client.println("<center>");
client.println("<H1>Control Arduino</H1>");
client.println("<hr />");
client.println("<br />");
client.println("<form method=get>");
client.println("<input type=submit style=width:200px;height:75px;font-size:32px;font-weight:bold; name=lighton value=ON>");
client.println("<input type=submit style=width:200px;height:75px;font-size:32px;font-weight:bold; name=lightoff value=OFF>");
client.println("</form>");
client.print("<br><br>");
client.print("<font size='6'>Estado: ");
client.print(estado);
client.println("</BODY>");
client.println("</HTML>");
delay(1);
client.stop(); //detiene client
readString=""; //vaciar string para próxima lectura
}
}
}
}
}
4.-Acceso desde Internet: El punto peliagudo para muchos para configurar el router y la IP externa.
Cada router es diferente. Tenemos que buscar el lugar donde se redirigen los puertos a cada IP interna. En mi router Comtrend está en la opción Virtual Server, ahí decimos que IP vamos a direccionar y que puerto interno y externo a nuestra LAN. En un Linksys esta como Single Port Forwarding
Más problemático es el tema de la IP externa. Si tenemos IP fija, estupendo. Basta con poner en un PC o móvil con tarifa de datos http://MyIP:100 y asunto resuelto. Con IP variable tendremos que contratar un servicio del tipo http://es.dyn.com/remote-access
Espero sea de utilidad
Visto el interés que hay en el control de Arduino vía Internet con el móvil, me he permitido hacer este pequeño tutorial que espero pueda ayudar a algún principiante.
Lo que se trata es poder activar una o más salidas digitales del Arduino por medio de un ordenador o un móvil. Esto permitiría actuar sobre luces, motores, alarmas, climatización, etc… desde cualquier distancia con un ordenador o un móvil con conexión de datos.
La solución se divide en varios apartados.
1.-Hardware: En plan básico, necesitamos un Arduino Uno y una placa Ethernet (Ethernet Shield W5100). Hay otros tipos de placas e incluso soluciones Wifi. Para el ejemplo, conectamos la placa al router y en el pin 4 un diodo LED con su resistencia.