Está en la página 1de 20

COMUNICACIN A INTERNET CON

ARDUINO
Recientemente ha aparecido la expresin IOT, Internet of things. Este
acrnimo hace referencia al Internet de las Cosas, esto es que cualquier
aparato electrnico se pueda intercomunicar a travs de la red de Internet,
o bien que paulatinamente cualquier objeto que antes no tena
componentes electrnicos, los tenga, con finalidad de obtener datos y
nuevas relaciones de comunicacin entre objetos-humanos y as nuevos
conocimientos que antes no era posible. Por ejemplo imaginemos que
tenemos un sensor en la cama que detecta nuestros estados de sueo y
cuando detecta el momento idneo de despertarnos sube las persianas,
prepara la cafetera para que tengamos el caf a punto, enciende los
radiadores para que disfrutemos de una agradable temperatura al salir de la
cama, etc
Este sueo es el que representa el IOT, y para hacerse realidad necesitamos
que nuestros aparatos se interconecten con una electrnica preparada para
conectarse a Internet. A da de hoy, el exponente ms evidente para
desarrollar y prototipar este tipo de interconexin lo encontramos en
el hardware Arduino para programar entradas (sensores de temperatura,
humedad, ritmo cardiaco, etc) y salidas (relays, actuadores, leds, etc)
A continuacin dar a conocer unos dispositivos las cuales juntos con el uso
del hardware Arduino, nos permitir realizar la comunicacin a internet que
deseamos.

Mdulo Ethernet ENC28J60


El

Mdulo ENC28J60

Arduino Uno

VCC

Pin 3.3V

GND

Pin GND

SS (CS)

Pin 10

MOSI (SI)

Pin 11

MISO (SO)

Pin 12

SCK

Pin 13

Mdulo Ethernet ENC28J60 es popular por su bajo costo, si bien esta


desarrollado por Microchip, existen libreras como la librera Ethercard, para
hacerlo trabajar con Arduino. Consume mucho ms memoria que el Ethernet

Shield,

pero

para

aplicaciones

bsicas

es

muy

til.

CONEXIONES ENTRE EL MDULO ETHERNET ENC28J60 Y ARDUINO

Hay
que
resaltar que las conexiones son vlidas para el Arduino Uno o placas
basadas en el Atmega328 (Arduino mini pro, Arduino nano, etc) pues el
Mdulo ENC28J60 usa la comunicacin SPI, por lo que si se trabaja con el
Mega, se tiene que conectarse a sus pines SPI correspondientes.
PROGRAMA PARA EL MDULO ETHERNET ENC28J60
Para usar este mdulo es necesario descargar e importar a nuestro IDE de
Arduino la librera Ethercard.
#include <EtherCard.h>

static byte mymac[] = {0xDD,0xDD,0xDD,0x00,0x01,0x05};


static byte myip[] = {192,168,1,177};
byte Ethernet::buffer[700];
const int ledPin = 2;
char* EstadoLed="OFF";
void setup () {
Serial.begin(9600);
Serial.println("Test del Modulo ENC28J60");

if (!ether.begin(sizeof Ethernet::buffer, mymac, 10))


Serial.println( "No se ha podido acceder a la controlador Ethernet");
else
Serial.println("Controlador Ethernet inicializado");
if (!ether.staticSetup(myip))
Serial.println("No se pudo establecer la direccin IP");

Serial.println();
pinMode(ledPin, OUTPUT);
digitalWrite(ledPin, LOW);
}
static word homePage() {
BufferFiller bfill = ether.tcpOffset();
bfill.emit_p(PSTR("HTTP/1.0 200 OKrn"
"Content-Type: text/htmlrnPragma: no-cachernRefresh: 5rnrn"
"<html><head><title>Naylamp Mechatronics</title></head>"
"<body>"
"<div style='text-align:center;'>"
"<h1>Test del Mdulo ENC28J60</h1>"
"Tiempo transcurrido : $L segundos"
"<br /><br />Estado del LED: $S<br />"
"<a href="/?status=ON"><input type="button" value="ON"></a>"
"<a href="/?status=OFF"><input type="button" value="OFF"></a>"
"<br /><br />Potencimetro: $D (resolucin de 1024)"
"<br /><br />"
"<a
href='http://www.naylampmechatronics.com/'>www.naylampmechatronics.c
om</a >"
"</body></html>"
),millis()/1000,EstadoLed,analogRead(0));
return bfill.position();
}
void loop() {
word len = ether.packetReceive();
word pos = ether.packetLoop(len);
if(pos) {
if(strstr((char *)Ethernet::buffer + pos, "GET /?status=ON") != 0) {
Serial.println("Comando ON recivido");
digitalWrite(ledPin, HIGH);
EstadoLed = "ON";
}

if(strstr((char *)Ethernet::buffer + pos, "GET /?status=OFF") != 0) {


Serial.println("Comando OFF recivido");
digitalWrite(ledPin, LOW);
EstadoLed= "OFF";
}
ether.httpServerReply(homePage()); // se envia pgina Web
}
}
CONEXIN ENTRE EL MDULO ETHERNET ENC28J60 A UN MODEM,
ROUTER O PC
Ahora desde un navegador web de nuestra laptop, celular o tablet,
accedemos a nuestro Arduino escribiendo la IP en el navegador.

Modificando el cdigo HTML se pueden lograr diseos de pginas ms


complejas, se pueden agregar imgenes, cambiar la fuente y tamao del
texto, agregar tablas, pero esto depender de la habilidad de programacin
en HTML que tengamos.

Arduino Ethernet Shield

Arduino Ethernet Shield conecta la placa Arduino a Internet en cuestin de


minutos. Slo tiene que conectar este mdulo en la placa Arduino,
conectarlo a la red con un cableRJ45.
El Problema de las IP

Cuando conectas tu Arduino Ethernet Shield con tu Router, ste le asigna


una direccin IP, es decir, una identificacin que le permite diferenciar a tu
Arduino del resto de ordenadores y dems elementos que tengas
conectados a la red local de tu casa, as que esa direccin que va a utilizar
tu Arduino tienes que introducirla en tu sketch. El problema es que esa IP es
cambiante y cada vez que su valor cambie, tu sistema dejar de funcionar.

Del mismo modo, la direccin de tu Router cambia salvo que tengas


contratado un sistema con IP esttica. Esto no es lo ms habitual ya que
estos sistemas son ms caros y a la compaa que te proporciona el
Internet le interesa que t tengas una IP dinmica.
Como lo que t quieres es implementar tu sistema sobre tu Arduino
Ethernet Shield, poder controlarlo desde cualquier parte del mundo (y no
solo desde tu red de rea local) y que este siga funcionando sin tener que
modificar tu cdigo (sketch) con independencia de lo que pase en tu red.
Tienes que amenazar de muerte a tu proveedor de Internet solucionar
varios problemas:

1. Conseguir que conexin IP entre tu Arduino Ethernet Shield y tu


Router (rea local) no cambie.
2. Abrir los puertos de tu Router para permitir que entre y salga
informacin.
3. Conseguir que la conexin entre tu Router e Internet no cambie (para
que puedas acceder siempre desde la misma direccin).
CONEXIN ARDUINO ETHERNET SHIELD ROUTER
Cada Router se configura de una manera distinta pero con un poco de
paciencia no cuesta mucho trabajo hacerlo.
Lo primero que se tiene que hacer es ingresar a nuestro Router desde
nuestro navegador. Para ello se necesita saber cul es nuestro Gateway, la
cual se haya escribiendo cmd en la ventana de ejecutar de inicio, y
posteriormente escribiendo ipconfig.

Ahora, basta con escribir en el navegador el cdigo del Router y la


contrasea que por defecto suele ser: 1234. Posteriormente debemos
decirle que siempre de la misma IP a nuestro Arduino Ethernet Shield, ya
que cada cierto tiempo esas IP cambian.
Todas las mquinas que conectamos a nuestra red tienen un nmero
identificativo denominado MAC. El MAC del Arduino podemos fijarlo nosotros
mismos y por defecto es:
byte mac[] = {
0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
Una vez tenemos nuestro MAC, debemos decirle al Router que a ese MAC le
d siempre la misma IP.

Acceder a las propiedades de nuestro DHCP a travs de los mens de


nuestro Router, es decir, buscamos por los mens la palabra DHCP o
DHCP Settings (suele estar en: Configuracin >> LAN >> DHCP).

Abre el men de para asignar la IP. Seguramente aparecer un


recuadro para enlazar un MAC a una IP. Rellenamos los datos
utilizando el MAC del Arduino Ethernet Shield y la IP que
deseamos (por ejemplo 192.168.1.177) y guardamos los cambios.

PUERTOS DEL ROUTER


Gracias a que en el paso anterior conseguimos darle una IP fija al Arduino
Ethernet Shield, ahora ser muy fcil abrir nicamente el puerto que va a
utilizar tu shield de Arduino.

Debemos buscar en los mens del Router algo tipo NAT, Virtual
Servers o Port Forwarding. El nombre vara en funcin del Router pero
buscamos modificar los puertos as que nos guiaremos por la palabra
Port.

Una vez
ests en men de puertos de tu Router, activa la opcin de Port
Forwarding y, para la IP local que le diste a tu Arduino Ethernet
Shield, abre un puerto (tpicamente el puerto 80 aunque puedes abrir
otros como el puerto 5400). De nuevo no te olvides de guardar los
cambios.

CONEXIN ROUTER - INTERNET


Hasta ahora hemos conseguido que el Router siempre le d la misma IP al
Arduino Ethernet Shield y que este tenga acceso a Internet. En realidad ya
est todo hecho. El nico problema es que a la hora de acceder desde fuera
de tu red local al shield de Arduino desconocemos qu direccin tiene, es
decir no sabemos qu IP tiene el Router.
Para solucionar este problema tenemos carias opciones:

Contratar Una IP Esttica

Si se contrata una IP esttica no tendramos que preocuparnos por saber


cada momento cul es la direccin de nuestro Arduino Ethernet Shield.
puede hablar con nuestro proveedor de Internet y, por un poco ms
dinero al mes, bastara con que recordases esa direccin para acceder
cualquier momento y desde cualquier sitio a tu sistema domtico.

en
Se
de
en

Dejar Tu IP Dinmica

Si acostumbramos a mantener nuestro Router siempre encendido debemos


saber que nuestro IP no cambia cada cinco minutos. De nuevo, depende del
proveedor. Normalmente cambiar una vez por semana por lo que si ests
frecuentemente en casa y consultas tu IP con regularidad. Ten en cuenta,
eso s, que si tu IP cambia y no ests en casa para consultarla, no podrs
acceder al sistema.

Utilizar Un Servicio de DDNS

Este es mi mtodo favorito. El sistema de las DDNS consiste bsicamente en


un dominio que est asociado en cada momento a tu IP actual, es decir, un
nombre fijo elegido por nosotros (y por lo tanto ms fcil de recordar que
una direccin IP) que est siempre actualizado y dirija la conexin hacia
nuestro Arduino Ethernet Shield.

El problema de este mtodo es que depende de tu Router. Existen muchos


servicios tanto de pago como gratuitos de DDNS y cada Router soporta unos
u otros. Que tu Router no soporte uno en concreto no implica que no puedas
utilizarlo pero debers descargarte la aplicacin correspondiente de ese
servicio DDNS y actualizar la IP desde el ordenador, es decir, tendrs que
tener un ordenador siempre encendido, por lo que lo mejor es que utilices
uno de los que tu Router soporta para que la actualizacin de la IP se haga
desde el Router, sin necesidad de aplicaciones.

CDIGO DE PROGRAMACIN

#include &lt;SPI.h&gt;
#include &lt;Ethernet.h&gt;

//Se introducen los valores correspondientes a MAC, IP local, Puerta de Enlac


e y Mscara de Red
byte mac[] = {
0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
IPAddress ip(192,168,1,177);
IPAddress gateway(192, 168, 1, 1);
IPAddress subnet(255, 255, 255, 0);

//Se inicializa la librera Ethernet con el Puerto que se va utilizar en la trans


misin
EthernetServer server(80);
void setup() {

// Se establece comunicacin con el monitor serial (para ver si el sistema


est funcionando correctamente)
Serial.begin(9600);
// while (!Serial) {
// ; // Se espera a que se conecte el puerto serie (solo para Arduino Leonar
do)
// }
// Comienzo de la conexin
Ethernet.begin(mac, ip, gateway, subnet);
server.begin();

//Se muestra por el monitor serial que la conexin est establecida


Serial.print(server is at );
Serial.println(Ethernet.localIP());
}
void loop() {

// Se espera a que alguien acceda a la pgina web


EthernetClient client = server.available();
if (client) {
Serial.println(new client);

// una peticin http termina con una lnea en blanco


boolean currentLineIsBlank = true;
while (client.connected()) {
if (client.available()) {
char c = client.read();
Serial.write(c);

//Si se llega al final de la lnea se recibe un nuevo carcter de


//lnea y si se trata de una lnea en blanco la peticin http ha terminado
//as que se enva la respuesta
if (c == \n &amp;&amp; currentLineIsBlank) {
// cabezera tpica http
client.println(HTTP/1.1 200 OK);
client.println(Content-Type: text/html);
client.println(Connection: close); // se cierra la conexin una vez se ha
respondido a la peticin
client.println(Refresh: 5); // se refresca la pgina automticamente cada 5
segundos
client.println();
client.println(&lt;!DOCTYPE HTML&gt;);
client.println(&lt;html&gt;);

// se muestran en la web los valores de las entradas analgicas


for (int analogChannel = 0; analogChannel &lt; 6; analogChannel++) {
int sensorReading = analogRead(analogChannel);
client.print(analog input );
client.print(analogChannel);
client.print( is );
client.print(sensorReading);
client.println(&lt;br /&gt;);

}
client.println(&lt;/html&gt;);
break;
}
if (c == \n) {

// se comienza una nueva lnea


currentLineIsBlank = true;
}
else if (c != \r) {
// se ha obtenido un carcter en la lnea actual
currentLineIsBlank = false;
}
}
}
// se le da tiempo al navegador para recibir los datos
delay(1);
// se cierra la conexin
client.stop();
Serial.println(client disonnected);
}

Mdulo WIFI ESP8266

El mdulo
ESP8266

WiFi
es un SOC

autocontenida con la pila integrada protocolo TCP / IP que puede dar acceso
a cualquier microcontrolador a su red WiFi. El ESP8266 es capaz de acoger
ya sea una aplicacin o la descarga de todas las funciones de red Wi-Fi
desde otro procesador de aplicaciones. Cada mdulo ESP8266 viene preprogramado con un conjunto de firmware con comando AT, es decir, slo
tiene que conectar esto a su dispositivo Arduino y obtener
aproximadamente la misma cantidad de WiFi-ability como WiFi Shield ofrece.
El mdulo ESP8266 es barato a comparacin del Ethernet Shield y a la vez
muy parecido a los mdulos Bluetooth y que al igual que ellos incluye toda
la electrnica necesaria para la comunicacin de Radio Frecuencia en la
banda WFI, as como la pila TCPIP y que se comunica con nosotros a travs
de un puerto serie. De hecho, exactamente igual que los modos HC-06 y HC05 se gobierna mediante comandos AT.
Este mdulo tiene una potente capacidad suficiente a bordo de
procesamiento y almacenamiento que le permite integrarse con los
sensores y dispositivos especficos de la aplicacin a travs de sus GPIO con
un desarrollo mnimo por adelantado y la carga mnima durante el tiempo
de ejecucin. Su alto grado de integracin en el chip permite la circuitera
externa mnima, incluido el mdulo front-end, est diseado para ocupar el
mnimo rea de PCB. El ESP8266 apoya APSD para aplicaciones VoIP y las
interfaces de co-Existance Bluetooth, contiene un RF auto-calibrado que
permite que funcione en todas las condiciones, y no requiere de partes
externas de RF.
El mdulo de ESP8266 trabaja hasta con 3.3 V.

CONEXIN DEL MDULO WIFI ESP8266 CON ARDUINO


Este mdulo es muy sencillo y fue diseado desde el principio con la
Internet of Things en mente ( IOT), y por eso incluye todo lo necesario para
conectarse a un punto de acceso WIFI mediante comandos de texto AT, va
una puerta serie, que puede ser configurada a diferentes velocidades.
Una vez que le instruimos para que se conecte a nuestra WIFI, el modulo es
capaz de enviar informacin que le remitimos va la puerta serie a una
direccin IP y puerto que deseemos.
Cuando se trata de recibir, limpia todo el empaquetado TCPIP y nos reenva
por la puerta serie la informacin de datos limpia de polvo y paja, con lo que
tiene la enorme virtud de permitirnos olvidarnos de la gestin del TCPIP y de
las demandas de procesador y memoria que suponen.
A cambio no es exactamente una conexin WIFI, porque no tenemos acceso
al stack o al socket IP pero para el Arduino esto es casi una ventaja. D e
hecho el mdulo ESP8266 incluye un pequeo procesador interno que
podramos programar para funcionar de modo autnomo y que incluso
dispone de un par de puerto GPIO (General Purpose Input Output) para su
uso como activador de algo, pero esto e una historia para otro da.

La fuente interna de 3.3V del Arduino da un mximo de 50 mA, cuando el


consumo del mdulo suele ser en el arranque bastante superior a esto, lo
que le llevara a unos arranques poco fiables, y aunque se acaba
consiguiendo, deben repetirse una y otra vez, aunque esto no es muy
recomendable.

PROGRAMACIN EN ARDUINO
Los mdulos ESP se suele programar usando cdigos AT pero gracias a que
en su interior cuenta con un microcontrolador de 32 bits y capaz de correr
hasta 160 MHz, tenemos un potente dispositivo de INTERNET DE LAS
COSAS. Existe un proyecto llevado a cabo por el ruso Ivan Grokhotkov que
est explotando todos los beneficios de este microcontrolador, los cuales
podemos ver en la pgina: https://github.com/esp8266/Arduino. El Beneficio
principal es que podemos programar los ESP como si fuera un arduino,
utilizando unas libreras las cuales encontramos en dicha pgina

CDIGO DE PROGRAMACIN

El cdigo ms abajo mostrado ser utilizado exclusivamente para la


confi guracin del mdulo.

#include <SoftwareSerial.h>

SoftwareSerial mySerial(3, 2); // RX, TX


void setup()
{
Serial.begin(9600);
mySerial.begin(9600);
}
void loop() // run over and over
{
if (mySerial.available())
Serial.write(mySerial.read());
if (Serial.available())
mySerial.write(Serial.read());
}

NodeMCU Arduino

NodeMCU, es un microcontrolador basado en el mdulo WIFI ESP8266. Este


dispositivo a sufrido algunos cambios, algunos de esos cambios es que el
procesador que incluye, en la versin 12E, o mejorada (del ingls
Enhanced), tenemos 6 pines ms, cuatro de los cuales estn dedicados a la
comunicacin SPI, que son los CS0, MISO, MOSI y SCLK.
Datasheet:

Recientemente se ha desarrollado el
plugin
ESP2866
para
el IDE
Arduino, por lo que podemos utilizarlo
ahora
tambin
para
programar
el NodeMCUdesde el IDE de Arduino.
En lugar de tener que aprender a programar el mdulo en LUA, ahorrarnos
tiempo y podemos directamente programar con l usando el C que
utilizamos en nuestro IDE de Arduino.
Ventajas del plugin del ESP2866 para programar el NodeMCU:
1. Se puede desarrollar con el mismo IDE que ya conocemos.
2. Han hecho un Cross compiler, de forma que prcticamente utilizas los
mismos comandos que utilizas con Arduino, con lo que te ahorras
aprender nada nuevo.
3. Dependiendo del modelo de ESP8266 que tengas, dispones de ms o
menos pines disponibles con PWM y otras cosas ms como I2C y SPI,
pero para el tpico modelo ESP8266-01 solo tienes dos pines
disponibles GPIO0 y GPIO2, pera ya hablaremos que hay otros
modelos con todos los pines disponibles
4. Es decir, que puedes programar el procesador de tu ESP8266
exactamente como si fuera un Arduino con los mismos comandos, y
en lo que se refiere a la WIFI, ya puedes olvidarte de los comandos
AT, porque incluye una serie de libreras, que imitan la librera WIFI de
Arduino con lo que se pueden trasplantar muchos programas.
NodeMcu es una iniciativa Open Source de Espressif systems para el
desarrollo de un modelo sencillo de integrar la IOT en donde haga falta. Para
ello desarrollan modelos de hardware y software que facilite el desarrollo de
programas y aplicaciones basados en WIFI.

Una ventaja con respecto a otros mdulos que integran el ESP2866 es que
todos sus pines estn disponibles en el exterior, en un montaje que se
puede colocar en una protoboard y adems incluye un conector mini
USB para programar el chip interno y comunicarse con el PC si es necesario,
con lo que nos evitamos el adaptador FTDI a USB que siempre es engorroso.

También podría gustarte