L'interface périphérique série (SPI) est un protocole de communication série synchrone largement utilisé pour la communication à courte distance, principalement dans les systèmes intégrés. La combinaison de la polyvalence de l'Arduino avec la puissance de calcul du Raspberry Pi via SPI peut ouvrir une pléthore de possibilités de projet. Dans cet article de blog, nous explorerons comment configurer et utiliser la communication SPI entre un Arduino et un Raspberry Pi.
Comprendre Spi
SPI est un protocole de communication complet du Duplex qui fonctionne en mode maître-esclave. Il utilise quatre lignes principales:
- Mosi (Master Out Slave in): Transfère les données du maître à l'esclave.
- Miso (maître à l'esclave): Transfère les données de l'esclave au maître.
- SCLK (horloge série): Synchronise la transmission de données générée par le maître.
- SS / CS (Sellave Select / Chip Select): Sélectionne l'appareil esclave.
SPI est favorisé pour sa simplicité et sa vitesse, ce qui le rend idéal pour les applications nécessitant un échange rapide de données entre les appareils.
Pourquoi utiliser SPI avec Arduino et Raspberry Pi?
La combinaison d'un Arduino avec un PI Raspberry exploite les forces des deux plates-formes. L'Arduino excelle à un contrôle matériel en temps réel et de bas niveau, tandis que le Raspberry Pi propose des capacités de traitement de haut niveau, une connectivité réseau et un environnement de système d'exploitation riche. L'utilisation de SPI permet à ces deux appareils de communiquer efficacement, permettant des projets complexes comme les systèmes de domotique, la robotique et les applications de journalisation des données.
Configuration du matériel
Pour établir une communication SPI entre un Arduino et un Raspberry Pi, vous aurez besoin des composants suivants:
- Arduino Uno (ou toute carte Arduino compatible)
- Raspberry Pi (n'importe quel modèle avec des broches GPIO)
- Fils de cavalier
- Planche à pain (en option)
Câblage de l'Arduino et du Raspberry Pi pour SPI
Un câblage minutieux est crucial pour assurer une bonne communication. Voici comment connecter l'Arduino et Raspberry Pi à l'aide de SPI:
Broche de framboise pi gpio | Épingle arduino | Description |
---|---|---|
GPIO10 (MOSI) | PIN 11 (MOSI) | Master Out Slave in |
GPIO9 (MISO) | PIN 12 (MISO) | Maître en esclave |
GPIO11 (SCLK) | PIN 13 (SCLK) | Horloge en série |
GPIO8 (CE0) | PIN 10 (SS) | Sélection d'esclaves |
GND | GND | Terrain d'entente |
3.3 V | 5V | Alimentation (utilisez un changement de niveau si nécessaire) |
Note: Le Raspberry Pi fonctionne à des niveaux logiques de 3,3 V, tandis qu'Arduino UNO utilise 5V. Il est recommandé d'utiliser un convertisseur de niveau logique pour éviter les dommages potentiels au Raspberry Pi.
Configuration de l'Arduino
L'Arduino agira comme le dispositif d'esclaves SPI. Vous trouverez ci-dessous un exemple de croquis Arduino pour le configurer:
// 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;
}
}
Explication:
- Spi.AttachInterrupt (); Permet l'interruption SPI, permettant à l'Arduino de gérer les données entrantes.
- Dans la routine de service d'interruption
ISR(SPI_STC_vect)
, les données reçues sont stockées pour le traitement. - Le
loop()
La fonction vérifie les données reçues et les imprime au moniteur série.
Configuration du Raspberry Pi
Le Raspberry Pi servira de dispositif maître SPI. Nous utiliserons Python avec le spidev
bibliothèque pour gérer la communication SPI. Tout d'abord, assurez-vous que SPI est activé:
- Ouvrez l'outil de configuration Raspberry Pi:
sudo raspi-config
- Se diriger vers Options d'interface > Spice > Activer
- Redémarrez le Raspberry Pi si invité.
Installer le spidev
bibliothèque si elle n'est pas déjà installée:
sudo apt-get install python3-spidev
Voici un exemple de script Python pour le 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()
Explication:
- spi.open (0, 0) Ouvre le bus SPI 0, appareil 0 (CE0).
- spi.xfer2 ([données]) Envoie l'octet de données et reçoit simultanément des données de l'esclave.
- Le script envoie un octet (par exemple, 42) chaque seconde et imprime la réponse de l'Arduino.
Tester la communication
Après avoir installé à la fois l'Arduino et le Raspberry Pi:
- Téléchargez le croquis Arduino sur la carte Arduino.
- Connectez l'Arduino au Raspberry Pi via le câblage SPI.
- Exécutez le script Python sur le Raspberry Pi:
python3 spi_master.py
- Ouvrez le moniteur série Arduino pour afficher les données reçues:
Tools > Serial Monitor
Vous devriez voir l'Arduino recevoir les données envoyées par le Raspberry Pi et les afficher dans le moniteur en série. De même, le Raspberry Pi affichera les données qu'il envoie et la réponse qu'elle reçoit.
Conseils de dépannage
- Vérifier le câblage: Assurez-vous que toutes les connexions entre Arduino et Raspberry Pi sont sécurisées et mappées correctement.
- Niveaux de tension: Utilisez un convertisseur de niveau logique pour correspondre au 3,3 V du Raspberry Pi avec le 5V de l'Arduino.
-
Activer SPI: Vérifiez que SPI est activé sur le framboise PI en utilisant
raspi-config
. -
Autorisations: Assurez-vous que votre utilisateur a les autorisations nécessaires pour accéder aux appareils SPI. Vous devrez peut-être exécuter votre script Python avec
sudo
. - Taux en bauds: Assurez-vous que le moniteur série et le croquis Arduino utilisent le même taux de bauds.
- Paramètres SPI: Assurez-vous que le maître et l'esclave sont configurés avec le même mode SPI et la même vitesse.
Conclusion
L'utilisation de la communication SPI entre un Arduino et un Raspberry Pi vous permet d'exploiter efficacement les forces des deux plates-formes. Que vous créiez un système de robotique complexe, que vous développiez un réseau de capteurs ou que vous expérimentez la journalisation des données, la compréhension de SPI est inestimable. En suivant les étapes décrites dans ce guide, vous pouvez mettre en place une communication SPI fiable et vous lancer dans des projets intégrés passionnants qui exploitent la puissance d'Arduino et de Raspberry Pi.Bonne bricolage!