Tutorial 3: Uso de Telnet y DHCP

Versión 3

     

    Introducción

     

    lesson-3.png

     

    La tarjeta Galileo de Intel® se diferencia de otras tarjetas basadas en Arduino en que los sketches de Arduino se  ejecutan en la parte superior de la versión Yocto del kernel de Linux. Esto proporciona algunas oportunidades interesantes para utilizar Linux para controlar mediante programación, sensores, ejecutar programas de visión por computadora, alojar un punto wifi, conectarse a Internet, alojar un servidor, e interactuar con el mundo mediante el aprovechamiento de software y hardware de código abierto que son actualmente compatibles con el kernel de Linux en una plataforma x86.

     

    El firmware de la tarjeta Galileo es más avanzado que otros Arduinos disponibles actualmente. Actuando como una computadora típica, el firmware especial de las tarjetas permite acceder a la fecha y hora, compartir recursos con otros programas, y mediante programación, interactuar con el hardware utilizando tus idiomas preferidos como Python y NodeJS.

     

    En este tutorial, aprenderás cómo conectarte a la parte de Linux de la tarjeta Galileo usando Telnet mediante la configuración de una dirección IP (Internet Protocol), así como conseguir una forma automática utilizando una conexión a Internet a través del protocolo DHCP (Dynamic Host Control Protocol).

     

    Hacia el final de esta lección, escribirás código que enviará una petición a un servicio que te permitirá visualizar la posición de la tarjeta en un mapa mundial. Se mostrará una ubicación aproximada de la tarjeta, no la exacta. También te ofreceremos algunos ejemplos de código para manipular el tiempo los sistemas de Linux.

     


    Conexión a Linux a través de telnet

     

    Equipo requerido

     

    Conexión a Linux a través de telnet

     

    Telnet es un protocolo de red que permite conectarse a equipos remotos de forma local o en Internet utilizando el software de telnet, mediante el uso de una interfaz de línea de comandos (CLI, Command-Line Interface), como Terminal (disponible en Mac, Unix y Linux) o DOS (Disk Operating System) en Windows.

     

    Primeros pasos con telnet:

     

    Con el fin de usar telnet para comunicarse con la tarjeta Galileo, primero tenemos que conectarla a una red. Esta no es la única manera de conectarse a la placa, también se puede conectar a través de SSH o mediante una conexión en serie usando un cliente como Putty (sólo Windows).

     

    Utilizando un cable de categoría 5 (CAT5), conecte un extremo en el puerto Ethernet en la tarjeta. Conecte el otro extremo a un router que esté conectado a Internet. Puedes comunicarte con la tarjeta usando telnet sin tener que estar conectado a Internet, pero utilizando la tarjeta en línea es más divertido!

     

    Ya existe un tutorial sobre cómo hacer telnet a tu Galileo en el sitio de la Comunidad Intel®:

    Usando la tarjeta Galileo con Linux a través de Ethernet (Telnet)

     

    Para recapitular ese tutorial, aquí están los sketches con los que podrás configurar las direcciones IP de tus tarjetas:

     

    Configure manualmente la direccion IP a sus tarjetas:


    void setup() {

      // Connect to Galileo over telnet

      system("telnetd -l /bin/sh");

      // Assign the IP address '169.254.1.1' to it

      system("ifconfig eth0 169.254.1.1 netmask 255.255.0.0 up");

    }

    void loop() {

      // Left intentionally empty

    }

     

    Configuración automática utilizando DHCP:

     

    Este sketch es un poco diferente al anterior. En este sketch, estamos pidiendo a nuestro router de Internet que nos proporcione una dirección IP generada dinámicamente. Hemos modificado el Script originalmente mencionado para proveer sólo la dirección IP (y no toda la información extra que normalmente imprimiría).

     

    void setup() {

      system("telnetd -l /bin/sh");

      system("echo setup > /dev/ttyGS0");

    }

    void loop() {

      // Original code that prints out all data:

      // system("ifconfig eth0 > /dev/ttyGS0");

      // Modified code to search for "inet addr" and print out the address

      system("ifconfig eth0 | grep 'inet addr:' | cut -d: -f2 | awk '{ print $1}' > /dev/ttyGS0");

      // Sleep is used here like the "delay" function to continuously print out the address for us.

      sleep(10);

    }

     

    Ejecuta cualquiera de los sketches anteriores, a continuación, abre el monitor serial de Arduino. El código asigna una dirección IP (manual o dinámica) que vamos a utilizar para comiunicarnos a la tarjeta con telnet.

     

    Comunicar a la tarjeta Galileo mediante telnet:

     

    Utilizamos DHCP para generar una dirección IP. La dirección que tenemos es: 192.168.1.12.

     

    Usando cualquier interfaz de línea de comandos como terminal, ejecuta el siguiente código (y en tu caso, sustituye la dirección IP con la propia):

     

    telnet 192.168.1.12

     

    Si la conexión se ha realizado correctamente, deberías ver algo como esto:

     

     

    Para desconectar la CLI, escriba: exit

     

    Acceder a los pines GPIO a través de telnet se realiza haciendo uso de la interfaz de Linux Sysfs. De acuerdo con la documentación,"sysfs is a ram-based filesystem initially based on ramfs. It provides a means to export kernel data stuctures, their attributes, and the linkages between them to userspace."

     

    Más información acerca de los comandos de Linux utilizados en los sketches anteriores puede ser encontrada aquí:

    linuxcommand.org/man_pages/telnetd8.htm

    linux.com/community/blogs/127-personal/412777-using-ifconfig

     

     

    Comunicación a Galileo

     

    Comunicación básica al monitor serial

     

    Vamos a obtener un simple script de "Hola mundo" utilizando la interfaz de línea de comandos en Linux. Al programar con la interfaz de software de Arduino, utilizamos la función Serial.println() para imprimir al monitor serial. Linux usa el comando "echo", que es una función incorporada utilizada para mostrar información en una pantalla.

     

    Paso 1: Abrir el monitor serial

    Mientras el programa de Arduino se esté ejecutando, abre el monitor serial haciendo clic en el icono en el extremo derecho del menú:

     

     

    Paso2: Telnet en la tarjeta

    Mantenga un ojo en el monitor serial. Después de conectarse a la tarjeta a través de telnet, ejecute el siguiente comando:

     

    echo "hola, mundo"> dev / ttyGS0

     

    Esto debería imprimir el "hola, mundo" en el monitor serial:

     

    Este mismo código se puede lograr desde el IDE de Arduino utilizando la función "system" para ejecutar comandos a través de Linux:

     

    system("echo \" hola, mundo \ "> / dev / ttyGS0"!); // Serial (IDE Serial Monitor)

     

     

    Visualización de datos de Galileo

     

    Vamos a utilizar un botón que, cuando se pulse, enviará una solicitud a un servicio que va a visualizar tu ubicación relativa en un mapa. Serás capaz de ver la ubicación de tu tarjeta Galileo, así como la de otros usuarios de Galileo que han completado esta lección.

     

    Dirígete a la página web de Arduino y sigue el breve tutorial para el uso de un botón:

    http://arduino.cc/en/tutorial/button

     

    En el tutorial del botón, al presionar el botón se enciende el LED de la tarjeta (asignada al pin 13). Vamos a modificar el código para utilizar una llamada al sistema que enviará una solicitud a la visualización del mapa.

     

    Antes de pasar al código, abre el sitio web de visualización y lanza el mapa: http://www.lemeccaniche.com/launch

    Puedes cerrar la ventana que se puso en marcha el mapa mientras mantengas el mapa abierto.

     

    Después de ejecutar correctamente el código (abajo), verás a tu tarjeta Galileo agregarse al mapa en tiempo real!

     

    const int buttonPin = 2;

    const int ledPin = 13;

    int buttonState = 0;

    void setup() {

      pinMode(ledPin, OUTPUT);

      pinMode(buttonPin, INPUT);

    }

    void loop(){

      buttonState = digitalRead(buttonPin);

      if (buttonState == HIGH) {

      digitalWrite(ledPin, HIGH);

      // Contact a service that will place your Galileo on a map

      system("\"wget -q -O - \"$@\" \"http://www.lemeccaniche.com/api/dataviz/users/register\"");

      }

      else {

      digitalWrite(ledPin, LOW);

      }

    }

     

    También puede ejecutar esto mientras esté conectado por telnet en Galileo usando:

     

    wget -q -O - "$@" "http://www.lemeccaniche.com/api/dataviz/users/register";

     

    En Resumen

     

    La tarjeta Galileo de Intel® es especial. Combinada con el chip Quark, software y hardware compatible con Arduinoy Linux, la tarjeta Galileo puede ser lo que tu quieras crear.

     

    Después de instalar la imagen de Linux para la tarjeta microSD, estamos en condiciones de acceder al sistema operativo Linux a través de telnet. Una forma de comunicar a la Galileo es mediante su dirección IP.

     

    Usando DHCP o asignando una dirección IP estática, establecimos comunicación vía telnet.

     

    El comando "echo" envía una salida al monitor serial. También podemos comunicarnos a través del IDE de Arduino utilizando la función de "system".

     

    Desafíos: Comunicandose entre Linux y Arduino

    Echale un vistazo al script de ejemplo que utiliza el comando de Unix 'date':

     

    /* This example shows how to use a system call to set the current date & time with UNIX 'date' command. 

    We then get the current time, we redirect to a write to .txt file. Finally we read the contents of the

    text file back into the sketch and use the serial monitor to view the data. */

    char buf[9];

    void setup() {

      Serial.begin(115200);

      system("date 010112002014"); //establece la fecha y hora a las 12:00 hrs del 1o de Enero del 2014

    }

    void loop() {

      system("date '+%H:%M:%S' > /home/root/time.txt");  // Get current time in the format- hours:minutes:sec

      // and save in text file time.txt located in /home/root

      FILE *fp;

      fp = fopen("/home/root/time.txt", "r");

      fgets(buf, 9, fp);

      fclose(fp);

      Serial.print("The current time is ");

      Serial.println(buf);

      delay(1000);

    }

     

    Haz algo! Obten más información sobre la interfaz con Galileo utilizando Linux. Lee este gran artículo "Intel Galileo - Programación GPIO Desde Linux":

    www.malinov.com/Home/sergey-s-blog/intelgalileo-programminggpiofromlinux