
IoT prakticky - programovanie Raspberry Pi v Pythone 5: I2C komunikácia
Mini seriál je zameraný na obsluhu hardvéru pripojeného na dosku Raspberry PI. V tejto časti na praktických príkladoch ukážeme možnosti komunikácie cez zbernicu I2C, konkrétne obsluhu expanderu - obvodu MCP23008 určeného na rozšírenie počtu portov.
Príklady sú v vo videu
Upozorňujeme, že nie každý pin portu sa dá použiť kedykoľvek a na čokoľvek. Napríklad porty GPIO2 a GPIO3 môžete na všeobecné účely použiť iba v prípade aj nie je aktivovaná komunikácia na I2C zbernici. A to je práve v príkladoch z tohoto článku. Preto porty GPIO2 a GPIO3 nevyužívajte na iné účely. Na obrázku sú zeleným vyznačené porty, ktoré môžete využiť kedykoľvek a žltým porty, ktoré sa dajú využiť len za určitých okolností.
I2C (Inter-Integrated Circuit)je dvojvodičová obojsmerná sériová zbernica, určená napríklad na komunikáciu jednočipových procesorov s podriadenými obvodmi. Vodič SDA (Serial Data) je určený na prenos sériových dát a vodič SLC (Serial Clock) na prenos taktovacieho signálu. Signály sú na pinoch GPIO2 (SDA) a GPIO3 (SCL).
Každý obvod na zbernici je identifikovaný jedinečnou adresou, preto zbernica I2C nevyžaduje signál CS (chip select) ani inú logiku na výber čipu. Pomocou I2C zbernice sa k mikrokontroléru pripájajú rôzne komponenty, napríklad displeje, prevodníky, expandery portov, pamäte EEPROM a podobne. Inak povedané zariadenia, ktoré napotrebujú prenášať veľa údajov vysokou rýchlosťou. Prenosová rýchlosť je štandardne do 100 kbit/s, vo Fast móde až 400 kbit/s.
Pri implicitnom nastavení je komunikácia cez I2C zakázaná, preto ju musíte najskôr v konfigurácii mikropočítača Raspberry Pi povoliť
Aby sme nemuseli nič zapájať a vašu pozornosť sústredili na softvérovú obsluhu, v prvom príklade sme využili dosku určenú pre domácu automatizáciu UniPi 1.1 Lite.
![]() |
![]() |
Doska má 6 digitálnych vstupov, na čítanie stavu externých zariadení, ktoré sú pripojené priamo na porty. Pre nás je zaujímavé, že na doske je 6 spínacích relé aj so signalizačnými LED diódami a tieto relé nie sú pripojené na výstupné porty, ale sú ovládané po zbernici I2C cez obvod MCP23008 na adrese 0x20. Tento obvod funguje ako I/O extendér, takže pomocou neho môžete mať 8 digitálnych vstupov, alebo výstupov. Často sa používa v príkladoch na ovládanie jednotlivých segmentov sedem segmentových displejov. Môžete prípadne skúsiť zapojenie s týmto obvodom na prepojovacom poli, je to jednoduché.
![]() |
![]() |
Obvod sa vyrába vo verzii s klasickými nožičkami s roztečou 2.54 mm, prípadne vo verzii pre plošnú montáž. Cena je okolo 2 eurá.
Pomocou príkazu zadaného cez konzolu Raspberry Pi zistíte adresy pripojených zariadení.
sudo i2cdetect -y 1
Komunikačný protokol I2C je súčasťou knižnice SMBus (System Management Bus), takže stačí importovať túto knižnicu a využiť funkcie read_byte_data() a write_byte_data(), prípadne read_i2c_block_data() a write_i2c_block_data()
V príklade využijeme funkciu na nastavenie bitu. Môže mať dve varianty. V prvej nastaví iba príslušný bit na hodnotu 1 a ostatné pony zostanú na hodnote 0
Druhý variant nastaví len príslušný pin bez ohľadu na stav ostatných.
Príklad, kódu ktorý postupne zapne jednotlivé relé
V niektorom z ďalších dielov ukážeme softvérovú obsluhu iných zaujímavých zariadení pripojených cez I2C, predovšetkým senzorov a displejov. V budúcom pokračovaní ukážeme pripojenie externých zariadení cez zbernicu 1-Wire.
Ostatné časti seriálu:
Programovanie Raspberry Pi v Pythone 1: Konfigurácia https://www.pcrevue.sk/a/IoT-prakticky---programovanie-Raspberry-Pi-v-Pythone---1-cast--konfiguracia
Programovanie Raspberry Pi v Pythone 2: Vstupy a výstupy https://www.pcrevue.sk/a/IoT-prakticky---programovanie-Raspberry-Pi-v-Pythone---2-cast--vstupy-a-vystupy
Programovanie Raspberry Pi v Pythone 3: PWM výstup a ovládanie servomotorov https://www.pcrevue.sk/a/IoT-prakticky---programovanie-Raspberry-Pi-v-Pythone-3--PWM-vystup-a-ovladanie-servomotorov
Programovanie Raspberry Pi v Pythone 4: softvérová obsluha vstupov
Zobrazit Galériu