Raspberry Pi y Arduino en plena comunicación
Aloha raspbianos del mundo! Hoy me ha dado por meterme en este mundo oscuro de los computadores. Pero claro, siempre tienen que ir unidos a los microcontroladores, sino me aburro…
Bueno, lo que quiero decir es que hoy me he decidido a conectar un Arduino con una Raspberry Pi. Podrían enviarse mensajes por ethernet, wifi o similar, pero para que sea un experimento válido para cualquiera que tenga lo básico en casa, lo dejaremos en una conexión USB de las de siempre.
Para ello habrá que conectar el USB a la Raspberry Pi. La Raspberry hará de ordenador (De hecho, es un ordenador pequeño) y alimentará a Arduino. Por otra parte, el puerto serie que vemos en nuestros ordenadores ahora lo recibirá la Raspberry Pi… Y le daremos uso a eso.
Qué hacer en Arduino
Cuando se hacen estas cosas se hacen básicamente mediante mensajes. Es por eso que utilizaremos la comunicación serie de Arduino para ir enviando mensajes. En el serial de Arduino tenemos estas dos órdenes:
Serial.println(); Serial.read();
La primera es muy típica y sirve para mostrar cosas en la consola serie de Arduino de manera que podamos ver los datos. Ahora esa consola está en Raspberry Pi, se comunica con este pequeño ordenador. Por lo que la idea será hacer un print para mostrar los valores que tomamos con Arduino a la Raspberry. Luego la Raspberry ya utilizará esos datos como crea oportunos.
La segunda función es la lectura. Ésta lo que hace es leer lo que le proviene del ordenador, que en este caso es la Raspberry Pi. Este comando lo utilizaremos para mandarle mensajes que Arduino descifrará y sabrá qué debe de hacer: encender un motor, un led, girar un servo unos grados determinados…
Qué hacer en Raspberry PI
Ahora queda la parte del otro lado, la de Raspberry Pi. Raspberry puede funcionar con otros lenguajes pero el más rápido y el más usado en esta plataforma es Python. Python es un lenguaje muy rápido de aplicar ya que no define variables ni pierde el tiempo poniendo puntos y comas o corchetes.
Eso sí, es muy importante que el texto esté indentando ( o con sangrías). Es decir, que se dejen las tabulaciones correctas porque es de ahí de dónde Python lee dónde acaba cada función. Esto hace que el lenguaje sea muy legible.
import serial
serialCOM = serial.Serial(‘/dev/ttyACM0’,9600)
serialCOM.open()
while True:
valor = raw_input(‘Elige el pin 1 el 5:’)
if valor == ‘1’:
serialCOM.write(‘1’)
print(serialCOM.read())
elif valor == ‘5’:
serialCOM.write(‘5’)
print(serialCOM.read())
serialCOM.close()
Como ves, he cargado una librería con la palabra import, tal y como haría en Arduino. Tal vez necesites instalarla antes en Raspberry, por lo que tendrás que utilizar el comando siguiente en el terminal de conexión SSH (bash):
sudo apt-get install python-serial
Lo primero que hago es utilizar este serial y decirle dónde está nuestro USB en Raspberry. Normalmente el ACM0 es el puerto más usual. Pero podría ser el ACM1, ACM2, ACM3,… Todo es cuestión de probar (O de utilizar el terminal para encontrarlo).
Luego se utiliza el comando write para escribir un mensaje en el puerto serie y que Arduino lo pueda leer con su Serial.read(). Luego, en python he añadido el read para poder leer los valores llegados de Arduino.
Información básica sobre Proteción de datos
Responsable ➥ Sergio Luján Cuenca
Finalidad ➥ Gestionar el envío de correos electrónicos con artículos, noticias y publicidad. Todo relacionado con los temas de rufianenlared.com
Legitimación ➥ Consentimiento del interesado
Destinatarios ➥ Estos datos se comunicarán a MailRelay para gestionar el envío de los correos electrónicos
Derechos ➥ Acceder, rectificar y suprimir los datos, así como otros derechos, como se explica en la política de privacidad
Plazo de conservación de los datos ➥ Hasta que se solicite la supresión por parte del interesado
Información adicional ➥ Puedes encontrarla en la política de privacidad y el aviso legal
Uniendo Arduino y Raspberry Pi
Ya has visto las dos partes. En sí el resumen del código de Arduino sería este:
void setup() { Serial.begin(9600); } void loop() { if(Serial.read() == '1'){ Serial.println(analogRead(A1)); } else if(Serial.read() == '5'){ Serial.println(analogRead(A5)); } }
Y el del código Python es el anterior. Ahora hay que conectar el USB de Arduino a nuestro PC y compilar y cargar este programa en Arduino. Para luego conectar el USB a la Raspberry y activar el programa en Python.
Para ello, no es necesario compilar ni nada. Simplemente hay que guardar el archivo con un nombre acabado en py. Lo voy a llamar serial-arduino.py y lo llamaríamos desde el bash de Raspberry con la orden:
python serial-arduino.py
Así, lo que pasará es que le enviaremos una llamada a Arduino de la salida analógica que debe de leer y él nos dará los datos de las lecturas que vaya haciendo
Y tú, ¿Has hecho algún proyecto conjunto?
Espero que te sirva para mantener una comunicación fluida con tu Arduino. Este mismo esquema de mensajes con preguntas y respuestas es un poco lo que se utiliza en relaciones clientes-servidores… Pero bueno, eso es otra movida informática en la que te puedes meter más adelante.
Lo que sí quiero decirte es que puedes utilizar esta misma metodología en una comunicación Wifi, si te es más cómodo o necesitas que Arduino deba de ir moviéndose por la casa. O con un cable Ethernet si Arduino debe de estar en un lugar un poco alejado de la Raspberry Pi. En estos casos, puedes seguir utilizando el cable USB para alimentar a Arduino desde la Raspberry o puedes utilizar alguna batería o alimentación externa.
Así que aquí me quedo. Molaría que dejases tus ideas de proyectos en los que se utilice Raspberry Pi y Arduino a la vez en los comentarios.
P.D. Si no entiendes muy bien qué diferencias hay entre Raspberry Pi y Arduino puedes leerla en el blog de ochobitshacenunbyte 😉