I2C expandér je přídavný obvod pro Arduino. Tento modul obsahuje obvod PCF8574, který umožňuje připojit osm vstupně-výstupních (I/O) pinů přes I2C sběrnici, tedy pouze pomocí dvou pinů na Arduinu. A zde možnost rozšíření nekončí, protože díky třem přepínačům adresy pro obvod PCF můžeme za sebe zapojit až osm expandérů a tím připojit přes dva I2C piny až 64 I/O pinů.
Pro napájení I2C expandéru je možné použít napájecí napětí v rozsahu 2,5 až 6 Voltu. Co se týká výstupního proudu datových pinů, tak je možné získat při napětí 5 V až 25 mA, ale je nutné podotknout, že spínání probíhá logickou nulou. Při spínání logickou jedničkou je výstupní proud omezen na přibližně 1 mA. V tomto příkladu jsem ale schválně použil spínání logickou jedničkou, abych omezil svítivost použité LED diody.
Pro úspěšné propojení modulu PCF8574 a Arduino desky stačí zapojit celkem 4 vodiče. Propojíme SCL s pinem A5, SDA s pinem A4, GND se zemí Arduina a VCC s 5V Arduina. Pro piny SDA a SCL musíme vybrat vždy vyhrazené I2C piny na námi vybrané desce, u Arduino UNO jsou to právě piny A4 a A5.
Pro úspěšné nahrání uvedeného ukázkového kódu je nutné stáhnout a naimportovat knihovnu PCF8574, návod, jak na to, je uveden zde. Ukázkový kód obsahuje na svém začátku připojení potřebných knihoven a inicializaci modulu z knihovny s nastavenou adresou modulu (adresy začínají od hodnoty 0x38 hex).
V podprogramu setup zahájíme nejprve komunikaci po sériové lince a následně komunikaci s připojeným PCF modulem.
Nekonečná smyčka loop obsahuje jako první krok načtení stavu pinu 1 do proměnné stav. Poté zkontrolujeme, jestli je tlačítko sepnuto na logickou nulu. Pokud se tak stane, vypneme připojenou LED diodu na pinu 0. Pokud ale tlačítko není sepnuto, přepneme aktuální stav LED diody (zapnuto->vypnuto a naopak), abychom dosáhli blikání LED diodou. Po kontrole tlačítka si ještě pro ukázku ukážeme načtení všech osmi pinů do proměnné najednou a obsah této proměnné v dalším kroku vytiskneme v binární podobě po sériové lince. Na konci programu se nachází už jen pauza po dobu jedné sekundy před novým během smyčky.
// Expander PCF8574 // připojení potřebných knihoven #include "PCF8574.h" #include <Wire.h> // inicializace modulu z knihovny PCF8574 pcf(0x38); void setup() { // zahájení komunikace po sériové lince // rychlostí 9600 baud Serial.begin(9600); // zahájení komunikace s expanderem pcf.begin(); } void loop() { // načtení a kontrola stavu tlačítka na pinu 1 expanderu bool stav = pcf.read(1); if (stav == LOW) { // vypnutí LED diody připojené k pinu 0 expanderu pcf.write(0, LOW); } else { // přepnutí stavu LED diody připojené k pinu 0 expanderu pcf.toggle(0); } // vytištění stavu všech pinů do proměnné // a jejich vytištění v binární podobě byte x = pcf.read8(); Serial.print("Nacteny stav "); Serial.println(x, BIN); // krátká pauza před novým během smyčky delay(1000); }
Po nahrání ukázkového kódu do Arduino desky s připojeným modulem PCF8574 dostaneme například tento výsledek:
Nacteny stav 11111110 Nacteny stav 11111111 Nacteny stav 11111110 Nacteny stav 11111111 // stisknuto tlačítko Nacteny stav 11111100 Nacteny stav 11111100
I2C expandér PCF8574 je velice šikovný obvod, který se v Arduino komunitě velmi hojně používá. V tomto návodu je uvedena ukázka, jak přistupovat k jednotlivým pinům na modulu, přičemž není nutné předem specifikovat, jestli je daný pin vstup či výstup. Mohli jste ale také už narazit na velmi časté použití tohoto modulu jako převodníku u LCD displejů, kde převádí paralelní rozhraní na I2C sběrnici. Tento modul tedy může nalézt použití v různých projektech, kde máme typicky požadavek pro využití většího množství vstupně-výstupních pinů, ale je pro nás zbytečně přecházet například z UNO desky na MEGA. Díky již zmíněné možnosti měnit adresy jednotlivých modulů totiž můžeme bez problémů právě třeba desku UNO obohatit o dalších 64 pinů při zabrání pouhých 2.
Seznam použitých komponent:
https://dratek.cz/arduino/974-arduino-uno-r3-atmega328p-1424115860.html
https://dratek.cz/arduino/1380-pcf8574-i-o-expander-i2c-bus-rozsirujici-deska-1471264532.html