En este tutorial, vamos a aprender cómo conectar una placa Arduino Uno a una Raspberry Pi, para que la Raspberry Pi pueda enviar órdenes mediante un programa en Python a Arduino Uno y recibir información del estado de la placa Arduino. La conexión la haremos sin utilizar el cable USB, que sería la opción más sencilla, ya que es una conexión directa, pero ocupa mucho espacio físico, el puerto USB de Arduino Uno y uno de los puertos USB de la Raspberry Pi. Conectaremos ambas placas con cuatro cables (V, GND, TX y RX) y alimentaremos la placa Arduino Uno con la Raspberry Pi.
En primer lugar, os recomiendo mirar las entradas de Primeros pasos con Arduino Uno y Primeros pasos con Raspberry Pi, para tener el entorno preparado.
A continuación, conectaremos por USB la placa Arduino Uno a nuestro equipo, y cargaremos el siguiente programa:
int led = 13; //Led connected to pin 13 int data = 0; void setup() { while (!Serial) { ; // Wait for serial port to connect. Needed for native USB port only } Serial.begin(9600); pinMode(led, OUTPUT); } void loop() { if (Serial.available() > 0) { data = Serial.parseInt(); if(data == 1){ digitalWrite(led, HIGH); Serial.println("Turn on the other board"); } else { digitalWrite(led, LOW); Serial.println("Turn off the other board"); } } }
Podemos probarlo usando la consola serial del IDE de Arduino. Si escribimos un 1 se enciende el led 13, mientras que con un 0 se apaga.
Desconectamos Arduino del ordenador y, con la Raspberry Pi apagada, realizamos la conexión entre las placas, siguiendo el esquema:

Ahora nos queda configurar la Raspberry Pi. Accedemos a ella por SSH:
ssh pi@direccionip
Siendo «direccionip» la IP de vuestra Raspberry Pi.
A continuación, necesitamos instalar el paquete pyserial:
sudo pip3 install pyserial
Escribimos el código Python en la Raspberry Pi:
import serial import sys ser = serial.Serial('/dev/serial0', 9600, timeout=1) ser.write(sys.argv[1].encode()) response = "" while response == "": response = ser.readline().decode() print(response) ser.close()
Para que funcione con serial0, debemos habilitar en nuestra Raspberry Pi «serial»:
sudo raspi-config
Entramos en «Advanced Options», después en «Serial» y seleccionamos «Yes». Finalmente, reiniciamos:
sudo reboot now
Antes de ejecutar, tenemos que dar permisos al dispositivo. Si no, nos dirá que no tenemos permisos al ejecutar:
sudo chmod 777 /dev/serial0
Finalmente, con el archivo ya cargado y todas las conexiones realizadas, ejecutamos:
python3 test.py
El código lo tengo compartido en mi cuenta de GitHub:
https://github.com/diegorys/arduino-examples/tree/master/raspberry2arduino