sábado, 1 de enero de 2011

Arduino Ethernet shield y TelnetClient

Como primera aplicación con el shield "oficial" de Arduino, voy a comentar uno de los ejemplos básico que el IDE de programación de Arduino te proporciona, es el sketch TelnetClient.
Con este programa podemos acceder al ordenador donde esté alojado el servidor Telnet, crear y modificar sus ficheros. Estoy convencido que se os ocurrirá alguna aplicación en la que esto os resulte útil.
Sin más demora, voy a describir, paso a paso, lo que hay que hacer para probarlo con el sistema operativo Windows. 
Básicamente tenemos tres piezas en este juego:
  1. Arduino con el shield de Ethernet
  2. PC al que conectamos el puerto USB de Arduino. Lo llamo PCArduino
  3. PC donde corre el servidor telnet. Lo llamo PCTelnet
No se me ocurre ninguna razón por la que PCArduino pueda ser PCTelnet, pero me parece más divertido sin son distintos, a mí me da una mejor idea de la verdadera función de la aplicación, el control remoto de un PC a través de Ethernet.

Configuración de Arduino
Una vez hayamos conectado el shield Ethernet en Arduino, el puerto USB al PCArduino y arrancado el IDE de programación, debemos seleccionar el sketch TelnetClient:

Tomamos nota del COM al que se conecta Arduino, después necesitaremos esa información para abrir una sesión con hypeterminal.


Modificación sketch
Este sketch consta de tres partes, una primera de inicialización de variables globales, una función de setup, y por último, una función de loop.
  • Variables globales. En este sketch las variables globales son:
    • MAC y la IP que le queremos dar a Arduino. En los últimos shields de Ethernet se indica la MAC en una pegatina. En cuanto a la IP, teniendo en cuenta que nos vamos a comunicar dentro de la intranet de nuestra casa, elegimos una que sepamos que no utilizamos en ninguno de los PCs que tenemos. Yo, por defecto, pongo 192.168.1.177.
    • IP del PCTelnet, en el que corre el servidor Telnet y donde queremos conectarnos a través de Arduino. Para saber la IP de ese ordenador ya sabéis: linea de comando DOS y ejecutamos ipconfig. En mi caso 192.168.1.35
    • Puerto del servidor telnet. Normalmente es el puerto 23.
  • Función de setup.  
    • Inicializa la conexión a Ethernet y el puerto serie a 9600bps.
    • Se ejecuta la conexión al servidor telnet
  • Función loop
    • Traza por el puerto serie todo lo que recibe del servidor y viceversa
    • Detecta si el cliente telnet se mantiene conectado, en caso de no estarlo, saca el mensaje de desconexión.
Así pues, sólo tenemos que modificar el programa con los datos de las variables globales.  En mi caso:
// Enter a MAC address and IP address for your controller below.
// The IP address will be dependent on your local network:
byte mac[] = { 
  0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
byte ip[] = {
  192,168,1,177 };
// Enter the IP address of the server you're connecting to:
byte server[] = {
  192,168,1,35 };
// Initialize the Ethernet client library
// with the IP address and port of the server
// that you want to connect to (port 23 is default for telnet;
// if you're using Processing's ChatServer, use  port 10002):
Client client(server, 23);
Una vez lo hayamos hecho, compilamos el programa y lo bajamos a Arduino.

Servidor Telnet
¿Tenemos disponible un servidor Telnet en el PCTelnet al que queremos conectarnos?. En mi caso no era así, por lo que me bajé el servidor Telnet KpyM. Dudo que sea el mejor, sencillamente fue el primero que encontré.
El servidor  telnet nos exige tener un usuario y un password para Windows. Si no lo tenéis, tendréis que crearlo, ¿cómo?: Panel de control > Cuentas de usuario.
Telnet dejó de utilizarse a través de la red, a nivel profesional, porque es un protocolo muy primitivo, sin ninguna seguridad, los nombres de usuario y los passwords van por la red en caracteres, sin ningún tipo de codificación. Para nuestro propósito está bien, ya que hacemos una conexión punto a punto, pero desde luego, esta conexión a través de Internet no es segura.
No os olvidéis de abrir el puerto 23 en el PCTelnet. Para hacer esto: Propiedades de conexión de área local > Opciones avanzadas > Configuración > Excepciones > Agregar Puerto ... > Nombre: telnet / Numero puerto: 23 / TCP.

KpyM crea una aplicación para configurar el servidor telnet, no es necesario modificar nada, en todo caso, en caso de tener algun problema, echadle un vistazo, ejecutad la opción start service para comprobar que el servidor está efectivamente corriendo.

Sesión hypeterminal
Una vez hemos conectado con el cable de Ethernet el shield con el PCTelnet, abrimos una sesión de hypeterminal del PCArduino con el COM de Arduino, en mi caso COM4, con 9600bps:

Si todo es correcto, al abrir la sesión de hypeterminal, Arduino intenta conectarse con el servidor telnet alojado en el PCTelnet. Las siguientes pantallas son las que obtenemos en el hypeterminal:

Una vez hayamos introducido el usuario y el password para Windows, accederemos al PC remotamente. Podemos controlar el PCTelnet a través de la sesión hypeterminal del PCArduino.


Hasta pronto.

No hay comentarios:

Publicar un comentario