Internet de las Cosas I: Conexión Raspberry Pi con Arduino

Hoy en día, aparece en muchos sitios, el concepto Internet de las Cosas; este concepto nos permite poder controlar a través de la red de Redes, cualquier dispositivo que nosotros podamos crear. Este artículo nos introduce a este mundo; utilizando en este caso una Raspberry PI para poder conectar nuestro Arduino y poder comunicarnos con él a través de Internet. En esta serie de Artículos iremos comentando distintos métodos y terminaremos creando una web para controlar nuestro Arduino a través de un navegador.

El termino Internet de las Cosas ha sido utilizado hoy en día para referirse a distintos dispositivos conectados a la red de redes que pueden ser consultados o controlados de manera remota a través de Internet. En este caso, vamos a realizar un ejemplo sencillo; vamos a controlar 3 leds que controlaremos a través de Internet. En este primer artículo nos centraremos en realizar el montaje con Arduino y conectarlo a una Raspberry PI que será la encargada de gestionar la conexión a Internet. En próximas entregas, veremos como realizar una web y poder controlarla a través de ella.

Para comenzar, vamos a mostrar los materiales necesarios para este tutoríal:

Tanto las resistencias y los leds pueden ser conseguidos en los kits de desarrollo de Arduino que podemos encontrar. Si necesita más información, puede encontrarlo en este artículo.  Una vez hemos visto que materiales necesitamos, vamos a explicar que montaje vamos a realizar y posteriormente mostraremos el montaje. En este ejemplo, queremos que al recibir una señal por internet y en función de la señal recibida encender o apagar las distintas luces; que en este caso, serán 3 leds.

 

La señal recibida, será una cadena de caracteres compuesta de 2 caracteres. El primero indicará el pin que vamos a utilizar; que podrá ser 8,9 o 0 para indicar el pin 8, 9 o 10(puede usarse cualquier otro pin digital). el segundo, indicará el estado de este si es encendido o apagado. Lo indicaremos con los caracteres ‘H’ o ‘L’ para indicar encendido o apagado. Por ejemplo “8H” indica que queremos encender el pin 8.

Una vez hemos visto el funcionamiento del ejemplo, vamos a mostrar el montaje de este. Para ello, hemos usado el programa fritzing para mostrar este montaje. En futuros artículos mostraremos como funciona este programa para prototipado.

iot1_bb

 

Como podemos ver para la conexión con Arduino y la Raspberry pi, solo es necesario conectarlos  a través de uno de los Puertos USB que tiene la Raspberry(ya sean 2 para el modelo B o 4 para el modelo B+).  el resto de conexiones las hacemos entre el arduino y los leds como mostramos en el montaje anterior. Seguidamente mostramos una foto de como quedaría este montaje.

 

DSC_0746

 

Con el montaje realizado, vamos a pasar a analizar como realizaríamos la programación de la placa. En este caso, utilizaremos el puerto serie(que esta conectado al arduino por USB). para que reciba los datos y sepa en todo momento que ha de hacer. para ello utilizaremos el Objeto Serial El cual será por el que podremos leer desde el puerto serie y podremos ver que acción realizar. Os dejamos el código a cargar en la placa Arduino:

/*
 * BooleanBite.com: Este ejemplo permite mandar un codigo que permitira 
 * Tanto encender como apagar una serie d Leds a traves del puerto serie(USB).
 * El codigo para mandar es el siguiente:
 *    nY
 *  - Donde n es un puede ser los numeros 8,9 y 0 los cuales corresponden a los
 *    pines 8,9 y 10.
 *  - Y es una letra que puede ser H o L para indicar encendido H o apagado L.
 * Este tutorial forma parte del aticulo sobre Internet de las cosas.
 * Autor: BooleanBite
 * Fecha: 11/12/2014
 */
 
 
void setup() {
  //INicializacion de los pines
  pinMode(8, OUTPUT);
  pinMode(9, OUTPUT);
  pinMode(10, OUTPUT);
  Serial.begin(9600);
 
}
 
void loop() {
 //Si hay datos desde el puerto serie...
  if(Serial.available()){
    //Leemos el primer caracter(pin)
    //Leemos el segundo caracter(Estado)
   char pin = Serial.read();
   char mode = Serial.read();  
   //En funcion del pin recibido se realiza una operacion
   switch(pin){
      case '8':
        ligths(8,mode);
      break;
      case '9':
        ligths(9,mode);
      break;
      case '0':
        ligths(10,mode);
      break;
   } 
  }
  delay(250);
 
}
//Esta funcion enciende o apaga un led en funcion del pin y del modo recibido.
void ligths(byte pin,char mode){
  if(mode=='H'){
    digitalWrite(pin, HIGH); 
  }else{
       if(mode=='L')
          digitalWrite(pin, LOW);    
  }
}

En este código debemos señalar 2 partes. Por un lado, como se obtienen los datos desde el puerto serie, y por otro lado, como se realiza la acción de encender o apagar el led. En primer lugar, utilizamos la función read() del objeto Serial para obtener 1 carácter desde el puerto serie; siempre y cuando haya datos esperando lo cual se comprueba usando la función available que nos permite saber cuando hay datos esperando a ser leídos desde el puerto serie.

Por otro lado, una vez leídos los 2 datos(pin y estado), los analizamos y realizamos la acción utilizando una estructura de control switch y una condicional if de modo que se ejecuta la función digitalWrite para encender o apagar el led correspondiente.

Con todo esto, ya podemos cargar el código en nuestro arduino y poder probarlo. Pero claro; ¿Cómo mandamos la información al arduino? para ello, vamos a utilizar el monitor serie que nos provee el IDE arduino para mandar información a la placa. EL monitor Serie podemos encontrarlo en la barra de tareas a la derecha del todo tiene un icono de una lupa con un símbolo +.

Captura de pantalla 2014-12-12 a las 17.07.25

 

Al pulsar en el botón se abrirá el monitor del puerto serie. En este monitor, podemos ver todos los mensajes(podemos usar el puerto serie también para depurar nuestro código); además podemos mandar mensajes al Arduino.

Captura de pantalla 2014-12-12 a las 17.09.45

 

Si por ejemplo mandamos el mensaje 8H, directamente debería de poderse encender el led conectado al pin 8. y si escribimos después 8L, se debería de apagar el led del pin 8. Podemos probar este código y ver que funciona correctamente.

Con esto, ya tenemos listo la parte de Arduino y tenemos funcionando nuestro sketch sin embargo; falta algo. Este artículo trata sobre internet de las cosas pero sin embargo, aun no hemos conectado nuestro arduino a Internet. Solo que podemos mandarle la información por el cable USB. El siguiente paso, es configurar nuestra Raspberry Pi para que pueda mandar datos a través del USB para que lo reciba Arduino. Antes de nada, necesitaremos conectar la Raspberry Pi y nuestro Arduino a través de un cable USB.

Para realizar este tutorial, se ha utilizado la distribución de Linux para Raspberry Pi basado en Debian Raspbian. Si se requiere más información de como utilizar esta distribución o de como configurarla os dejamos un enlace a la documentación oficial.

Los paquetes que necesitaremos en este ejemplo son los siguientes:

  • openssh; para poder conectarnos a través de SSH a nuestra Raspberry PI.
  • python2.x: interprete Python para programar en este lenguaje de programación.
  • pyserial: Librería para python para poder mandar información a través del puerto Serie(en este caso USB).

Para poder instalar los 2 primeros paquetes utilizaremos los siguientes comandos en una consola:

 

 sudo apt-get install openssh
 sudo apt-get install python python-pip python-dev build-essential

Una vez instalados estos paquetes, ya podemos ponernos manos a la obra para conectarnos a nuestro arduino por USB. Para ello, vamos a utilizar el programa pip para poder instalar la librería pyserial. Ejecutamos el siguiente comando en la consola:

pip install pyserial

Una vez terminado de instalar este paquete, ya tendremos todo listo para comenzar a programar nuestra Raspberry pi y poder mandar información a través del USB. En primer lugar, necesitaremos conectarnos a través de Internet a nuestra Raspberry para ello utilizaremos el protocolo ssh. Para conectarnos a nuestra Raspberry, utilizaremos el comando.

ssh pi<dirección raspberry>

Una vez conectados ejecutaremos el interprete python y escribiremos las siguientes lineas:

import serial
 
arduino = serial.Serial('/dev/ttyACM0',9600)
arduino.write('8H')
arduino.write('8L')

Un aspecto importante, es saber que dispositivo es nuestro USB; ya que necesitamos saberlo(ttyACM0) o cualquier otro dispositivo. Para ello, podemos hacer lo siguiente.

  1. Con el USB desconectado.Ejecutar el comando ls /dev/tty* y ver todos los nombres.
  2. Conectar el USB y ejecutar el mismo comando. Aparecerá un nuevo dispositivo. Ese nombre es el que debemos utilizar.

Con todo ya listo, ya podemos controlar a distancia nuestros leds. Teniendo ya nuestro primer dispositivo del Internet de las Cosas. En el próximo artículo, crearemos una web por el que controlaremos nuestro Arduino.

 

4 Comments on "Internet de las Cosas I: Conexión Raspberry Pi con Arduino"

  1. Christian Alatorre | mayo 14, 2015 en 6:22 pm | Responder

    Hola me parece excelente lo que hiciste, yo estoy haciendo un proyecto de domótica con raspberry y arduino controlado mediante una interfaz web, y hasta ahora no puedo realizar la ejecucion no tienes algo de material sobbre eso? gracias.

  2. muy buenas, solo una duda respecto a lo dixo, abres el interprete de python como? y creas pones esto?

    import serial

    arduino = serial.Serial(‘/dev/ttyACM0’,9600)
    arduino.write(‘8H’)
    arduino.write(‘8L’)

    y donde lo metes? que haces con el? perdonaras mi torpeza…
    por lo demas te felicito 🙂

    • Hola Alex:

      El interprete Python, simplemente es ejecutar el siguiente comando:

      python

      sin ningún argumento ni fichero. eso hará que se ejecute el interprete como si de una consola se tratara por lo que puedes ir escribiendo las distintas lineas. Obviamente puedes crearte un fichero .py y ejecutarlo directamente. Pero en este caso puedes hacerlo en la propia consola. Recuerda que para ejecutar esas lineas necesitas claramente tener instalado python(se especifica antes en el propio artículo). Por otro lado no te olvides tener instalada la librería de python pyserial(sino no te funcionara la línea import serial).

      Espero que te haya sido de ayuda.

Deja un comentario.

Tu dirección de correo no será publicada.


*


*