Arduino SPI: Повний посібник з послідовної шини Serial Peripheral Interface
SPI (Serial Peripheral Interface) — це високошвидкісна послідовна шина, яка широко застосовується в електроніці для обміну даними між мікроконтролером і периферійними пристроями. В екосистемі Arduino інтерфейс SPI використовується для підключення SD-карт, RFID-зчитувачів, TFT- та OLED-дисплеїв, Ethernet-модулів та інших компонентів. Завдяки простоті та швидкодії SPI став стандартом де-факто для швидкої передачі даних на невеликі відстані.
Що таке SPI?
Інтерфейс SPI був розроблений компанією Motorola і є синхронним протоколом передачі даних «ведучий-ведений». У ролі ведучого (master) найчастіше виступає мікроконтролер (наприклад, Arduino), а веденими (slave) є периферійні пристрої.
Передача даних здійснюється по чотирьох основних лініях:
- MOSI (Master Out Slave In) — дані від ведучого до веденого.
- MISO (Master In Slave Out) — дані від веденого до ведучого.
- SCK (Serial Clock) — тактовий сигнал.
- SS (Slave Select) — вибір конкретного пристрою-веденого.
Особливість SPI полягає в тому, що кожен slave активується окремою лінією SS. Це дозволяє підключати одразу кілька модулів до однієї шини, використовуючи різні піни вибору.
Переваги SPI
- Висока швидкість обміну даними (до кількох МГц і вище).
- Проста схема підключення.
- Можливість роботи з кількома пристроями на одній шині.
- Синхронна передача, що підвищує надійність.
Недоліки SPI
- Потрібно більше проводів у порівнянні з I2C.
- Немає стандартного механізму адресації — кожен slave вибирається окремим піном.
- Кабелі обмеженої довжини, придатні лише для коротких з’єднань.
Апаратна підтримка SPI в Arduino
Більшість плат Arduino (Uno, Mega, Nano) мають вбудований апаратний SPI-контролер. Виводи залежать від моделі:
| Модель Arduino | MOSI | MISO | SCK | SS (за замовчуванням) |
|---|---|---|---|---|
| Arduino Uno / Nano | 11 | 12 | 13 | 10 |
| Arduino Mega | 51 | 50 | 52 | 53 |
| Arduino Leonardo | ICSP-4 | ICSP-1 | ICSP-3 | 10 |
Для підключення рекомендується використовувати виводи роз’єму ICSP, адже саме до них підключено апаратний SPI.
Приклад використання SPI: робота з SD-картою
Розглянемо приклад підключення та роботи з SD-картою через SPI:
#include <SPI.h>
#include <SD.h>
const int chipSelect = 10;
void setup() {
Serial.begin(9600);
if (!SD.begin(chipSelect)) {
Serial.println("Помилка ініціалізації SD-карти!");
return;
}
Serial.println("SD-карта готова до роботи.");
File dataFile = SD.open("test.txt", FILE_WRITE);
if (dataFile) {
dataFile.println("Привіт, SPI!");
dataFile.close();
Serial.println("Запис виконано успішно.");
} else {
Serial.println("Не вдалося відкрити файл.");
}
}
void loop() {}
SPI та дисплеї
Багато графічних TFT та OLED-дисплеїв використовують інтерфейс SPI. Це забезпечує високу швидкість оновлення екрана, на відміну від I2C, де швидкість обмежена.
Приклад підключення OLED-дисплея з бібліотекою Adafruit SSD1306:
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include <SPI.h>
#define OLED_DC 9
#define OLED_CS 10
#define OLED_RESET 8
Adafruit_SSD1306 display(128, 64, &SPI, OLED_DC, OLED_RESET, OLED_CS);
void setup() {
display.begin(SSD1306_SWITCHCAPVCC);
display.clearDisplay();
display.setTextSize(2);
display.setTextColor(WHITE);
display.setCursor(0,0);
display.println("Hello SPI");
display.display();
}
void loop() {}
SPI та RFID-зчитувачі
Один з найпопулярніших RFID-модулів для Arduino — RC522. Він також працює через SPI та дозволяє зчитувати карти і мітки стандарту MIFARE.
#include <SPI.h>
#include <MFRC522.h>
#define SS_PIN 10
#define RST_PIN 9
MFRC522 rfid(SS_PIN, RST_PIN);
void setup() {
Serial.begin(9600);
SPI.begin();
rfid.PCD_Init();
Serial.println("Піднесіть карту...");
}
void loop() {
if (!rfid.PICC_IsNewCardPresent() || !rfid.PICC_ReadCardSerial()) return;
Serial.print("UID карти: ");
for (byte i = 0; i < rfid.uid.size; i++) {
Serial.print(rfid.uid.uidByte[i], HEX);
Serial.print(" ");
}
Serial.println();
rfid.PICC_HaltA();
}
Налаштування SPI вручну
Бібліотека SPI.h дозволяє налаштовувати швидкість передачі, порядок бітів та режим роботи (MODE0–MODE3). Наприклад:
SPI.beginTransaction(SPISettings(4000000, MSBFIRST, SPI_MODE0));
digitalWrite(SS, LOW);
SPI.transfer(0x55);
digitalWrite(SS, HIGH);
SPI.endTransaction();
Висновок
Інтерфейс SPI — це потужний інструмент для проєктів на Arduino. Він дозволяє підключати швидкі периферійні пристрої, такі як SD-карти, дисплеї, RFID-зчитувачі та Ethernet-модулі. Попри більшу кількість проводів у порівнянні з I2C, SPI забезпечує високу швидкість та надійність обміну.
Комерційна пропозиція
Якщо ви плануєте власний проєкт із використанням SPI чи інших технологій Arduino та ESP32, ми можемо допомогти у його реалізації. Ми займаємося розробкою схем, програмуванням та виготовленням друкованих плат під конкретні задачі. Ознайомтеся з прикладами виконаних робіт у портфоліо та замовте розробку під ключ для вашого бізнесу чи хобі.
Модуль живлення збільшуючий 2...24В/5...28В 2А
Модуль збільшуючий напругу постійного струму з 2 ... 24 В до 5 ... 28 ВНапруга на виході регулю..
36.78грн.
Преобразование Char в Integer и обратно
Преобразование целочисленных переменных int в символьные переменные char в Arduino IDE - довольно пр..
Силовий MOSFET транзистор IRF520 N-канальний
MOSFET транзистор 3-го поколінняВикористовується для швидкісної комутації потужних виконавчих механі..
28.43грн.
Подвійна шестерня для зубчатого ременю на 20 зубів під вісь 8 мм
Подвійна шестерня для передачі обертального моменту з одного валу на інший.Застосовується для розділ..
78.53грн.
Ніодімовий магніт 12mm x 3mm N35
Циліндричний ніодімовий магніт N35Розміри 12мм x 3ммІдеально підходить для роботи в зв'язці з м..
14.00грн.





