Comunicación entre Arduino y Raspberry Pi

Me compré un Arduino para hacer “cosas frikis” en mi casa y así explorar mi “yo programador”. Y casi lo está consiguiendo. Hoy os traigo un tutorial muy interesante y que para los iniciados como yo os abrirá muchas puertas.

ArduPi

Lo interesante siempre está mezclar y juntar cosas distintas, así que ¿Porque no utilizar Arduino como actuador y la Raspberry Pi como servidor? Desde que tengo Raspberry Pi, siempre he mirado de tener un control del dispositivo, saber el estado de los servicios, comunicación con ella, etc Con Arduino se puede conseguir ese control ya que lo podemos utilizar como actuador y hacer que se enciendan leds cuando pase algo, hacer sonar un speaker u otra cosa.

Para llegar hacer eso, primero hay que poder comunicar los dos dispositivos. Vamos a establecer una comunicación a través del puerto serie entre Arduino y Raspberry Pi. Utilizaremos Python para hacer esta comunicación y el código que usaremos es relativamente sencillo, así que si no sabes Python no te asustes que te lo voy a explicar todo bien detallado.

Introducción

Lo que haremos será reproducir una melodía con un speaker (si, de esos que encuentras en una placa base!) y a su vez reiniciaremos un servicio (Apache, por ejemplo). Conectaremos primero Arduino en nuestro PC, cargaremos el software en él y luego lo conectaremos a la Rasberry Pi. Desde la Rasberry Pi, “controlaremos” el Arduino.

Material necesario

  • Arduino UNO
  • Speaker
  • Raspberry Pi

Preparando Arduino

El código de Arduino es realmente sencillo, y el montaje no requiere mucho tiempo, ya que solo es conectar el speaker en el pin 8 (cable rojo) y en el pin GND (cable negro).

tonePiezo

Ahora cargamos este programa en nuestro Arduino, si aún no sabes como hacerlo, quizás deberías de pasarte primero por aquí: Instalar IDE de Arduino en GNU/Linux.

Junto a esto, abriremos un fichero nuevo y lo llamaremos pitches.h que contendrá las notas, os dejo el fichero en el Code de PortalLinux para no hacer una entrada tan larga, pero esta información también la podéis encontrar aquí. Este código lo que hace es que si la variable que Raspberry Pi le envía es igual a ‘w’ entonces ejecutará la melodía. Así de simple.

Una vez hemos cargado este código en Arduino, el siguiente paso es preparar la Raspberry Pi.

Preparando Raspberry Pi

Aquí tendremos que hacer un pequeño programa en Python que nos permitirá mandarle comandos a la placa Arduino. Para eso, tendremos que instalar una librería de Python en Raspberry Pi:

Una vez instalado, conectamos Arduino a nuestra Rasberry Pi y creamos un fichero llamado RaspDuino.py. En él añadiremos lo siguiente:

Este código también es sencillo. Primero de todo creamos un bucle para que nos vaya pidiendo siempre el “Introduce un comando“, todo lo que vayamos escribiendo, se enviará al Arduino y dependiendo del código hará una cosa u otra. Por ejemplo, si escribimos “patata” no hará nada, mientras que si enviamos ‘w‘ ejecutará la melodía en el Arduino y además, ejecutaremos en la Raspberry Pi, “service apache2 restart“. Si escribimos “exit” saldrá del bucle while y se acabará el programa.

Para ejecutar este fichero:

Demostración

Aquí os dejo un vídeo de como funciona, nada que no se haya explicado, ejecuto el programa en Python con el Arduino conectado a la Raspberry Pi, y cuando pulso Enter se escucha la melodía y en pantalla se muestra la salida del comando para reiniciar el Apache2.

La imaginación al poder!

Como podéis ver, se pueden hacer muchas cosas, encender leds, ejecutar melodía por el speaker… Con un código sencillo se pueden hacer mil cosas. Mi objetivo de este verano, es poder conectar Raspberry Pi con Arduino y Telegram, así desde Telegram enviar códigos para diferentes tareas y una respuesta óptica o sonora desde Arduino (y ahora con el tema de los bots de Telegram parece que será muy fácil).

Happy Hacking 😛

Fuentes: Arduino, GeekyTheory, Demasiado Personal.

El contenido de esta entrada está bajo licencia Creative Commons

Zagur

Técnico Superior de Administración de Sistemas. Estudiando actualmente Desarrollo de aplicaciones web. #GNU #Linux #CSS #HTML #Python #SoftwareLibre #OpenSource

8 comentarios “Comunicación entre Arduino y Raspberry Pi”

  1. Manuel

    Navega con Google Chrome 50.0.2661.94 Google Chrome 50.0.2661.94 en Windows 7 x64 Edition Windows 7 x64 Edition

    Hola compañero…

    he leído tu artículo entre comunicación entre arduino y raspberry pi porque estoy buscando información para mi proyecto.
    Resulta que quiero controlar arduino con telegram pero no encuentro como hacerlo y, como leí que ibas a emprender un proyecto similar, me gustaría que me arrojaras algo de luz.

    Es necesario emplear la raspberry para utilizar telegram con arduino o, solo con arduino se puede conseguir. He visto videos en youtube que lo hace pero no tengo ni idea de como.

    Agradecería mucho si me ayudas.

    Responder
    • Zagur

      Navega con Firefox 43.0 Firefox 43.0 en GNU/Linux x64 GNU/Linux x64

      Aquí tienes el artículo para controlar la Raspberry Pi con Telegram http://portallinux.es/raspberry-pi-notifica-cualquier-cosa-por-telegram/ Para este caso no utilicé Arduino porque los ejemplos que explicaba para para que la Raspberry respondiera comandos del sistema. Supongo que no será muy complicado hacer por ejemplo que cuando escribas una palabra clave se encienda un led del Arduino (por ejemplo). El script en Python del artículo se puede mejorar, por ejemplo añadiendo una condición para ejecutar lo que sea escrito y filtrarlo por el ID de tu usuario (así cualquier persona que se conecte a tu bot no podrá hacer nada, esto lo tengo pendiente). Espero haberte ayudado.

      Saludos,
      Zagur.

      Responder
  2. Angl

    Navega con Google Chrome 54.0.2840.71 Google Chrome 54.0.2840.71 en Windows 10 x64 Edition Windows 10 x64 Edition

    Hola buen día, yo quiero utilizar ambas placas, lo que deseo hacer es que la RASPBERRY PI mande un pulso de voltaje al arduino uno , estoy para llevar a cabo la funcion de conectarse ala red GSM,
    solo que no se como programarle eso ala Raspberry Pi mediante python y en el IDLE del arduino que reciba o lea ese pulso de voltaje a una de sus entradas digitales

    Espero me puedas ayudar, seria valiosa tu ayuda

    Responder
  3. Javier Llanes

    Navega con Google Chrome 54.0.2840.71 Google Chrome 54.0.2840.71 en Windows 7 x64 Edition Windows 7 x64 Edition

    Consulta, ¿podrias dar el detalle de la conexion fisica entre ambos? Via cable o pines?
    Saludos. Muy buen articulo

    Responder
    • Zagur

      Navega con Firefox 50.0 Firefox 50.0 en Ubuntu x64 Ubuntu x64

      La conexión entre ellos es vía cable, por eso inicializamos el serial en la línea 12 del fichero que introducimos al Arduino.

      Saludos,
      Zagur.

      Responder

Trackbacks/Pingbacks

Deja un comentario

Tu dirección de correo electrónico no será publicada.

Utilizamos cookies propias y de terceros para mejorar nuestros servicios. Si continúa navegando, consideramos que acepta su uso. Doble clic sobre aquí para cerrar.