Sadržaj
Sadržaj
I2C, SPI i UART su tri načina na koja gotovo svaki senzor, zaslon i modul komunicira s mikrokontrolerom. Nijedan od njih nije najbolji. Svaki rješava drugačiji problem, a odabir pravoga svodi se na to koliko uređaja imate, kojom brzinom se podaci kreću i koliku udaljenost moraju prijeći.
Ukratko: koristite I2C za povezivanje nekoliko senzora pomoću dvije žice, SPI kada zaslon ili memorijska kartica trebaju brzinu, a UART za jednostavnu serijsku komunikaciju između dva uređaja.
Što su komunikacijski protokoli u elektronici?
Mikrokontroler treba način za razmjenu podataka s dijelovima oko sebe: očitavanje senzora, ispis na zaslon, spremanje na memorijsku karticu. Protokol je skup pravila za tu razmjenu. On određuje koja žica nosi što, tko govori kada i kako se bajt šalje bit po bit.
I2C, SPI i UART su tri s kojima ćete se prvo susresti. Svaka pločica kompatibilna s Arduinom, ESP32 i Raspberry Pi podržava sva tri, a gotovo svaka breakout pločica koristi jedan od njih. NULA Mini ESP32-C6 dobra je pločica za učenje: ima Qwiic konektor za I2C i slobodne pinove za SPI i UART. Zero to Hero komplet korak po korak vodi kroz I2C senzore i zaslone.
I2C vs SPI vs UART na prvi pogled
| Protokol | Glavne žice | Najbolje za | Prednost | Ograničenje |
|---|---|---|---|---|
| I2C | 2 signalne žice: SDA, SCL | Senzore, RTC module, male zaslone, IO expandere | Više uređaja na jednoj sabirnici | Sporiji od SPI-a, kratke udaljenosti |
| SPI | 4 ili više: MOSI, MISO, SCLK, CS | Brze zaslone, SD kartice, memoriju, brze senzore | Brzina | Koristi više pinova |
| UART | 2 signalne žice: TX, RX | Debugiranje, GPS, komunikaciju dviju pločica | Jednostavnost, svugdje podržan | Obično samo dva uređaja |
Sva tri trebaju i zajedničku masu (ground) između uređaja.
Što je I2C?
I2C (Inter-Integrated Circuit) koristi dvije signalne linije. SDA nosi podatke, a SCL nosi takt (clock). Svaki uređaj na sabirnici spojen je na iste dvije linije i svaki ima vlastitu adresu, tako da kontroler može komunicirati sa svakim pojedinačno.
- Malo žica. Deset senzora i dalje treba samo SDA, SCL, napajanje i masu.
-
Adrese. Svaki uređaj ima 7-bitnu adresu, poput
0x3Cza mali OLED. Dva uređaja s istom adresom ne mogu dijeliti sabirnicu bez promjene jedne od njih. - Brzina. Obično 100 kHz ili 400 kHz. Dovoljno za senzore, presporo za veliku grafiku.
- Udaljenost. Namijenjeno vezama unutar jednog uređaja, ne dugim kabelima.
I2C je uobičajeni protokol za senzore, satove realnog vremena (RTC), znakovne LCD zaslone, IO expandere i male zaslone. Qwiic konektori nose I2C putem jednog kabela, tako da nema potrebe za lemljenjem. PCF85063A sat realnog vremena i 16x2 I2C LCD spajaju se na taj način.

Naš vodič za I2C protokol detaljno opisuje adresiranje i pull-up otpornike.
Što je SPI?
SPI (Serial Peripheral Interface) je brzi protokol. Koristi zasebne linije za svaki smjer plus takt, tako da podaci teku u oba smjera istovremeno:
- MOSI prenosi podatke od kontrolera do uređaja.
- MISO prenosi podatke s uređaja natrag do kontrolera.
- SCLK je takt kojim upravlja kontroler.
- CS (chip select) odabire koji uređaj sluša.
SPI često radi na desetke MHz, mnogo puta brže od I2C-a. Zato pokreće grafičke zaslone, SD kartice, flash memoriju i brze senzore. Cijena su pinovi: uređaji dijele MOSI, MISO i SCLK, ali svaki treba vlastitu CS liniju.

Solderedov microSD breakout je odličan prvi SPI uređaj: Arduino SD biblioteka upravlja protokolom, a vi dobivate pohranu datoteka za zapisivanje podataka.
Što je UART?
UART (Universal Asynchronous Receiver-Transmitter) je najjednostavniji od trojice. Jedna žica šalje (TX), jedna prima (RX) i nema linije takta. Umjesto toga, oba uređaja unaprijed dogovaraju brzinu, koja se naziva baud rate, poput 9600 ili 115200.
- Od točke do točke. UART obično povezuje točno dva uređaja.
- Križanje žica. TX jednog uređaja ide na RX drugog, i obrnuto.
- Svugdje. Serijski monitor, GPS moduli, Bluetooth moduli, USB-to-serial adapteri i veze između pločica koriste ga.
Arduino serijski monitor je UART: vaša pločica komunicira s računalom putem USB-to-serial čipa. Za pločicu bez njega, USB-UART CH340 pretvarač obavlja isti posao. Za uređaje čiji je UART skriven unutar USB-C priključka, USB-Cereal čita serijski izlaz bez otvaranja kućišta.

GPS moduli su klasičan UART uređaj. L86-M33 GNSS breakout šalje svoju poziciju kao retke teksta pod nazivom NMEA rečenice, a vaš ih kod čita kao i svaki drugi serijski unos. Za duže kabele, RS485 prenosi iste UART podatke stotinama metara kroz primopredajnik. Naš RS485 vodič objašnjava kako.
I2C vs SPI: Koja je razlika?
| Značajka | I2C | SPI |
|---|---|---|
| Žice | 2 signalne žice | 4 ili više signalnih žica |
| Brzina | Obično 100 do 400 kHz | Često desetke MHz |
| Više uređaja | Po adresi, na iste dvije žice | Po chip selectu, svaka linija CS |
| Smjer podataka | Jedan smjer odjednom | Oba smjera istovremeno |
| Najbolje za | Senzore, RTC, IO expandere, male zaslone | Zaslone, SD kartice, memoriju |
| Jednostavnost za početnike | Lakše ožičenje | Više žica, ali brži |
Ako spajate senzore, počnite s I2C-om. Ako uređaj prenosi puno podataka, poput zaslona u boji ili SD kartice, to će obično biti SPI.
UART vs I2C i SPI
UART radi drugačije od ostala dva. I2C i SPI imaju liniju takta i jedan kontroler koji je glavni, a obično povezuju dijelove unutar jednog uređaja. UART nema takt: obje strane šalju kad god žele, uz dogovorenu baud brzinu. Obično povezuje jedan uređaj s drugim.
- GPS modul koji šalje svoju lokaciju
- pločica koja ispisuje poruke za debugiranje na serijski monitor
- dvije pločice koje razmjenjuju poruke
- RS485 primopredajnik koji prenosi serijske podatke preko dugog kabela
Koji protokol koristiti za senzore?
- I2C za većinu početničkih projekata sa senzorima. Senzori temperature, vlage, svjetlosti, udaljenosti i tlaka gotovo svi govore ovaj jezik.
- SPI kada senzor brzo generira podatke, poput nekih IMU-a i brzih ADC-a.
- UART kada senzor šalje serijske podatke, poput GPS modula.
- RS485 kada je senzor udaljen desetke ili stotine metara.
Neki senzori ne koriste ništa od ovoga. Vodootporni DS18B20 koristi 1-Wire, koji treba samo jednu podatkovnu liniju i omogućuje dijeljenje između više senzora.
Koji protokol koristiti za zaslone?
- I2C za jednostavan tekst: 16x2 znakovni LCD ili mali monokromatski OLED.
- SPI za brže grafičke zaslone i zaslone u boji, gdje se pun zaslon piksela mora brzo osvježiti.
- Inkplate kada projekt treba uvijek vidljiv, energetski učinkovit dashboard. ESP32 unutar njega upravlja e-papir zaslonom umjesto vas, a njegov Qwiic priključak prima I2C senzore.
Prvo odaberite zaslon za posao, a onda protokol slijedi. 16x2 LCD prikazuje vrijednosti uživo. Inkplate 10 ili Inkplate 6FLICK cijeli dan prikazuju vremensku prognozu, kalendar ili natpis za prostoriju. Naš vodič za LCD zaslone uspoređuje opcije.
I2C, SPI i UART s Arduinom
Pločice kompatibilne s Arduinom podržavaju sva tri, svaki s ugrađenom bibliotekom:
| Protokol | Arduino biblioteka | Tipična upotreba |
|---|---|---|
| I2C | Wire |
Senzori, LCD-i, RTC moduli |
| SPI | SPI |
SD kartice, zasloni |
| UART | Serial |
Serijski monitor, GPS, druge pločice |
Većina biblioteka za senzore i zaslone poziva ih umjesto vas, pa rijetko izravno radite s protokolom. Make your own NULA komplet omogućuje vam lemljenje Arduino-kompatibilne pločice, a zatim upotrebu sva tri.
I2C, SPI i UART s ESP32
ESP32 pločice podržavaju sva tri, a većina pinova može se dodijeliti u kodu, pa je ožičenje fleksibilno. Razlika od Arduina je Wi-Fi: ESP32 očita I2C senzor, spremi podatke na SPI karticu i pošalje ih na MQTT ili Home Assistant u istom kodu.
NULA Mini ESP32-C6 dobro funkcionira kao kontroler za projekte sa senzorima i zaslonima. Za projekte na baterije, NULA DeepSleep ESP32-S3 troši samo oko 16 µA u stanju mirovanja između očitanja. Naši ESP32 projekti za početnike koriste sva tri protokola.
I2C, SPI i UART s Raspberry Pi
Raspberry Pi ima sva tri na svom GPIO zaglavlju. Uključite svaki u raspi-config pod Interface Options, a zatim ih koristite iz Pythona ili bilo kojeg drugog jezika.
Pi je bolji izbor kada projekt treba Linux, bazu podataka, dashboard ili veću procesorsku snagu: zapisivač podataka koji čita I2C senzore, GPS tracker na UART-u ili zaslon na SPI-u. Model od 8 GB ostavlja prostora za zahtjevnije servise. Naše Raspberry Pi ideje za projekte sadrže više primjera.
Česte pogreške pri odabiru I2C, SPI ili UART-a
- SPI tamo gdje je dovoljan I2C. Četiri nepotrebne žice za senzor temperature koji se osvježava jednom u sekundi.
- I2C na dugim kabelima. Namijenjen je za kratke udaljenosti; za duge dionice koristite RS485.
- Nepoznavanje I2C adrese. Pokrenite I2C skener kod da vidite što je na sabirnici.
- Zamijenjeni SDA i SCL. Ništa ne odgovara, i nema poruke o pogrešci.
- TX na TX. UART linije se križaju: TX na RX, RX na TX.
- Neusklađene brzine prijenosa (baud rates). Serijski monitor prikazuje znakove koje nije moguće pročitati.
- Nedostaje SPI chip select. Svaki SPI uređaj treba svoju CS liniju.
- Dva I2C uređaja s istom adresom. Promijenite adresu jednog pomoću premosnika ili koristite drugu sabirnicu.
- Odabir zaslona prema protokolu. Odaberite ga prema tome što treba prikazati.
- UART preko zgrade. Za udaljenost koristite RS485.
Naš vodič za pull-up otpornike objašnjava još jedan čest uzrok tihe I2C sabirnice.
Kratki vodič za odluke
| Potreba projekta | Najbolji izbor |
|---|---|
| Nekoliko senzora s malo žica | I2C |
| Jednostavan tekstualni LCD | I2C |
| Brzi zaslon ili SD kartica | SPI |
| GPS modul | UART |
| Debugiranje kroz serijski monitor | UART |
| Izravna komunikacija dviju pločica | UART |
| Duga žičana mreža senzora | RS485 |
| Senzor za pametnu kuću s Wi-Fi vezom | ESP32 s I2C senzorom |
| Dashboard s malom potrošnjom | Inkplate |
| Raspberry Pi zapisivač podataka | I2C, SPI ili UART, ovisno o modulu |
Zašto je Soldered sjajno mjesto za učenje komunikacijskih protokola
Protokole ćete najbrže naučiti koristeći ih. Počnite s I2C LCD-om ili RTC-om na Qwiic kabelu, dodajte microSD karticu preko SPI-a, očitajte GPS modul preko UART-a i pošaljite sve na Wi-Fi s ESP32 pločice. Soldered proizvodi pločice, breakout module i zaslone za svaki korak, a svaki ima dokumentaciju s uputama za spajanje i primjerom koda.Često postavljana pitanja
Koja je razlika između I2C, SPI i UART-a?
I2C povezuje mnogo senzora ili modula pomoću dvije signalne žice. SPI je brži i odgovara zaslonima, SD karticama i memoriji. UART je jednostavna serijska komunikacija između dva uređaja, često korištena za debugiranje.
Je li I2C bolji od SPI-a?
Za jednostavno ožičenje i puno uređaja na jednoj sabirnici, da. Za brzinu, poput brzih zaslona, SD kartica ili memorije, SPI je bolji.
Je li SPI brži od I2C-a?
Da, obično mnogo puta brži. Zato ga koriste uređaji koji zahtijevaju puno podataka.
Za što se koristi UART?
Jednostavna serijska komunikacija između dva uređaja: debugiranje, GPS moduli, serijski adapteri, Bluetooth moduli i veze između pločica.
Koji je protokol najbolji za Arduino senzore?
I2C. Treba samo dvije signalne žice i mnogi senzori ih mogu dijeliti.
Koji je protokol najbolji za zaslone?
Ovisi o zaslonu. Znakovni LCD-i i mali OLED-i koriste I2C, brži grafički zasloni koriste SPI, a Inkplate sam upravlja svojim e-papir panelom.
Može li ESP32 koristiti I2C, SPI i UART?
Da, sva tri, što ga čini dobrim kontrolerom za povezane senzore, zaslone, MQTT i Home Assistant projekte.
Može li Raspberry Pi koristiti I2C, SPI i UART?
Da, putem svojih GPIO pinova nakon što se svaki interfejs uključi u raspi-config.
Što znače SDA i SCL?
SDA je I2C podatkovna linija, a SCL je I2C linija takta.
Što znače MOSI, MISO i SCLK?
To su SPI linije. MOSI nosi podatke od kontrolera do uređaja, MISO nosi podatke natrag, a SCLK je takt.
Što znače TX i RX?
Transmit (odašiljanje) i Receive (primanje), dvije UART linije. TX jednog uređaja spaja se na RX drugog.
Kada koristiti RS485 umjesto njih?
Kada su uređaji udaljeni, u bučnom okruženju ili trebaju dijeliti jednu dugu žičanu mrežu. I2C, SPI i UART su za kratke veze.