A interface periférica em série (SPI) é um protocolo de comunicação serial síncrona amplamente utilizada para comunicação de curta distância, principalmente em sistemas incorporados. A combinação da versatilidade do Arduino com o poder computacional do Raspberry Pi através do SPI pode abrir uma infinidade de possibilidades de projeto. Nesta postagem do blog, exploraremos como configurar e usar a comunicação SPI entre um Arduino e um Raspberry Pi.
Entendendo o SPI
O SPI é um protocolo de comunicação duplex completo que opera no modo mestre-escravo. Ele usa quatro linhas principais:
- Mosi (mestre em escravo): Transfere dados de mestre para escravo.
- Miso (mestre em escravo): Transfere dados do escravo para o mestre.
- SCLK (relógio serial): Sincroniza a transmissão de dados gerada pelo mestre.
- SS/CS (Selecione/Selecionar CHIP): Seleciona o dispositivo escravo.
O SPI é favorecido por sua simplicidade e velocidade, tornando -o ideal para aplicações que exigem troca de dados rápida entre dispositivos.
Por que usar SPI com Arduino e Raspberry Pi?
A combinação de um Arduino com um Raspberry Pi aproveita os pontos fortes de ambas as plataformas. O Arduino se destaca no controle de hardware em tempo real, enquanto o Raspberry Pi oferece recursos de processamento de alto nível, conectividade de rede e um rico ambiente de sistema operacional. O uso do SPI permite que esses dois dispositivos se comuniquem com eficiência, permitindo projetos complexos, como sistemas de automação residencial, robótica e aplicativos de log de dados.
Configurando o hardware
Para estabelecer a comunicação SPI entre um Arduino e um Raspberry Pi, você precisará dos seguintes componentes:
- Arduino Uno (ou qualquer placa Arduino compatível)
- Raspberry Pi (qualquer modelo com pinos GPIO)
- Fios de jumper
- Breadboard (opcional)
Ligando o Arduino e Raspberry Pi para SPI
A fiação cuidadosa é crucial para garantir uma comunicação adequada. Veja como conectar o Arduino e o Raspberry Pi usando o SPI:
Pino GPIO de Raspberry Pi | Pino Arduino | Descrição |
---|---|---|
Gpio10 (mosi) | Pino 11 (Mosi) | Mestre escravo em |
Gpio9 (miso) | Pino 12 (miso) | Mestre em escravo |
GPIO11 (SCLK) | Pino 13 (SCLK) | Relógio em série |
Gpio8 (CE0) | Pino 10 (SS) | Selecionar escravo |
Gnd | Gnd | Terreno comum |
3.3V | 5V | Fonte de alimentação (Use o nível de mudança, se necessário) |
Observação: O Raspberry Pi opera em níveis lógicos de 3,3V, enquanto o Arduino UNO usa 5V. Recomenda -se usar um conversor de nível lógico para evitar possíveis danos ao Raspberry Pi.
Configurando o Arduino
O Arduino atuará como o dispositivo SPI Slave. Abaixo está uma amostra de esboço do Arduino para configurá -lo:
// Arduino as SPI Slave
#include
volatile byte receivedData = 0;
void setup() {
// Initialize serial communication for debugging
Serial.begin(9600);
// Set MISO as output
pinMode(MISO, OUTPUT);
// Enable SPI in Slave Mode
SPCR |= _BV(SPE);
SPI.attachInterrupt();
}
ISR(SPI_STC_vect) {
receivedData = SPDR;
}
void loop() {
if (receivedData) {
Serial.print("Received: ");
Serial.println(receivedData);
receivedData = 0;
}
}
Explicação:
- Spi.attachinterrupt (); Ativa a interrupção do SPI, permitindo que o Arduino lidera dados de entrada.
- Na rotina de serviço de interrupção
ISR(SPI_STC_vect)
, os dados recebidos são armazenados para processamento. - O
loop()
A função verifica os dados recebidos e os imprime no monitor serial.
Configurando o Raspberry Pi
O Raspberry Pi atuará como o dispositivo SPI Master. Usaremos Python com o spidev
Biblioteca para lidar com a comunicação SPI. Primeiro, verifique se o SPI está ativado:
- Abra a ferramenta de configuração do Raspberry Pi:
sudo raspi-config
- Navegar para Opções de interface > Spi > Habilitar
- Reinicie o Raspberry Pi se solicitado.
Instale o spidev
biblioteca se ainda não estiver instalado:
sudo apt-get install python3-spidev
Aqui está um amostra de script python para o Raspberry Pi:
# Raspberry Pi as SPI Master
import spidev
import time
# Open SPI bus 0, device (CS) 0
spi = spidev.SpiDev()
spi.open(0, 0)
# Set SPI speed and mode
spi.max_speed_hz = 50000
spi.mode = 0
def send_data(data):
"""Send a single byte to the SPI slave"""
response = spi.xfer2([data])
return response
try:
while True:
data = 42 # Example data byte
print(f"Sending: {data}")
resp = send_data(data)
print(f"Received: {resp[0]}")
time.sleep(1)
except KeyboardInterrupt:
spi.close()
Explicação:
- spi.open (0, 0) abre o barramento SPI 0, dispositivo 0 (CE0).
- spi.xfer2 ([dados]) envia o byte de dados e, simultaneamente, recebe dados do escravo.
- O script envia um byte (por exemplo, 42) a cada segundo e imprime a resposta do Arduino.
Testando a comunicação
Depois de configurar o Arduino e o Raspberry Pi:
- Carregue o esboço do Arduino para a placa Arduino.
- Conecte o Arduino ao Raspberry Pi através da fiação SPI.
- Execute o script Python no Raspberry Pi:
python3 spi_master.py
- Abra o Monitor serial do Arduino para visualizar os dados recebidos:
Tools > Serial Monitor
Você deve ver o Arduino recebendo os dados enviados pelo Raspberry Pi e exibindo -os no monitor serial. Da mesma forma, o Raspberry Pi exibirá os dados que envia e a resposta que recebe.
Dicas de solução de problemas
- Verifique a fiação: Verifique se todas as conexões entre o Arduino e o Raspberry Pi estão seguras e mapeadas corretamente.
- Níveis de tensão: Use um conversor de nível lógico para corresponder aos 3.3V do Raspberry Pi com os 5V do Arduino.
-
Ativar SPI: Verifique se o SPI está ativado no Raspberry Pi usando
raspi-config
. -
Permissões: Verifique se o seu usuário possui as permissões necessárias para acessar os dispositivos SPI. Pode ser necessário executar seu script python com
sudo
. - Taxa de transmissão: Verifique se o monitor serial e o esboço do Arduino estão usando a mesma taxa de transmissão.
- Configurações do SPI: Certifique -se de que o mestre e o escravo estejam configurados com o mesmo modo SPI e velocidade.
Conclusão
O uso da comunicação SPI entre um Arduino e um Raspberry Pi permite aproveitar os pontos fortes de ambas as plataformas de maneira eficaz. Esteja você construindo um sistema de robótica complexo, desenvolvendo uma rede de sensores ou experimentando o registro de dados, a compreensão do SPI é inestimável. Seguindo as etapas descritas neste guia, você pode configurar a comunicação SPI confiável e embarcar em projetos empolgantes incorporados que alavancam o poder de Arduino e Raspberry Pi.Feliz mexer!