Comunicarse con un Arduino usando una Raspberry Pi

Communicating with an Arduino Using a Raspberry Pi

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

  1. Frambuesa pi (Cualquier modelo con soporte de GPIO, por ejemplo, PI 3, PI 4)
  2. Arduino (por ejemplo, Uno, Mega, Nano)
  3. Cable USB (para conectar el Arduino al Raspberry Pi)
  4. Cables de jersey (Si usa la comunicación en serie GPIO)
  5. Python instalado en la frambuesa pi
  6. 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)

  1. Conecte el Arduino a la frambuesa pi Usando un cable USB.
  2. 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)

  1. Conecte el Arduino TX (pin 1) a Raspberry Pi Rx (GPIO 15, Pin 10).
  2. Conecte el Arduino RX (pin 0) a Raspberry Pi TX (GPIO 14, Pin 8).
  3. Conectar GND a GND.
  4. 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

  1. 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.
  2. 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.

Solución de problemas

  1. 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.
  2. Permiso Error denegado

    • Agregue su usuario al dialout grupo:
      sudo usermod -aG dialout $USER
      sudo reboot
      
  3. 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.

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!

Escribir un comentario

Notice an Issue? Have a Suggestion?
If you encounter a problem or have an idea for a new feature, let us know! Report a problem or request a feature here.