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, ми можемо допомогти у його реалізації. Ми займаємося розробкою схем, програмуванням та виготовленням друкованих плат під конкретні задачі. Ознайомтеся з прикладами виконаних робіт у портфоліо та замовте розробку під ключ для вашого бізнесу чи хобі.
Arduino закачивание детской кроватки по крику
Привет друзья! Это канал geekmatic! Представляю интересный проект для новоиспеченных папочек. Это..
Виготовлення друкованих плат за допомогою лазерного принтера
Ви можете суттєво полегшити собі процес виготовлення друкованих плат, малюючи доріжки за допомогою..
Стійка нейлонова М3 12мм + 6мм
Стійка для кріплення усіляких електронних модулів до корпусу пристроюВисота стійки 12 ммДовжина зовн..
3.67грн.
Ковпачок на змінний резистор 6мм
Чорно-білий декоративний ковпачок для змінних резисторів та енкодерів з отвором у вигляді зіркиВнутр..
5.63грн.
Розумний дім #8: Керування розумним домом через мобільний додаток
Розумний дім #8: Керування розумним домом через мобільний додаток У цій статті ми розгл..





