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:
- Laden Sie die Arduino -Skizze in das Arduino Board hoch.
- Schließen Sie den Arduino über die SPI -Verkabelung mit dem Himbeer -Pi an.
- Führen Sie das Python -Skript auf dem Raspberry Pi aus:
python3 spi_master.py
- Ö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!