So verwenden Sie die SPI -Kommunikation mit Arduino und Raspberry Pi

Die serielle periphere Grenzfläche (SPI) ist ein synchrones serielles Kommunikationsprotokoll, das weit verbreitet für die Kurzstreckenkommunikation verwendet wird, hauptsächlich in eingebetteten Systemen. Die Kombination der Vielseitigkeit des Arduino mit der Rechenleistung des Raspberry Pi über SPI kann eine Vielzahl von Projektmöglichkeiten eröffnen. In diesem Blog -Beitrag werden wir untersuchen, wie die SPI -Kommunikation zwischen einem Arduino und einem Raspberry Pi eingerichtet und einsetzt.

SPI verstehen

SPI ist ein Full-Duplex-Kommunikationsprotokoll, das im Master-Slave-Modus arbeitet. Es verwendet vier Hauptlinien:

  • Mosi (Master Out Sklave In): Übertragen Sie Daten vom Master zu Sklave.
  • Miso (Meister im Sklaven): Übertragung von Sklaven zu Master.
  • SCLK (Serienuhr): Synchronisiert die vom Master generierte Datenübertragung.
  • SS/CS (Slave Select/Chip Select): Wählt das Slave -Gerät aus.

SPI wird für seine Einfachheit und Geschwindigkeit bevorzugt und macht es ideal für Anwendungen, die einen schnellen Datenaustausch zwischen Geräten erfordern.

Warum SPI mit Arduino und Raspberry Pi verwenden?

Die Kombination eines Arduino mit einem Himbeer -Pi nutzt die Stärken beider Plattformen. Der Arduino zeichnet sich in Echtzeit-Hardware-Steuerung in Echtzeit aus, während der Raspberry Pi hochrangige Verarbeitungsfunktionen, Netzwerkkonnektivität und eine umfangreiche Betriebssystemumgebung bietet. Durch die Verwendung von SPI können diese beiden Geräte effizient kommunizieren und komplexe Projekte wie Heimautomationssysteme, Robotik und Datenprotokollierungsanwendungen ermöglichen.

Einrichten der Hardware

Um die SPI -Kommunikation zwischen einem Arduino und einem Raspberry Pi zu ermitteln, benötigen Sie die folgenden Komponenten:

  • Arduino Uno (oder ein kompatibles Arduino -Vorstand)
  • Raspberry PI (jedes Modell mit GPIO -Stiften)
  • Jumperdrähte
  • Breadboard (optional)

Verdrahtung des Arduino und Raspberry Pi für SPI

Eine sorgfältige Verkabelung ist entscheidend, um eine ordnungsgemäße Kommunikation zu gewährleisten. Hier erfahren Sie, wie Sie den Arduino- und Raspberry Pi mit SPI verbinden:

Raspberry Pi Gpio Pin Arduino Pin Beschreibung
Gpio10 (MOSI) Pin 11 (Mosi) Sklave einleiten
Gpio9 (Miso) Pin 12 (Miso) Meister im Sklaven
Gpio11 (SCLK) Pin 13 (SCLK) Serienuhr
Gpio8 (CE0) Pin 10 (SS) Sklavenauswahl
GND GND Gemeinsamkeiten
3.3 V 5v Stromversorgung (Nutzungsniveau verlagert gegebenenfalls)

Notiz: Der Raspberry Pi arbeitet bei 3,3 V -Logikniveaus, während Arduino Uno 5 V verwendet. Es wird empfohlen, einen logischen Konverter zu verwenden, um potenzielle Schäden am Raspberry PI zu verhindern.

Konfigurieren des Arduino

Der Arduino fungiert als SPI -Sklavengerät. Unten finden Sie eine Beispiel -Arduino -Skizze, um sie einzurichten:


// 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;
  }
}

Erläuterung:

  • Spi.attachinterrupt (); Ermöglicht den SPI -Interrupt, so dass der Arduino eingehende Daten verarbeiten kann.
  • In der Interrupt -Service -Routine ISR(SPI_STC_vect)Die empfangenen Daten werden zur Verarbeitung gespeichert.
  • Der loop() Funktionsprüfungen für empfangene Daten und druckt sie auf den seriellen Monitor.

Konfigurieren des Raspberry Pi

Der Raspberry Pi fungiert als SPI -Master -Gerät. Wir werden Python mit dem verwenden spidev Bibliothek zur SPI -Kommunikation. Stellen Sie zunächst sicher, dass SPI aktiviert ist:

  • Öffnen Sie das Raspberry PI -Konfigurationstool:
    sudo raspi-config
  • Navigieren zu Schnittstellenoptionen > Spi > Aktivieren
  • Starten Sie den Raspberry Pi neu, wenn Sie aufgefordert werden.

Installieren Sie die spidev Bibliothek, wenn sie noch nicht installiert ist:

sudo apt-get install python3-spidev

Hier ist ein Beispielpython -Skript für den 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()

Erläuterung:

  • spi.open (0, 0) Öffnet SPI Bus 0, Gerät 0 (CE0).
  • SPI.XFER2 ([Daten]) Sendet das Datenbyte und empfängt gleichzeitig Daten aus dem Sklaven.
  • Das Skript sendet jede Sekunde ein Byte (z. B. 42) und druckt die Antwort aus dem Arduino.

Testen der Kommunikation

Nach dem Einrichten des Arduino- und Raspberry Pi:

  1. Laden Sie die Arduino -Skizze in das Arduino Board hoch.
  2. Schließen Sie den Arduino über die SPI -Verkabelung mit dem Himbeer -Pi an.
  3. Führen Sie das Python -Skript auf dem Raspberry Pi aus:
    python3 spi_master.py
  4. Öffnen Sie den Arduino -Serienmonitor, um die empfangenen Daten anzuzeigen:
    Tools > Serial Monitor

Sie sollten sehen, wie der Arduino die vom Raspberry Pi gesendeten Daten empfängt und im Serienmonitor angezeigt wird. In ähnlicher Weise zeigt der Raspberry Pi die von ihm gesendeten Daten und die empfangene Antwort an.

Fehlerbehebungstipps

  • Überprüfen Sie die Verkabelung: Stellen Sie sicher, dass alle Verbindungen zwischen Arduino und Raspberry Pi sicher sind und korrekt zugeordnet sind.
  • Spannungsniveaus: Verwenden Sie einen Logic Level Converter, um den 3,3 V des Raspberry Pi mit dem 5 -V des Arduino zu entsprechen.
  • SPI aktivieren: Stellen Sie sicher, dass SPI auf dem Raspberry PI verwendet wird raspi-config.
  • Berechtigungen: Stellen Sie sicher, dass Ihr Benutzer über die erforderlichen Berechtigungen verfügt, um auf SPI -Geräte zuzugreifen. Möglicherweise müssen Sie Ihr Python -Skript mit ausführen sudo.
  • Baudrate: Stellen Sie sicher, dass der Serienmonitor und die Arduino -Skizze die gleiche Baudrate verwenden.
  • SPI -Einstellungen: Stellen Sie sicher, dass sowohl der Master als auch der Slave mit demselben SPI -Modus und derselben Geschwindigkeit konfiguriert sind.

Abschluss

Durch die Verwendung von SPI -Kommunikation zwischen einem Arduino und einem Himbeer -PI können Sie die Stärken beider Plattformen effektiv nutzen. Unabhängig davon, ob Sie ein komplexes Robotiksystem aufbauen, ein Sensornetzwerk entwickeln oder mit der Datenprotokollierung experimentieren, ist das Verständnis von SPI von unschätzbarem Wert. Wenn Sie die in diesem Leitfaden beschriebenen Schritte befolgen, können Sie eine zuverlässige SPI -Kommunikation einrichten und aufregende eingebettete Projekte begeben, die die Leistung von Arduino und Raspberry Pi nutzen.

Happy Basteln!

Hinterlasse einen Kommentar

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.