Para el momento en el que me enteré de la existencia del controlador de ethernet ENC28J60, no había sido la primera vez que me paso por la cabeza la idea de conectar un microcontrolador a la red y que pensé en el gran abanico de posibilidades que abre frente a uno, ya que además de conectarnos con las computadoras en la red local, también nos abre las puertas para conectarnos con nuestros circuitos desde cualquier dispositivo con acceso a Internet. En esta entrada hablaré de un prototipo que desarrolle que permite controlar relevadores mediante internet, utilizando una página web.

Lo que llama inmediatamente la atención de este chip, que viene de la misma casa que los famosos PICs,  es que uno se da cuenta de que la tecnología ethernet estará más cerca de los hobbystas que antes, por que si hay algo que me agrada de microchip es que sus chips son fáciles de conseguir y además en encapsulados adecuados para el protoboard. Este experimento pretende ser para mi una introducción con un enfoque práctico a la tecnología Ethernet y el Stack TCP/IP de microchip. El hardware esta basado en un microcontrolador PIC24FJ64GA002 junto con el ENC28J60 y una memoria serial I2C 24FC1025.

El hardware necesario para controlar relevadores mediante internet

El componente en torno al cual se desarrolla este experimento es el ENC28J60, un controlador ethernet bastante especial, ya que se comunica con el CPU mediante un bus serial SPI, y no un bus paralelo como la mayoría de los circuitos de interfaz ethernet de otros fabricantes. El ENC28J60 implementa las funciones de las dos capas más bajas del modelo OSI (MAC & PHY). Permitiendo que el cualquier microcontrolador pueda enviar tramas a través del cableado ethernet existente en casa o en edificios, permitiendo realizar aplicaciones de monitoreo fácilmente. El PIC24FJ64GA002 con sus 8KB de SRAM y 64KB de memoria FLASH funciona como el CPU que se encarga de procesar todo el tráfico (con ayuda del software TCP/IP cargado en su memoria). En la memoria EEPROM24FC1025 se almacena una imagen binaria (MPFS, o Microchip File System) de las páginas y las imágenes e iconos de la página web, para que puedan ser accesados por el servidor HTTP. Esta imagen se genera mediante una utilidad de linea de comandos para windows que viene  con el stack TCP/IP.

Controlar relevadores mediante internet con ENC29J60 y PIC24FJ64GA002

Controlar relevadores mediante internet con ENC29J60 y PIC24FJ64GA002

Como se puede ver en la fotografía, la cantidad de componentes y las conexiones entre estos son mínimos debido al alto nivel de integración de los componentes y al uso de interfaces serie entre ellos.

Para la comunicación con el puerto serie de la PC, estoy usando un adaptador que construí previamente cuando realicé algunos experimentos con Arduino, es un convertidor TTL o CMOS a RS-232 construido en base al chip MAX3232 que funciona perfectamente cuando se lo alimenta con 3 volts de corriente directa. Además del hardware que aparece en el esquemático, conecté una de las tarjetas de una entrenadora que construí, la cual posee 8 salidas a relevadores controlables mediante señales TTL o CMOS, esta tarjeta esta basada en un ULN2803 que es un arreglo de transistores darlington. En las fotografías a continuación se puede ver el circuito de prueba, incluyendo los relevadores. Para mayor seguridad, los relevadores deberían de estar optoacoplados, en ambientes ruidosos o industriales, para evitar que algún corto o error por parte nuestra pudiera llegar a dañar los componentes digitales que son más caros.

Controlar relevadores mediante internet con ENC29J60 y PIC24FJ64GA002

El stack TCP-IP

El stack software para el stack TCP/IP lo provee la empresa microchip technology. Cuando se descarga el stack TCP/IP se incluye el código fuente, esto es bueno si somos curiosos (como yo) y queremos ver como funcionan las cosas. Afortunadamente para mi, hay alguien que ya paso por el proceso de compilar y poner a funcionar el stack TCP/IP de microchip technology y lo pone a disposición de todos. En el sitio web de Jorge Amodio se encuentra una distribución de la versión 3.75.6 del stack. Aunque ya es una versión algo vieja (la actual es la 5.0) esta ya esta optimizada y configurada para usarse en un PIC24FJ64GA002 por lo que ofrece una manera rápida de empezar a trabajar, además de que las modificaciones que hizo me parecen más que oportunas, por que permiten localizar los archivos de código fuente rápidamente.

Modelo del stack TCP-IP provisto por Microchip

Modelo del stack TCP-IP provisto por Microchip

Modificaciones al Stack TCP/IP de microchip para controlar relevadores mediante internet

Aunque mínimas, el software que grabé en el microcontrolador tiene algunas modificaciones que se detallan a continuación:

  • Las páginas web se guardan en una memoria I2C en vez de la SPI que contempla el proyecto inicial, aunque esto afecta negativamente el rendimiento fue necesario por que eran las memorias que tenía disponibles de inmediato.
  • Modificado el archivo i2ceeprom.c debido a lo mencionado anteriormente, ya que el archivo que viene con el stack esta pensado para funcionar con el módulo  MSSP(Master Synchronous Serial Port) de los PIC18, hay que hacer algunos cambios para que funcione con el I2C del PIC24
  • Modificada la función HTTPGetVars() para aceptar 4 leds en vez de dos.
  • Modificados los archivos de configuración para el PIC24FJ64GA002para aceptar 4 entradas y 4 salidas digitales.

Después de estas modificaciones, viene la parte emocionante que es ver si todo el conjunto funciona como se espera :D.

Pruebas de conectividad y configuración del router ADSL o Cable para acceso remoto.

Para realizar las primeras pruebas del stack, conviene tener instalado en la PC un analizador de protocolos de red. Una buena opción es Wireshark, que nos ofrece una alternativa gratuita para observar los paquetes que fluyen por la red de área local. En mi caso, las primeras pruebas las realice conectando directamente el  prototipo al puerto ethernet de mi computadora portátil mediante un cable cruzado. De ese modo se puede comprobar que el hardware y el software están funcionando correctamente.

Según mi experiencia, es recomendable que al momento de realizar las pruebas solamente se tenga conectado un dispositivo a la interfaz que vamos a utilizar para escuchar los paquetes, ya que así evitamos un tráfico excesivo y esto nos beneficia al momento de analizar las tramas que envía el ENC28J60. En la imagen se observa la ventana de wireshark, con los primeros paquetes ARP transmitidos por mi prototipo, con los cuales el Stack TCP/IP esta tratando de obtener la dirección física del Gateway, cuya dirección configuré como 192.168.1.1. Con esta prueba queda claro, al menos, que la interfaz SPI entre el controlador Ethernet y el microcontrolador funciona correctamente, ya que el ENC28J60 esta generando tráfico entendible por la PC.

Primeros paquetes capturados con WireShark

Para poder tener acceso a el servidor web embebido desde Internet, primeramente se necesita haber contratado el servicio de acceso con un proveedor, si ya tenemos el servicio y tenemos instalado el Módem-Ruteador, es necesario conocer la dirección IP publica del módem, es decir aquella con la que nos pueden localizar otras computadoras desde Internet. Normalmente esta dirección se asigna de manera dinámica por el ISP, por lo que probablemente cambiará de vez en cuando: por ejemplo al apagar y volver a encender el módem o cada determinado numero de días.  Para superar este problema, algunos ruteadores domésticos soportan un protocolo conocido como DDNS (Dynamic DNS), que puede notificar a un servidor DNS  de cualquier cambio en la dirección IP. De esta manera  podemos acceder a las computadoras de nuestra red local a través de un dominio o subdominio. Para contar con este servicio en necesario obtener una cuenta gratuita (o de pago) con algún proveedor como http://www.no-ip.com o http://www.dyndns.com/. No voy a detallar como se configura el DDNS, por que hay muchas maneras de hacerlo y cada una dependerá del equipo que estemos usando (por ejemplo se puede instalar y configurar un cliente en la PC, o el propio ruteador puede incluir un cliente DDNS), lo mejor será consultar la documentación del proveedor del servicio y la del hardware en cuestión.

Hay que dar de alta la regla del firewall para que permita el paso de las peticiones al webserver

Hay que dar de alta la regla del firewall para que permita el paso de las peticiones al webserver

Otra consideración importante es que el ruteador que tengamos instalado en casa, casi con seguridad bloqueará los paquetes de requests HTTP que vengan desde Internet a menos que le indiquemos explícitamente que los encamine hacia un determinado host dentro de nuestra red privada. Esto se debe a que normalmente estos equipos cuentan con mecanismos conocidos como NAT (Network Address Translation) y PAT (Port Address Translation), lo que implica que todos los dispositivos de la red local tienen direcciones IP en un rango privado (definido en el RFC1918) y se comunican con los host en Internet (a través del ruteador) usando la dirección publica que tiene asignada la interfaz WAN del módem. En el caso de que nuestro servidor no sea accesible desde Internet, habrá que configurar nuestro ruteador para reenviar los paquetes destinados al puerto 80 de la IP publica al puerto que nosotros queramos de la  IP privada asignada al webserver embebido. De nueva cuenta, el procedimiento exacto depende del ruteador que se este usando, sin embargo las imágenes reflejan el procedimiento para un ruteador 2Wire.

El 2Wire tiene de fábrica una regla de firewall para permitir el paso de paquetes a un servidor web en el puerto 80

Mi equipo 2Wire tiene de fábrica una regla de firewall para permitir el paso de paquetes a un servidor web en el puerto 80

La página web para controlar relevadores mediante internet

Para personalizar un poco la presentación del contenido, desarrolle una pequeña página usando un demo de Adobe Dreamweaver. La página esta realizada según las últimas tendencias: Usando estilos CSS  y XHTML sin tablas para el diseño. Además conseguí unos iconos para representar el estado de las salidas y de las entradas digitales.  Como se ve en la imagen la página tiene un panel que permite interactuar con los dispositivos desde el navegador. Al pulsar sobre los iconos de los focos (lamparas) se pueden encender o apagar los relevadores conectados al protoboard. Los iconos de la parte inferior reflejan  el estado de las entradas digitales. También nos muestra la hora que se obtuvo mediante el protocolo NTP. En la parte izquierda hay un menú que permite navegar por algunas páginas que solamente son informativas.

Página web principal del proyecto, servida por el webserver basado en PIC

Página web principal del proyecto, servida por el webserver basado en PIC

Por último, aquí hay un video del prototipo funcionando.

Conclusión  y aplicaciones.

  • Hoy en día la tecnología nos permite “jugar” con microprocesadores y microcontroladores pequeños y relativamente simples con capacidades similares y hasta superiores a las primeras computadoras y que tienen los recursos para poder implementar un Stack TCP/IP. En la época en que empezaba el desarrollo de la tecnología en la que hoy se sustenta Internet, lograr un servidor simple, pequeño y barato como el que muestra esta página hubiera sido con seguridad imposible.
  • Con las herramientas que nos proporciona microchip de forma gratuita, es bastante sencillo desarrollar aplicaciones embebidas con servicios basados en TCP/IP. En esta ocasión tuve la oportunidad de experimentar con el servidor HTTP, el cliente NTP, el cliente DHCP y el servidor FTP, sin embargo espero pronto experimentar con versiones más nuevas del stack TCP/IP, para probar las nuevas características.
  • Haciendo pequeñas modificaciones al software del Stack TCP/IP se pueden añadir aplicaciones para monitoreo remoto, control de acceso, sistemas de seguridad, automatización y domótica que parecen bastante interesantes y novedosas.
  • Ya tiene un rato que estoy experimentando con las familias de microcontroladores de 16 bits de microchip technology y la mayor parte del tiempo ha sido bastante agradable ver la gran cantidad de funciones con las que cuentan estos chips. Son muy superiores en prestaciones a los PIC18 y PIC16F y además se mantienen en encapsulados muy manejables, como lo es el DIP28 del PIC24FJ64GA002. Todo eso sin contar el compilador C30 que es bastante bueno y esta disponible de manera gratuita en su versión para estudiantes. La única desventaja, al tratarse de dispositivos recientes, son los numerosos errores o  “Silicon Errata” que hay que tener en cuenta al diseñar el programa y el hardware.

¿Comentatios?

Para cualquier comentario o duda sobre este experimento, puedes escribirme a mi dirección de correo electrónico ruben en tech-freaks.net. El código fuente del stack TCP/IP lo puedes encontrar en el link a la página de Jorge Amodio, la versión que encontrarás ahí es para usarse con memorias SPI,  si quieres alguno de los archivos que utilize  yo o quieres saber más sobre las modificaciones que hice, contactame.

Es necesario que cualquier pago sea realizado a la cuenta que la pagina muestra al crear una orden. No se aceptarán pagos a la cuenta anterior. Hasta nuevo aviso los pagos realizados vía PayPal no serán facturados. Ignorar