Kuinka käyttää SPI -viestintää Arduinon ja Raspberry Pi: n kanssa

Sarjaperifeerinen rajapinta (SPI) on synkroninen sarjaviestintäprotokolla, jota käytetään laajasti lyhyen matkan viestinnässä, pääasiassa sulautetuissa järjestelmissä. Yhdistämällä Arduinon monipuolisuus Raspberry Pi: n laskennalliseen voimaan SPI: n kautta voi avata joukon projektimahdollisuuksia. Tässä blogiviestissä tutkimme, kuinka SPI -viestintä Arduinon ja Raspberry Pi: n välillä voidaan asentaa ja käyttää.

SPI: n ymmärtäminen

SPI on koko duplex-viestintäprotokolla, joka toimii master-orjatilassa. Se käyttää neljä päälinjaa:

  • Mosi (Master Out Slave in): Siirtää tietoja päälliköstä orjalle.
  • MISO (Mestari Slave Out): Siirtää tietoja orjasta mestariin.
  • SCLK (sarjakello): Synkronoi päällikön luoman tiedonsiirron.
  • SS/CS (Slave Select/Chip Select): Valitsee orjalaitteen.

SPI on suosittu sen yksinkertaisuudesta ja nopeudesta, joten se on ihanteellinen sovelluksille, jotka vaativat nopean tiedonvaihtoa laitteiden välillä.

Miksi käyttää SPI: tä Arduinon ja Raspberry Pi: n kanssa?

Arduinon yhdistäminen Raspberry PI: n kanssa hyödyntää molempien alustojen vahvuuksia. Arduino on erinomainen reaaliaikaisessa, matalan tason laitteistohallinnassa, kun taas Raspberry PI tarjoaa korkean tason käsittelyominaisuuksia, verkkoyhteyksiä ja rikkaan käyttöjärjestelmäympäristön. SPI: n käyttö antaa näiden kahden laitteen kommunikoida tehokkaasti, mahdollistaen monimutkaiset projektit, kuten kodin automaatiojärjestelmät, robotiikka ja tiedon kirjaussovellukset.

Laitteiden asettaminen

SPI -viestinnän luomiseksi Arduinon ja Raspberry PI: n välillä tarvitset seuraavat komponentit:

  • Arduino UNO (tai mikä tahansa yhteensopiva Arduino Board)
  • Raspberry Pi (mikä tahansa malli, jolla on GPIO -nastat)
  • Hyppyjohdot
  • Leipälevy (valinnainen)

Arduino ja Raspberry Pi SPI: lle

Huolellinen johdotus on ratkaisevan tärkeää asianmukaisen viestinnän varmistamiseksi. Näin yhdistää Arduino ja Raspberry Pi SPI: n avulla:

Raspberry Pi GPIO -tappi Arduino -nasta Kuvaus
GPIO10 (MOSI) Tappi 11 (mosi) Hallita orja
GPIO9 (MISO) Tappi 12 (MISO) Mestarina
GPIO11 (SCLK) Tappi 13 (SCLK) Sarjakello
GPIO8 (CE0) Tappi 10 (SS) Slave Select
Hölynpöly Hölynpöly Yhteinen kanta
3,3 V 5V Virtalähde (käytä tarvittaessa tasonsiirtoa)

Huomaa: Raspberry PI toimii 3,3 V: n logiikkatasoilla, kun taas Arduino UNO käyttää 5 V. On suositeltavaa käyttää logiikkatason muunninta, jotta vadelma PI: n mahdolliset vauriot estävät.

Arduinon määrittäminen

Arduino toimii SPI -orjana. Alla on näyte Arduino -luonnos sen asettamiseksi:


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

Selitys:

  • Spi.attachInterrupt (); Mahdollistaa SPI -keskeytyksen, jolloin Arduino pystyy käsittelemään saapuvia tietoja.
  • Keskeytyspalvelun rutiinissa ISR(SPI_STC_vect), Vastaanotetut tiedot tallennetaan käsittelyyn.
  • Se loop() Toiminto tarkistaa vastaanotetut tiedot ja tulostaa sen sarjamonitorille.

Raspberry Pi -sovelluksen määrittäminen

Raspberry Pi toimii SPI -päälaitteena. Käytämme pythonia spidev Kirjasto käsittelee SPI -viestintää. Varmista ensin, että SPI on käytössä:

  • Avaa Raspberry Pi -määritystyökalu:
    sudo raspi-config
  • Siirtyä jhk Käyttöliittymävaihtoehdot > SPI > Ottaa käyttöön
  • Käynnistä Raspberry Pi uudelleen, jos sitä pyydetään.

Asenna spidev Kirjasto, jos sitä ei ole vielä asennettu:

sudo apt-get install python3-spidev

Tässä on näyte Python -käsikirjoitus 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()

Selitys:

  • Spi.Open (0, 0) Avaa SPI -väylä 0, laite 0 (CE0).
  • Spi.xfer2 ([data]) lähettää datatavut ja vastaanottaa samanaikaisesti tietoja orjalta.
  • Käsikirjoitus lähettää tavun (esim. 42) joka sekunti ja tulostaa vastauksen Arduinosta.

Viestintä

Kun olet asettanut sekä Arduino että Raspberry Pi:

  1. Lataa Arduino -luonnos Arduino -levylle.
  2. Kytke Arduino Raspberry Pi: hen SPI -johdotuksen kautta.
  3. Suorita python -käsikirjoitus Raspberry Pi:
    python3 spi_master.py
  4. Avaa Arduino -sarjamonitori katsomaan vastaanotettuja tietoja:
    Tools > Serial Monitor

Sinun pitäisi nähdä Arduinon vastaanottava Raspberry PI: n lähettämät tiedot ja näyttää sen sarjamonitorissa. Samoin Raspberry Pi näyttää lähettämänsä tiedot ja sen vastaanottaman vastauksen.

Vianetsintävinkit

  • Tarkista johdotus: Varmista, että kaikki Arduinon ja Raspberry Pi: n väliset yhteydet ovat turvallisia ja kartoitettuja oikein.
  • Jännitetasot: Käytä logiikkatason muunninta vastaamaan Raspberry Pi: n 3,3 V: n Arduinon 5 V: n kanssa.
  • Ota SPI käyttöön: Varmista, että SPI on käytössä Raspberry Pi: ssä raspi-config.
  • Käyttöoikeudet: Varmista, että käyttäjälläsi on tarvittavat käyttöoikeudet käyttää SPI -laitteita. Saatat joutua suorittamaan python -komentosarjan kanssa sudo.
  • Baud -arvo: Varmista, että sarjamonitori ja Arduino -luonnos käyttävät samaa baudia.
  • SPI -asetukset: Varmista, että sekä isäntä että orja on määritetty samalla SPI -tilalla ja nopeudella.

Johtopäätös

SPI -viestintä Arduinon ja Raspberry PI: n välillä antaa sinun hyödyntää molempien alustojen voimakkuutta tehokkaasti. Rakennatko monimutkaista robottijärjestelmää, anturiverkon kehittäminen tai tiedon kirjaamisen kokeileminen, SPI: n ymmärtäminen on korvaamatonta. Seuraamalla tässä oppaassa hahmoteltuja vaiheita voit asettaa luotettavan SPI -viestinnän ja aloittaa jännittäviä sulautettuja projekteja, jotka hyödyntävät sekä Arduinon että Raspberry Pi: n voimaa.

Hyvää tinking!

Jätä kommentti

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.