La Raspberry Pi y Arduino pueden comunicarse entre sí utilizando diferentes protocolos, incluidos Serial (UART), I2C y SPI. Esta guía le mostrará cómo configurar la comunicación entre una Raspberry Pi y un Arduino utilizando el interfaz serie (UART), que es el método más común y directo.
Lo que necesitarás
- Frambuesa pi (Cualquier modelo con soporte de GPIO, por ejemplo, PI 3, PI 4)
- Arduino (por ejemplo, Uno, Mega, Nano)
- Cable USB (para conectar el Arduino al Raspberry Pi)
- Cables de jersey (Si usa la comunicación en serie GPIO)
- Python instalado en la frambuesa pi
- Arduino IDE Instalado en la Raspberry Pi o una computadora separada
Paso 1: Conectando el Arduino al Raspberry Pi
Puede conectar la Raspberry Pi al Arduino usando USB o el Alfileres gpio.
Método 1: Conexión USB (recomendada)
- Conecte el Arduino a la frambuesa pi Usando un cable USB.
- La Raspberry Pi detectará el Arduino como un dispositivo serie (por ejemplo,
/dev/ttyUSB0
o/dev/ttyACM0
).
Método 2: Uso de pines GPIO (serie de hardware)
- Conecte el Arduino TX (pin 1) a Raspberry Pi Rx (GPIO 15, Pin 10).
- Conecte el Arduino RX (pin 0) a Raspberry Pi TX (GPIO 14, Pin 8).
- Conectar GND a GND.
- Deshabilite la consola serie incorporada de Raspberry Pi:
sudo raspi-config
- Navegar por Opciones de interfaz> puerto serie.
- Deshabilite el shell de inicio de sesión sobre serie pero habilite el hardware del puerto serie.
- Reinicie la Raspberry Pi:
sudo reboot
Paso 2: Instale las bibliotecas requeridas
Asegúrese de que su Raspberry Pi tenga las herramientas de comunicación en serie necesarias instaladas.
sudo apt update
sudo apt install python3-serial
Para verificar los puertos serie disponibles:
ls /dev/tty*
Para una conexión USB, busque /dev/ttyUSB0
o /dev/ttyACM0
.
Paso 3: Sube un boceto Arduino
Para enviar datos del Arduino al Raspberry Pi, cargue este simple Arduino boceto usando el Arduino IDE.
void setup() {
Serial.begin(9600); // Start serial communication
}
void loop() {
Serial.println("Hello from Arduino!"); // Send message
delay(1000);
}
Paso 4: Lea los datos en serie en Raspberry Pi
Cree un script Python en Raspberry Pi para leer los datos del Arduino.
Ejemplo de código de python
import serial
import time
# Open the serial port (Change ttyUSB0 if necessary)
ser = serial.Serial('/dev/ttyUSB0', 9600, timeout=1)
time.sleep(2) # Wait for connection
try:
while True:
if ser.in_waiting > 0:
data = ser.readline().decode('utf-8').strip()
print(f"Received: {data}")
except KeyboardInterrupt:
print("Exiting...")
ser.close()
- Asegurarse de que
/dev/ttyUSB0
coincide con su puerto serie detectado. - Ejecute el guión:
python3 serial_read.py
- Deberías ver "¡Hola de Arduino!" impreso cada segundo.
Paso 5: Enviar datos de Raspberry Pi a Arduino
Modificar el Código Arduino Para recibir datos de la Raspberry PI:
void setup() {
Serial.begin(9600);
}
void loop() {
if (Serial.available() > 0) {
String received = Serial.readStringUntil('\\n');
Serial.print("Raspberry Pi Sent: ");
Serial.println(received);
}
}
Modificar el Código de Python Para enviar datos al Arduino:
ser.write(b"Hello from Raspberry Pi!\\n")
- Ahora, el Arduino recibirá mensajes enviados por Raspberry Pi.
Métodos de comunicación alternativa
-
Comunicación I2C (para múltiples arduinos)
- Raspberry Pi actúa como Maestro, Arduino actúa como Esclavo.
- Habilitar I2C:
sudo raspi-config
- Instalar bibliotecas requeridas:
sudo apt install python3-smbus i2c-tools
- Usar
Wire.h
en el lado Arduino para la comunicación I2C.
-
Comunicación SPI (para transferencia de datos de alta velocidad)
- Requerimiento Arduino habilitado para SPI y
SPI.h
biblioteca. - Más rápido que UART e I2C pero requiere Más cableado.
- Requerimiento Arduino habilitado para SPI y
Solución de problemas
-
Arduino no detectado en Raspberry Pi
- Correr
ls /dev/tty*
Para verificar los dispositivos serie disponibles. - Asegúrese de especificar el puerto serie correcto en el script de Python.
- Correr
-
Permiso Error denegado
- Agregue su usuario al
dialout
grupo:sudo usermod -aG dialout $USER sudo reboot
- Agregue su usuario al
-
Caracteres de basura en la producción
- Asegurar Ambos dispositivos usan la misma tasa de baudios (p.ej.,
9600
). - Agregue un pequeño retraso (
time.sleep(2)
) Antes de leer datos en Python.
- Asegurar Ambos dispositivos usan la misma tasa de baudios (p.ej.,
Conclusión
Siguiendo esta guía, puede establecer comunicación en serie entre un arduino y una frambuesa pi, lo que les permite intercambiar datos para Proyectos de IoT, integración de sensores y sistemas de automatización. Experimentar I2C y SPI ¡Para aplicaciones más avanzadas!