La conexión entre Arduino y Raspberry Pi es una buena idea. Por un lado Arduino es una plataforma muy conocida, con muchas aplicaciones y una gran comunidad, por otra, Raspberry Pi tiene la flexibilidad de la programación y la comunicación a la Internet.
En este artículo veremos una forma de conectar Arduino con Rapsberry Pi, pero a través del cable USB. Esto tiene la ventaja adicional de usar un hardware mínimo.
Materiales
Los materiales ocupados son
- Raspberry Pi con Occidentalis (pack en la tienda)
- Fuente de Poder 5V @ 1A
- Conector USB Wifi
- Cable para USB para Arduino
- Arduino Uno R3
- PC con Arduino IDE instalado
La conexión la haremos en tres etapas:
- Programamos el Arduino
- Pruebas iniciales y finalmente
- Ejemplo en código Python usando PySerial
, tras el salto el procedimiento que usamos
Programando el Arduino
Se debe cargar en el arduino el siguiente sketch
void setup(){ Serial.begin(9600); } void loop(){ Serial.println("Hello Pi"); delay(2000); }
Prueba inicial
Conectamos nuestro Raspberry Pi con el USB Wifi, aqui estan las instrucciones. Conectamos el Raspberry Pi con la fuente de alimentación y ahora, antes de conectar el Arduino, probamos el siguiente comando,
ls /dev/tty*
Ahora se puede conectar el Arduino y se ejecuta nuevamente el comando anterior para identificar la puerta correcta. En nuestro caso aparece la puerta /dev/ttyACM0 y es la que usamos en el programa de Python
Codificando en Python
Ahora ya tenenos conectado el Arduino con la Raspberry Pi, usamos la biblioteca PySerial para habilitar la puerta serial. Para instalar PySerial usamos el siguiente comando
sudo pip serial
A continuación escribimos el siguiente código de Python para mostrar el funcionamiento
# website: www.iot.cl # # Purpose : Basic use of USB port # # Date : 2013–07–19 from serial import Serial ardu = Serial('/dev/ttyACM0', 9600, timeout=1) while True: try: a = ardu.readline() print a except KeyboardInterrupt: break ardu.close()
Bibliografía
blog de OscarLiang
Articulo anterior de Raspberry Pi y Teensy via GPIO
muy interesante mi buen, lo intentare, oye pero una duda, si tambien quiero que la raspi envie datos, que deberia cambiar?, espero me puedas ayudar y si puedes me mandes la respuesta a mi correo, gracias
Estimado Carlos,
La respuesta esta en uno de los links de este articulo, en este caso se lee un valor n desde la raspberry y ese valor (de tipo entero) se ocupa para hacer parpadear un led n veces
A continuacion el sketch
================
const int ledPin = 12;
void setup(){
pinMode(ledPin, OUTPUT);
Serial.begin(9600);
}
void loop(){
if (Serial.available()) {
light(Serial.read() – ‘0’);
}
delay(500);
}
void light(int n){
for (int i = 0; i < n; i++) { digitalWrite(ledPin, HIGH); delay(100); digitalWrite(ledPin, LOW); delay(100); } } ============ Por el lado de la raspberry el script es muy sencillo, en este caso escribimos sobre la serial el valor 3 ========== from serial import Serial ardu = Serial('/dev/ttyACM0', 9600, timeout=1) ardu.write('3') ==========