En este tutorial de Zagur, vamos a ver como es posible conectar de una forma muy sencilla a través del puerto serie una placa Arduino con una Raspberry Pi utilizando Python para hacer esta comunicación.
El resultado va a ser reproducir una melodía con un zumbador conectado a Arduino por medio de un servicio (Apache, por ejemplo)que correrá en la Rasberry Pi.
Para hacer posible el ejemplo conectaremos primero Arduino en nuestro PC, cargaremos el software en él y luego lo conectaremos a la Rasberry Pi.
El código de Arduino es realmente sencillo, y el montaje no requiere mucho tiempo, ya que solo es conectar el zumbador piezoléctrico en el pin 8 (cable rojo) y en el pin GND (cable negro).
Ahora cargamos este programa en nuestro Arduino,
#include “pitches.h”
// Notas en la melodía
int melody[] = {
NOTE_C4, NOTE_G3, NOTE_G3, NOTE_A3, NOTE_G3,0, NOTE_B3, NOTE_C4};
// Duración de las notas: 4 (negra), 8 (semicorchea), etc
int noteDurations[] = {
4, 8, 8, 4, 4, 4, 4, 4};
void setup () {
Serial.begin(9600); //Inicializamos el puerto serial a 9600 baudios
}
void loop() {
if (Serial.available()) { //Si está disponible el puerto serie
char c = Serial.read(); //Guardamos la lectura en una variable char
if (c == ‘w’) { // Si escribo w entonce haremos sonar una melodía y reiniciamos apache (en la RPi)
for (int thisNote = 0; thisNote < 8; thisNote++) {
int noteDuration = 1000/noteDurations[thisNote];
tone(8, melody[thisNote],noteDuration);
int pauseBetweenNotes = noteDuration * 1.30;
delay(pauseBetweenNotes);
// parar el tono que se esta reproduciendo:
noTone(8);
}
}
}
}
Este código resumidamente lo que hace es que comprobar mediante el condiciona if (c == ‘w’) si la variable que Raspberry Pi le envía es igual el carácter ‘w’ ( o el carácter que se desee siempre que lo defina en este código) , entonces ejecutará la melodía hasta que finalice por medio del bucle for{} .
Junto a esto, abriremos un fichero nuevo y lo llamaremos pitches.h que contendrá las notas musicales que se puede descargar aquí.
Una vez hemos cargado este código en Arduino, el siguiente paso es preparar la 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 mendiante el comando.
apt–get install python–serial Una vez instalado, conectamos Arduino a nuestra Rasberry Pi y creamos un fichero llamado RaspDuino.py. En él añadiremos lo siguiente: import os arduino = serialSerial(‘/dev/ttyACM0’, 9600) print(“Starting!”) continuar = True while continuar: comando = raw_input(‘Introduce un comando: ‘) #Input arduinowrite(comando) #Mandar un comando hacia Arduino if comando == ‘w’: print(‘Reiniciando apache…’) resultado = ossystem(“service apache2 restart”) elif comando == ‘exit’: continuar = False arduinoclose() #Finalizamos la comunicacionEste código también es sencillo. En primer lugar creamos un bucle para que nos vaya pidiendo siempre el “Introduce un comando“, y todo lo que vayamos escribiendo, se enviará al Arduino y de modo que dependiendo del código qeu tenga Arduino hará una cosa u otra. En el ejemplo 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 ya sólo queda ejecutar el fichero en python: python RaspDuino.py
Fuente aqui