28 septiembre, 2023

Cómo conectar una placa «Arduino Uno» a una Raspberry Pi

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

Deja una respuesta

Este sitio web utiliza cookies para que usted tenga la mejor experiencia de usuario. Si continúa navegando está dando su consentimiento para la aceptación de las mencionadas cookies y la aceptación de nuestra política de cookies, pinche el enlace para mayor información.plugin cookies

ACEPTAR
Aviso de cookies