Ako ste ikada povezali senzor, zaslon ili breakout pločicu na Arduino, ESP32 ili Raspberry Pi, vidjeli ste slova I2C.
U početku se čini da je puno za shvatiti. Postoje pinovi koji se zovu SDA i SCL, svaki uređaj ima adresu, a nekoliko modula dijeli iste dvije žice. Međutim, temeljna ideja je mala, a jednom kada se shvati, ostatak protokola proizlazi iz nje.
I2C omogućuje jednoj ploči komunikaciju sa senzorima, zaslonima, satovima, memorijskim čipovima i IO ekspanderima preko dvije signalne žice. Ne dodjeljujete svakom modulu vlastiti skup pinova. Svi se nalaze na istom paru, a ploča bira s kojim razgovara po imenu.
Što je I2C?
I2C je skraćenica za Inter-Integrated Circuit, ponekad se piše I²C. To je komunikacijski protokol koji omogućuje čipovima na istoj ploči ili modulima na kraju kabela razmjenu podataka preko dvije zajedničke žice.
U hobi projektu, kontroler je Arduino, ESP32, Raspberry Pi ili druga razvojna ploča. Uređaji na drugom kraju su senzori, zasloni, satovi u stvarnom vremenu, EEPROMs, ADCs i IO ekspanderi.
Razlog zašto je svugdje je ožičenje. Četverolinijski SPI zaslon plus četverolinijski SPI senzor koštaju vas osam pinova. Oba ta dijela na I2C-u koštaju vas dva, a treći i četvrti uređaj ne koštaju vas ništa dodatno. Na ploči s petnaest upotrebljivih pinova, ta razlika odlučuje što možete izgraditi.
Što znače SDA i SCL?
I2C koristi dvije signalne linije, a svaki uređaj na sabirnici povezuje se s obje.
SDA je serijski podatak (Serial Data). Prenosi stvarne informacije, jedan bit odjednom, u oba smjera.
SCL je serijski sat (Serial Clock). Prenosi takt. Kontroler ga pogoni, a svaki bit na SDA se čita na rubu takta, tako da svi uređaji ostaju sinkronizirani.
SDA prenosi poruku, a SCL postavlja ritam. Obje linije također trebaju napajanje i uzemljenje pored sebe, zbog čega je I2C veza u praksi četverostruka žica, iako samo dvije od njih nose signal.
Kako funkcionira I2C komunikacija?
Jedna razmjena uvijek slijedi istih pet koraka:
- Kontroler povlači SDA nisko dok je SCL još uvijek visoko. To je početni uvjet i govori svakom uređaju na sabirnici da obrati pozornost.
- Kontroler šalje adresu uređaja koji želi, plus jedan bit koji govori namjerava li čitati ili pisati.
- Uređaj s tom adresom odgovara potvrdnim bitom. Ostali se vraćaju ignoriranju sabirnice.
- Podatkovni bajtovi kreću se u smjeru koji je kontroler zatražio, svaki potvrđen.
- Kontroler oslobađa SDA dok je SCL visoko. To je zaustavni uvjet, a sabirnica je ponovno slobodna.
Ništa na sabirnici ne govori osim ako mu se ne obrati. To je cijeli trik dijeljenja dvije žice između desetak dijelova.
Što je I2C adresa?
I2C adresa je ime uređaja na sabirnici. Standardni I2C koristi 7 bitova, tako da postoji 128 mogućih adresa, a nekoliko ih je rezervirano. Adresu postavlja proizvođač čipa, a ispisana je u podatkovnoj tablici kao heksadecimalni broj, npr. 0x27 ili 0x51.
Većina čipova omogućuje vam promjenu dijela adrese, obično donja dva ili tri bita, pomoću kratkospojnika za lemljenje ili pina za adresu. 16x2 I2C LCD je jasan primjer: gornja četiri bita su fiksirana na 0100, a kratkospojnici A2, A1 i A0 odabiru ostatak.
Dva uređaja s istom adresom na istoj sabirnici je greška na koju ćete prije ili kasnije naići. Oba odgovaraju odjednom, podaci se vraćaju kao smeće, a ništa u vezi ožičenja ne izgleda pogrešno. Rješenje je promijeniti jednu adresu pomoću kratkospojnika ili podijeliti dijelove na dvije sabirnice.
Kada projekt prestane reagirati, prvo pokrenite I2C skener. On prolazi kroz svih 128 adresa i ispisuje što odgovara. Ako vaš senzor nije na popisu, problem je napajanje ili ožičenje, a ne vaš kod.
Zašto je I2C koristan za Arduino i ESP32 projekte
Praktične prednosti brzo se gomilaju:
- Dva pina za cijelu sabirnicu, bez obzira na to koliko uređaja je spojeno.
- Dodavanje modula je promjena ožičenja od nula pinova i nekoliko linija koda.
- Gotovo svaki senzor i zaslon vrijedan korištenja ima održavanu Arduino biblioteku.
- Radi preko kabela, tako da senzor može biti udaljen od ploče.
- Prikladan je za male konstrukcije, gdje vam ponestane pinova puno prije nego što vam ponestane prostora.
IO ekspander je najjasnija ilustracija. To je I2C čip čiji je jedini zadatak dati vam više pinova, tako da se dva pina na vašoj ploči pretvaraju u šesnaest na ekspanderu. Tipke, LED diode i releji koji bi vam pojeli GPIO, svi se prebacuju na sabirnicu.
Zašto Qwiic konektori olakšavaju I2C
Obično I2C ožičenje znači četiri kratkospojnika po modulu: SDA, SCL, napajanje i uzemljenje. Ako se jedan od njih pogrešno spoji, modul je tih, ili još gore, vruć. Pomnožite to s četiri senzora na eksperimentalnoj pločici i većina vašeg otklanjanja pogrešaka je ožičenje, a ne kod.
Qwiic zamjenjuje te četiri žice jednim kablom s četiri pina. On se uklapa samo na jedan način, redoslijed pinova je fiksiran na svakoj ploči koja ga koristi, a konektori se mogu spajati u seriju, tako da se drugi senzor uključuje u prvi, a ne natrag u ploču.
Ništa od ovoga ne mijenja protokol. Ista dva signala prolaze kroz ista dva vodiča, a Qwiic senzor i senzor spojen žicama izgledaju identično vašem kodu. Ono što se mijenja je koliko načina postoji da se nešto pogrešno spoji. Svaki Soldered breakout ima konektor, a vodič za Qwiic ekosustav pokriva što se još nalazi u njemu.
I2C s Arduinom, ESP32 i Raspberry Pi
Sva tri čitaju iste I2C dijelove. Ono što se mijenja su pinovi, napon i softver oko njih. Ako još uvijek birate između njih, Arduino vs Raspberry Pi vs ESP32 prolazi kroz kompromise.
I2C s Arduinom
Arduino ploče obrađuju I2C putem ugrađene biblioteke Wire. Na Uno ili bilo kojoj drugoj ATmega328 ploči pinovi su fiksni: A4 je SDA i A5 je SCL. Pozovite Wire.begin() u postavljanju i biblioteka uređaja radi ostalo.
Dvije greške čine većinu početničkih problema. Prvi je pogrešno ožičenje na pogrešne pinove, jer I2C nije na pinovima označenim SDA i SCL na svakoj varijanti ploče. Drugi je ostavljanje adrese na zadanoj vrijednosti biblioteke kada vaš modul dolazi s drugačijom.
I2C s ESP32
Dodjeljivanje pinova ESP32 je fleksibilno. Većina jezgri po defaultu koristi GPIO 21 za SDA i GPIO 22 za SCL, ali možete proslijediti vlastiti par u Wire.begin(sda, scl) i usmjeriti sabirnicu gdje god je to potrebno. Noviji čipovi poput ESP32-C6 koriste drugačije zadane vrijednosti, pa provjerite raspored pinova ploče umjesto kopiranja tutorijala.
Razlog za odabir ESP32 je ono što se događa nakon očitanja. Wi-Fi je na čipu, tako da se vrijednost senzora može poslati izravno na Home Assistant, MQTT broker ili web nadzornu ploču. Naš pregled ESP32 projekti za početnike ima radne primjere toga.
ESP32 pinovi su 3,3 V. Većina I2C breakout ploča radi sretno na bilo kojem naponu, ali 5 V modul na 3,3 V ploči treba provjeriti prije nego što ga uključite.
I2C s Raspberry Pi
Na Raspberry Pi, I2C je prema zadanim postavkama isključen. Omogućite ga u raspi-config, zatim i2cdetect -y 1 prikazuje sve na sabirnici, što je isti posao kao što radi Arduino skener. SDA je na fizičkom pinu 3, a SCL na pinu 5.
Pi je vrijedan kada očitanja trebaju negdje živjeti. Pokreće bazu podataka, Grafana nadzornu ploču ili lokalni poslužitelj uz petlju senzora, što mikrokontroler ne može učiniti. Pi GPIO je samo 3,3 V, bez tolerancije za 5 V, tako da je ovo platforma gdje su logičke razine zapravo važne.
I2C vs SPI vs UART
| Protokol | Žice | Tipična brzina | Najbolje za | Glavna prednost |
|---|---|---|---|---|
| I2C | 2 signalne žice, zajedničke | 100 kHz do 400 kHz | Senzori, znakovni i mali grafički zasloni, RTC moduli, IO ekspanderi | Mnogi uređaji na istim dva pina |
| SPI | 4 žice, plus jedan odabir čipa po uređaju | Nekoliko MHz i više | Zasloni u boji, SD kartice, flash memorija, senzori visoke brzine | Mnogo brže |
| UART | 2 signalne žice, točka-točka | Tipično 9600 do 115200 bauda | GPS moduli, radio uređaji, veze između ploča | Nema adresiranja i nema satne linije za pogrešku |
Odaberite I2C kada imate nekoliko sporih uređaja i malo slobodnih pinova. Odaberite SPI kada jedan uređaj treba prenijeti puno podataka, kao što je zaslon u boji koji osvježava okvir. Odaberite UART kada točno dvije stvari trebaju razmijeniti tok bajtova, zbog čega ga gotovo svaki GPS modul koristi.
Što su pull-up otpornici u I2C?
I2C uređaji nikada ne povlače svoje linije visoko. Oni ih mogu samo povući nisko ili pustiti, što omogućuje da desetak čipova dijeli žicu: dva od njih koja istovremeno govore ne mogu kratko spojiti napajanje na masu. Nešto mora vratiti liniju, a to je pull-up otpornik.
Većina breakout ploča uključuje vlastite pull-up otpornike, tako da prvi projekt obično radi bez da vi išta dodajete. Problem nastaje s četvrtim ili petim modulom: ti otpornici su paralelno spojeni, a dovoljno njih paralelno povlači sabirnicu dolje dok ništa ne može ispravno osloboditi liniju. Ploče koje to očekuju stavljaju pull-up otpornike na kratkospojnike za lemljenje kako biste ih mogli isključiti.
Kada I2C projekt postane nepouzdan, redom provjerite pull-up otpornike, duljinu kabela, napon napajanja i duplicirane adrese. Duže rute su drugi česti uzrok: nakon metra ili više, kapacitivnost kabela zaokružuje rubove, a očitanja počinju ispadati. Proširivač sabirnice to ispravno rješava umjesto spuštanja takta i nadanja.
Uobičajeni I2C uređaji i moduli
| Vrsta modula | Što radi | Primjer projekta |
|---|---|---|
| Senzor temperature i vlage | Mjeri temperaturu i vlagu zraka | Meteorološka stanica |
| RTC modul | Održava točno vrijeme tijekom prekida napajanja | Digitalni sat ili zapisivač podataka |
| LCD zaslon | Prikazuje tekst i vrijednosti | Nadzorna ploča senzora |
| IO ekspander | Dodaje šesnaest ulaznih i izlaznih pinova | Upravljačka ploča s gumbima ili relejna kontrola |
| Senzor svjetlosti | Mjeri svjetlinu | Zaslon s automatskim zatamnjivanjem |
| Senzor kvalitete zraka | Mjeri CO₂ ili hlapljive organske spojeve | Monitor udobnosti prostorije |
| Upravljač dodira | Pretvara površinu u ulaz | Pametna upravljačka ploča |
| E-papirni zaslon | Prikazuje informacije bez trošenja energije za njihovo držanje | Kalendar ili nadzorna ploča |
Zadnji redak je vrijedan napomene. Sam panel e-papira nije I2C uređaj, ali kontroler dodira, RTC i senzori oko njega jesu, što je način na koji e-papirni zaslon postaje prednji kraj I2C projekta.
Ideje za početničke I2C projekte
1. I2C LCD zaslon za temperaturu
Očitajte temperaturni senzor i ispišite vrijednost na 16x2 LCD. Senzor ne mora biti I2C da bi ovo funkcioniralo, a DS18B20 je jednosmjerni, ali zaslon vam štedi šest pinova u odnosu na paralelni LCD. To je najkraći put od broja u serijskom monitoru do broja na zaslonu.
2. Projekt sata u stvarnom vremenu
Izgradite sat ili dodajte vremenske oznake zapisivaču podataka. Sve što je izgrađeno na millis() odstupa minutama dnevno i ponovno se pokreće od nule nakon prekida napajanja, tako da zapis bez RTC-a nema upotrebljivih vremena.
3. ESP32 pametni kućni senzor
Postavite jedan ili više I2C senzora na ESP32 i objavite očitanja na Home Assistantu ili MQTT brokeru. Ovo je projekt gdje se dvosmjerna sabirnica isplati, jer dodavanje drugog i trećeg senzora uopće ne mijenja ožičenje.
4. IO ekspander ploča s tipkama
Spojite osam tipki i osam LED dioda na ekspander umjesto na ploču. Dva pina nose sve, a kod čita registar umjesto šesnaest ulaza.
5. E-papir nadzorna ploča senzora
Prikupite temperaturu, vlažnost, kvalitetu zraka i vrijeme preko I2C-a i sve to nacrtajte na Inkplateu. E-papir je prikladan jer panel troši energiju samo kada se slika mijenja, tako da brojevi mogu stajati na zidu mjesecima. Ako Home Assistant već radi u vašoj kući, e-papirni zasloni za Home Assistant nadzorne ploče pokrivaju tu postavku.
Zašto je Soldered dobro mjesto za početak izrade I2C projekata
I2C vrijedi naučiti rano jer se pojavljuje u gotovo svakom projektu nakon trepćuće LED diode. Jednom kada SDA, SCL, adrese i zajednička sabirnica postanu razumljivi, podatkovna tablica prestaje biti zid teksta i postaje popis registara koje možete pročitati.
Soldered prodaje ploče, senzore, zaslone i komplete za to, izrađene da rade zajedno. Svaki breakout ima Qwiic konektor i održavanu Arduino biblioteku, tako da je novi senzor jedan kabel i primjer skice. Započnite s RTC-om ili LCD-om, dodajte senzor kada želite nešto izmjeriti, i postavite Inkplate ispred njega kada netko drugi osim vas treba pročitati brojeve.
Često postavljana pitanja
Što je I2C?
I2C je komunikacijski protokol koji omogućuje uređajima komunikaciju preko dvije zajedničke signalne žice, SDA i SCL. Koristi se za senzore, zaslone, RTC module, IO ekspandere i većinu breakout ploča.
Što znači I2C?
Inter-Integrated Circuit. Također se piše I²C, a izgovara se "ai kvadrat ce" ili "ai dva ce".
Što su SDA i SCL?
SDA je serijski podatak i nosi informacije. SCL je serijski sat i postavlja tajming, tako da svaki uređaj čita svaki bit u istom trenutku.
Kako funkcionira I2C?
Kontroler šalje početni uvjet, zatim adresu željenog uređaja. Samo uređaj s tom adresom odgovara. Podaci se kreću u bilo kojem smjeru, a zaustavni uvjet oslobađa sabirnicu za sljedeću razmjenu.
Što je I2C adresa?
7-bitni identifikator koji govori jednom uređaju na sabirnici da odgovori, a ostalima da ostanu tihi. Postavlja ga proizvođač čipa, a većina modula omogućuje vam promjenu najnižih bitova pomoću kratkospojnika kako biste mogli pokrenuti nekoliko istih dijelova.
Može li Arduino koristiti I2C?
Da, putem biblioteke Wire. Na Unu su pinovi A4 za SDA i A5 za SCL.
Može li ESP32 koristiti I2C?
Da, a pinovi su konfigurabilni. Većina jezgri po defaultu koristi GPIO 21 i GPIO 22, ali možete proslijediti vlastiti par u Wire.begin().
Može li Raspberry Pi koristiti I2C?
Da, nakon što ga omogućite u raspi-config. Koristite i2cdetect -y 1 za popis povezanih uređaja.
Koja je razlika između I2C i SPI?
I2C koristi dvije zajedničke žice i adrese za odabir uređaja. SPI koristi četiri žice plus liniju za odabir čipa po uređaju i nekoliko je puta brži. I2C je prikladan za senzore i male zaslone, SPI za zaslone u boji i memoriju.
Koja je razlika između I2C i UART?
I2C je sabirnica s adresiranjem, tako da jedan kontroler može doseći mnogo uređaja. UART je veza od točke do točke između točno dva uređaja, bez adresiranja i bez zajedničkog takta.
Zašto I2C trebaju pull-up otpornici?
I2C uređaji mogu povući liniju samo nisko, nikad je ne mogu podići visoko, pa otpornik mora vratiti liniju u stanje mirovanja. Većina pločica uključuje vlastite, ali s nekoliko modula na jednoj sabirnici paralelni otpor može postati dovoljno nizak da uzrokuje probleme.
Koliko uređaja mogu spojiti na jednu I2C sabirnicu?
Teoretski 112 upotrebljivih adresa, a u praksi prvo ponestane nečeg drugog. Prava ograničenja su duplicirane adrese i ukupni kapacitet kabela, a ne adresni prostor.
Koje projekte mogu izgraditi s I2C?
Prikazi temperature, satovi, uređaji za snimanje podataka, senzori za pametne kuće, meteorološke stanice, upravljačke ploče s tipkama, e-papir zasloni i sustavi za nadzor senzora.