Listado de proveedores DDNS:
http://dnslookup.me/dynamic-dns/
Pasos para hacer funcionar el ethernet shield accediendo desde internet:
Hardware:
Arduino UNO
Ethernet shield con chip W5100
Pasos:
1. Conectar el ethernet shield al arduino
2. Conectar el cable de red y el usb del arduino al pc
3. Para saber la ip que se le asigno al ethernet shield, abrir el sketch Archivo / Ejemplos / Ethernet / DhcpAddressPrinter
4. Cargarlo al arduino y luego abrir el monitor serial. Va a aparecer algo así:
My IP address: 192.168.0.101
Esta dir es la que le dio el DHCP, pero luego en el sketch se puede indicar una IP fija.
5. Cargar este sketch (prueba básica):
#include <SPI.h>
#include <Ethernet.h>
// Enter a MAC address and IP address for your controller below.
// The IP address will be dependent on your local network:
byte mac[] = { 0x00, 0xAA, 0xBB, 0xCC, 0xDA, 0x02 };
IPAddress ip(192,168,0,200); //<<< Esta es la dir fija que le quiero dar al arduino!!!
// Initialize the Ethernet server library
// with the IP address and port you want to use
// (port 80 is default for HTTP):
EthernetServer server(80);
void setup()
{
// start the Ethernet connection and the server:
Ethernet.begin(mac, ip);
server.begin();
}
void loop()
{
// listen for incoming clients
EthernetClient client = server.available();
if (client) {
client.println("prueba");
// give the web browser time to receive the data
delay(1);
// close the connection:
client.stop();
}
}
6. Para poder acceder fuera de la LAN (desde internet):
a. Entrar en el router, ir a Forwarding
b. Agregar uno nuevo de esta forma:
Ojo!!! para que luego se pueda configurar el www.no-ip.com, elegir una ip que esté fuera del rango de DHCP
Para saber cual elegir, entrar a la opción DHCP y fijarse el ultimo numero:
En este caso, podría utilizar la 192.168.0.200, porque la 192.168.0.199 es la máxima dir. que puede asignar el DHCP.
c. Averiguar la ip pública que tiene el router, ir a http://www.whatismyip.com/
d. En un pc cualquiera, poner http://la-direccion-publica-del-router
[EL QUE TIENE LA IP PUBLICA ES EL ROUTER, LUEGO HAY QUE REDIRECCIONAR CON EL PORT FORWARDING EL TRAFICO HACIA LOS DISPOSITIVOS - PC - ETHERNET SHIELD, ETC, ETC]
DynDNS
Dado que las ip's son dinámicas y se renuevan, se pueden hacer dos cosas
1. Se configura el servicio de DynDNS en el router.
2. Se agrega código al arduino para que haga lo mismo que hace el router (ver si la ip cambió y si lo hizo, enviar el cambio)
1. Para hacerlo mediante el router:
2. Para hacerlo desde arduino:
Utilizar este código (para proveedor no-ip.com):
NOTA: En este caso se puso:
GET /nic/update?hostname=crusso.no-ip.org HTTP/1.0
Si se pone:
GET /nic/update?hostname=crusso.no-ip.org&myip=176.32.98.166 HTTP/1.0
Se puede redirigir a una página específica. Si no se pone el parámetro myip, se asignará la ip actual del dispositivo (la que se puede ver en whatismyip.com).
#include <SPI.h>
#include <Ethernet.h>
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED }; //mac address
byte ip[] = { 192,168,0,200 }; //dirección ip del arduino
byte server[] = {8,23,224,120}; //dynupdate.no-ip.com
EthernetClient client;
void setup() {
Ethernet.begin(mac, ip);
Serial.begin(9600);
delay(1000);
Serial.println("Conectando...");
if (client.connect(server, 80)) {
Serial.println("Conexión establecida");
client.println("GET /nic/update?hostname=crusso.no-ip.org HTTP/1.0");
client.println("Host: dynupdate.no-ip.com");
client.println("Authorization: Basic Y2FybG9zLnJ1c3NvQGdtYWlsLmNvbTphYmMxMjM="); //es el mail:password de no-ip, codificado en base64
//para codificarlo: http://www.ludegljive.com/functions/Encode-string-to-base64.aspx
client.println("User-Agent: arduino_ethernet/1.0 carlos.russo@gmail.com");
client.println();
}
else
{
Serial.println("Error, no se puede conectar");
}
}
void loop()
{
if (client.available()) {
char c = client.read();
Serial.print(c);
}
if (!client.connected()) {
Serial.println();
Serial.println("Desconectado");
client.stop();
for(;;)
;
}
}
Utilizar este código (para proveedor dnsdynamic.org):
#include <SPI.h>
#include <Ethernet.h>
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED }; //mac address
byte ip[] = { 192,168,0,200 }; //dirección ip del arduino
byte server[] = {84,45,76,100}; //dnsdynamic.org
EthernetClient client;
void setup() {
Ethernet.begin(mac, ip);
Serial.begin(9600);
delay(1000);
Serial.println("Conectando...");
if (client.connect(server, 80)) {
Serial.println("Conexión establecida");
//client.println("GET /api/?hostname=crusso.fe100.net&myip=176.32.98.166 HTTP/1.0");
client.println("GET /api/?hostname=crusso.fe100.net HTTP/1.0");
client.println("Host: dnsdynamic.org");
client.println("Authorization: Basic Y2FybG9zLnJ1c3NvQGdtYWlsLmNvbTphYmMxMjM="); //es el mail:password de no-ip, codificado en base64
//para codificarlo: http://www.ludegljive.com/functions/Encode-string-to-base64.aspx
client.println("User-Agent: arduino_ethernet/1.0 info@gmail.com");
client.println();
}
else
{
Serial.println("Error, no se puede conectar");
}
}
void loop()
{
if (client.available()) {
char c = client.read();
Serial.print(c);
}
if (!client.connected()) {
Serial.println();
Serial.println("Desconectado");
client.stop();
for(;;)
;
}
}
Luego, el resultado es este:
Fuente: http://www.instructables.com/id/Arduino-Ethernet-Shield-Tutorial/