Cara menggunakan komunikasi SPI dengan Arduino dan Raspberry Pi

Antarmuka perifer serial (SPI) adalah protokol komunikasi serial sinkron yang banyak digunakan untuk komunikasi jarak pendek, terutama dalam sistem tertanam. Menggabungkan keserbagunaan Arduino dengan kekuatan komputasi Raspberry Pi melalui SPI dapat membuka sejumlah besar kemungkinan proyek. Dalam posting blog ini, kami akan mengeksplorasi cara mengatur dan menggunakan komunikasi SPI antara Arduino dan Raspberry Pi.

Memahami SPI

SPI adalah protokol komunikasi dupleks penuh yang beroperasi dalam mode master-slave. Menggunakan empat baris utama:

  • Mosi (master out slave in): Mentransfer data dari master ke budak.
  • Miso (master in slave out): Mentransfer data dari budak ke master.
  • SCLK (jam seri): Menyinkronkan transmisi data yang dihasilkan oleh master.
  • SS/CS (Slave Select/Chip Select): Memilih perangkat budak.

SPI disukai karena kesederhanaan dan kecepatannya, membuatnya ideal untuk aplikasi yang membutuhkan pertukaran data cepat antar perangkat.

Mengapa menggunakan SPI dengan Arduino dan Raspberry Pi?

Menggabungkan Arduino dengan Raspberry Pi memanfaatkan kekuatan kedua platform. Arduino unggul pada kontrol perangkat keras tingkat rendah, sementara Raspberry Pi menawarkan kemampuan pemrosesan tingkat tinggi, konektivitas jaringan, dan lingkungan sistem operasi yang kaya. Menggunakan SPI memungkinkan kedua perangkat ini berkomunikasi secara efisien, memungkinkan proyek -proyek kompleks seperti sistem otomasi rumah, robotika, dan aplikasi penebangan data.

Menyiapkan perangkat keras

Untuk membangun komunikasi SPI antara Arduino dan Raspberry Pi, Anda akan memerlukan komponen berikut:

  • Arduino Uno (atau papan Arduino yang kompatibel)
  • Raspberry Pi (model apa pun dengan pin GPIO)
  • Kabel jumper
  • Papan tempat memotong roti (opsional)

Pengkabelan Arduino dan Raspberry Pi untuk SPI

Pengkabelan yang cermat sangat penting untuk memastikan komunikasi yang tepat. Inilah cara menghubungkan Arduino dan Raspberry Pi menggunakan SPI:

Raspberry pi gpio pin Pin Arduino Keterangan
GPIO10 (MOSI) Pin 11 (mosi) Kuasai budak di
Gpio9 (miso) Pin 12 (miso) Master di Slave Out
GPIO11 (SCLK) Pin 13 (SCLK) Jam serial
GPIO8 (CE0) Pin 10 (SS) Slave Select
Gnd Gnd Tanah bersama
3.3v 5v Catu daya (gunakan pergeseran level jika perlu)

Catatan: Raspberry Pi beroperasi pada level logika 3.3V, sedangkan Arduino Uno menggunakan 5V. Disarankan untuk menggunakan konverter level logika untuk mencegah potensi kerusakan pada raspberry pi.

Mengkonfigurasi Arduino

Arduino akan bertindak sebagai perangkat budak SPI. Di bawah ini adalah sampel sketsa Arduino untuk mengaturnya:


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

Penjelasan:

  • Spi.attachinterrupt (); Mengaktifkan interupsi SPI, memungkinkan Arduino untuk menangani data yang masuk.
  • Dalam rutinitas layanan interupsi ISR(SPI_STC_vect), data yang diterima disimpan untuk diproses.
  • Itu loop() Pemeriksaan fungsi untuk data yang diterima dan mencetaknya ke monitor serial.

Mengkonfigurasi Raspberry Pi

Raspberry Pi akan bertindak sebagai perangkat master SPI. Kami akan menggunakan Python dengan spidev Perpustakaan untuk menangani komunikasi SPI. Pertama, pastikan SPI diaktifkan:

  • Buka alat konfigurasi Raspberry Pi:
    sudo raspi-config
  • Navigasikan ke Opsi antarmuka > SPI > Memungkinkan
  • Reboot raspberry pi jika diminta.

Instal spidev perpustakaan jika belum diinstal:

sudo apt-get install python3-spidev

Berikut contoh skrip Python untuk 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()

Penjelasan:

  • spi.open (0, 0) Membuka Bus SPI 0, Perangkat 0 (CE0).
  • spi.xfer2 ([data]) mengirimkan byte data dan secara bersamaan menerima data dari budak.
  • Script mengirimkan byte (mis., 42) setiap detik dan mencetak respons dari Arduino.

Menguji komunikasi

Setelah menyiapkan Arduino dan Raspberry Pi:

  1. Unggah sketsa Arduino ke papan Arduino.
  2. Hubungkan Arduino ke Raspberry Pi melalui kabel SPI.
  3. Jalankan skrip Python di Raspberry Pi:
    python3 spi_master.py
  4. Buka Monitor Serial Arduino untuk melihat data yang diterima:
    Tools > Serial Monitor

Anda harus melihat Arduino menerima data yang dikirim oleh Raspberry Pi dan menampilkannya di monitor serial. Demikian pula, Raspberry Pi akan menampilkan data yang dikirimnya dan respons yang diterimanya.

Tips Mengatasi Masalah

  • Periksa Kabel: Pastikan semua koneksi antara Arduino dan Raspberry Pi aman dan dipetakan dengan benar.
  • Level Tegangan: Gunakan konverter level logika untuk mencocokkan 3.3V Raspberry Pi dengan 5V Arduino.
  • Aktifkan SPI: Verifikasi bahwa SPI diaktifkan pada Raspberry Pi menggunakan raspi-config.
  • Izin: Pastikan pengguna Anda memiliki izin yang diperlukan untuk mengakses perangkat SPI. Anda mungkin perlu menjalankan skrip Python Anda sudo.
  • Baud Rate: Pastikan monitor serial dan sketsa Arduino menggunakan laju baud yang sama.
  • Pengaturan SPI: Pastikan master dan slave dikonfigurasi dengan mode dan kecepatan SPI yang sama.

Kesimpulan

Menggunakan komunikasi SPI antara Arduino dan Raspberry Pi memungkinkan Anda untuk memanfaatkan kekuatan kedua platform secara efektif. Apakah Anda sedang membangun sistem robotika yang kompleks, mengembangkan jaringan sensor, atau bereksperimen dengan penebangan data, memahami SPI sangat berharga. Dengan mengikuti langkah -langkah yang diuraikan dalam panduan ini, Anda dapat mengatur komunikasi SPI yang andal dan memulai proyek -proyek tertanam yang menarik yang memanfaatkan kekuatan Arduino dan Raspberry Pi.

Selamat bermain -main!

Tinggalkan komentar

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.