Comunicação com um Arduino usando um Raspberry Pi

Communicating with an Arduino Using a Raspberry Pi

O Raspberry Pi e o Arduino podem se comunicar usando protocolos diferentes, incluindo Serial (uart), i2c e spi. Este guia mostrará como configurar a comunicação entre um Raspberry Pi e um Arduino usando o Interface serial (UART), que é o método mais comum e direto.


O que você precisará

  1. Raspberry Pi (Qualquer modelo com suporte GPIO, por exemplo, PI 3, PI 4)
  2. Arduino (por exemplo, Uno, Mega, Nano)
  3. Cabo USB (para conectar o Arduino ao Raspberry Pi)
  4. Fios de jumper (se estiver usando a comunicação serial do GPIO)
  5. Python instalado No Raspberry Pi
  6. Arduino IDE instalado no Raspberry Pi ou um computador separado

Etapa 1: Conectando o Arduino ao Raspberry Pi

Você pode conectar o Raspberry Pi ao Arduino usando USB ou o GPIO PINS.

Método 1: Conexão USB (recomendado)

  1. Conecte o Arduino para o Raspberry Pi usando um cabo USB.
  2. O Raspberry Pi detectará o Arduino como um dispositivo serial (por exemplo, /dev/ttyUSB0 ou /dev/ttyACM0).

Método 2: Usando pinos GPIO (serial de hardware)

  1. Conecte o Arduino TX (pino 1) para Raspberry Pi RX (GPIO 15, pino 10).
  2. Conecte o Arduino RX (pino 0) para Raspberry Pi TX (GPIO 14, pino 8).
  3. Conectar GND para GND.
  4. Desative o console serial interno do Raspberry Pi:
    sudo raspi-config
    
    • Navegar para Opções de interface> Porta serial.
    • Desative o shell de login em série, mas habilite o hardware da porta serial.
    • Reinicie o Raspberry Pi:
      sudo reboot
      

Etapa 2: Instale as bibliotecas necessárias

Verifique se o seu Raspberry Pi possui as ferramentas de comunicação serial necessárias instaladas.

sudo apt update
sudo apt install python3-serial

Para verificar as portas seriais disponíveis:

ls /dev/tty*

Para uma conexão USB, procure /dev/ttyUSB0 ou /dev/ttyACM0.


Etapa 3: Envie um esboço de Arduino

Para enviar dados do Arduino para o Raspberry Pi, envie este simples Esboço Arduino usando o Arduino IDE.

void setup() {
  Serial.begin(9600); // Start serial communication
}

void loop() {
  Serial.println("Hello from Arduino!"); // Send message
  delay(1000);
}

Etapa 4: Leia dados de série no Raspberry Pi

Crie um script python no Raspberry Pi para ler os dados do Arduino.

Exemplo de código 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()
  • Certifique -se disso /dev/ttyUSB0 corresponde à sua porta serial detectada.
  • Execute o script:
    python3 serial_read.py
    
  • Você deveria ver "Olá de Arduino!" impresso a cada segundo.

Etapa 5: enviando dados do Raspberry Pi para Arduino

Modifique o Código Arduino Para receber dados do 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);
  }
}

Modifique o Código Python Para enviar dados para o Arduino:

ser.write(b"Hello from Raspberry Pi!\\n")
  • Agora, o Arduino receberá mensagens enviadas pelo Raspberry Pi.

Métodos de comunicação alternativos

  1. I2C Comunicação (para múltiplos arduinos)

    • Raspberry Pi age como Mestre, Arduino age como Escravo.
    • Ativar i2c:
      sudo raspi-config
      
    • Instale as bibliotecas necessárias:
      sudo apt install python3-smbus i2c-tools
      
    • Usar Wire.h No lado Arduino para a comunicação I2C.
  2. Comunicação SPI (para transferência de dados de alta velocidade)

    • Requer Arduino habilitado para Spi e SPI.h biblioteca.
    • Mais rápido que o uart e i2c, mas requer mais fiação.

Solução de problemas

  1. Arduino não detectado no Raspberry Pi

    • Correr ls /dev/tty* Para verificar os dispositivos seriais disponíveis.
    • Verifique se a porta serial correta está especificada no script python.
  2. Permissão negado erro

    • Adicione seu usuário ao dialout grupo:
      sudo usermod -aG dialout $USER
      sudo reboot
      
  3. Caracteres de lixo na saída

    • Garantir Ambos os dispositivos usam a mesma taxa de transmissão (por exemplo, 9600).
    • Adicione um pequeno atraso (time.sleep(2)) Antes de ler dados em Python.

Conclusão

Seguindo este guia, você pode estabelecer Comunicação em série entre um Arduino e um Raspberry Pi, permitindo que eles trocassem dados por Projetos de IoT, integração de sensores e sistemas de automação. Experimente com I2c e spi Para aplicações mais avançadas!

Deixe um comentário

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.