Kategorie
Ekspandery wyprowadzeń
Ekspandery wyprowadzeń to sprytne moduły umożliwiające zwiększenie liczby dostępnych portów I/O w projektach mikrokontrolerowych. Gdy Twojemu Arduino czy Raspberry Pi zabraknie pinów do podłączenia kolejnych diod, przycisków lub czujników, ekspander wyprowadzeń przyjdzie z pomocą, działając jak dodatkowa "ręka" pełna nowych wejść i wyjść. W tej kategorii znajdują się m.in. popularne układy I/O expander komunikujące się przez I2C (np. 8-bitowy PCF8574, 16-bitowy MCP23017), rejestry przesuwne (jak 74HC595) pozwalające tanim kosztem uzyskać więcej wyjść cyfrowych oraz multipleksery analogowe (CD74HC4067) zwiększające liczbę obsługiwanych sygnałów analogowych. Ekspandery wyprowadzeń są proste w użyciu i cenione przez hobbystów – wystarczy kilka połączeń, by uzyskać dodatkowe porty do rozbudowy swojego układu, nie wymieniając mikrokontrolera na większy model. Dzięki nim nawet z małej płytki rozwojowej można zbudować rozbudowany system z wieloma peryferiami.
Ekspandery wyprowadzeń
Po co nam ekspandery wyprowadzeń?
Większość mikrokontrolerów i płytek (Arduino, STM32, itp.) ma ograniczoną liczbę pinów, które możemy wykorzystać jako wejścia lub wyjścia. Przy prostych projektach rzadko wykorzystujemy wszystkie, ale w bardziej rozbudowanych konstrukcjach może szybko zabraknąć portów. Ekspandery wyprowadzeń to rozwiązanie tego problemu – pozwalają „dodawać” kolejne piny I/O bez zmiany mikrokontrolera. Działają zwykle jako pośrednicy: mikrokontroler komunikuje się z ekspanderem np. po magistrali I2C, SPI lub za pomocą sygnałów zegarowych (rejestr przesuwny), a ekspander udostępnia fizycznie nowe piny, które możemy traktować jak normalne wejścia/wyjścia. W praktyce oznacza to, że jeśli Twoje Arduino ma tylko 14 pinów cyfrowych, a potrzebujesz 20, to dodając ekspander zyskasz dodatkowe wyprowadzenia i nie musisz wymieniać Arduino na większe. To oszczędność czasu, pieniędzy i miejsca – ekspandery często są malutkimi modułami, które łatwo zmieszczą się w projekcie.
Rodzaje ekspanderów portów i ich zastosowania
Na rynku istnieje kilka typów ekspanderów różniących się sposobem działania oraz zakresem funkcji:
-
Ekspandery I2C/SPI (porty cyfrowe) – Są to układy scalone (zwykle w postaci modułu) jak PCF8574 (8-bit, I2C) czy MCP23017 (16-bit, I2C) oraz ich odpowiedniki SPI (np. MCP23S17). Podłącza się je czterema przewodami (zasilanie + SDA, SCL, GND dla I2C) i poprzez odczyt/zapis rejestrów w układzie można sterować stanami ich dodatkowych pinów lub odczytywać ich poziomy. Przykładowo, 8-bitowy PCF8574 dodaje 8 linii, które mogą posłużyć do zapalania diod LED, czytania przycisków, sterowania przekaźnikami itp. Wiele ekspanderów I2C umożliwia ustawienie adresu (poprzez piny adresowe), co pozwala użyć kilka identycznych układów na jednej magistrali i tym samym uzyskać np. 2×8=16 dodatkowych portów, 3×8=24, itd.
-
Rejestry przesuwne (ekspandery wyjść) – Najbardziej znanym jest 74HC595, 8-bitowy rejestr przesuwny z zatrzaskiem. Działa on w ten sposób, że wysyłasz do niego (przez 2–3 linie sterujące) ciąg bitów reprezentujących pożądane stany 8 wyjść, a po „przesunięciu” danych i ustawieniu zatrzasku – 8 wyjść równoległych przyjmuje tę zadaną kombinację 0/1. Rejestry przesuwne są świetne do rozmnażania wyjść cyfrowych, szczególnie gdy potrzebujesz sterować wieloma diodami LED, siedmiosegmentowymi wyświetlaczami czy innymi elementami, gdzie każdy bit kontroluje np. świecenie. Ogromną zaletą 74HC595 jest możliwość łączenia ich kaskadowo – możesz połączyć 2 układy i przesyłać 16 bitów (wyjść), 3 układy – 24 bity, itd., używając wciąż tych samych 3 linii sterujących z mikrokontrolera. To bardzo ekonomiczne pod względem wykorzystania pinów sterowanie wieloma wyjściami. Warto wiedzieć, że istnieją też rejestry przesuwne do wejść (np. 74HC165), choć one są rzadziej spotykane w formie modułu – ale analogicznie pozwalają wczytać stan kilku przycisków przez przesunięcie bitów do mikrokontrolera.
-
Multipleksery/demultipleksery analogowe – Tutaj przykładem jest CD74HC4067, 16-kanałowy multiplekser analogowo-cyfrowy. Działa on jak 16-to drogowy przełącznik sterowany 4 liniami adresowymi – pozwala podłączyć 1 z 16 sygnałów do wspólnego portu. Praktycznie używa się go np. do rozszerzenia wejść analogowych: jeden pin analogowy mikrokontrolera łączysz do wspólnego wyprowadzenia modułu 74HC4067, a 4 linie adresowe sterujesz z cyfrowych pinów – w ten sposób możesz wybierać, który z 16 czujników analogowych aktualnie czytasz tym jednym pinem. Ponieważ 4067 działa analogowo, nadaje się zarówno dla sygnałów analogowych (np. napięcia z potencjometrów), jak i cyfrowych (może działać jak ekspander wejść/wyjść cyfrowych, przełączając sygnały 0/1). Minusem jest to, że zawsze w danej chwili tylko jeden kanał z 16 jest aktywny – więc to dobre do skanowania czujników czy klawiatur matrycowych, ale nie do jednoczesnego sterowania wielu linii naraz (w tym lepsze są ekspandery typu I2C lub rejestry, które dają stałe, równoległe wyjścia).
-
Inne ekspandery i drivery specjalizowane – Niekiedy za ekspandery uznaje się także układy takie jak PCA9685 (16-kanałowy generator PWM, stosowany często do sterowania dużą liczbą serwomechanizmów lub diod LED z jasnością). On również komunikuje się przez I2C i daje w pewnym sensie 16 wyjść (tyle że PWM). Istnieją także ekspandery portów dedykowane konkretnym platformom, np. shieldy Arduino z dodatkowymi GPIO, lub expandery dla Raspberry Pi w formie HAT z układami MCP23017. W tej kategorii jednak skupiamy się na uniwersalnych modułach jak wyżej.
Jak używać ekspanderów – na przykładzie
Korzystanie z ekspandera zazwyczaj wymaga komunikacji z nim z poziomu programu mikrokontrolera. Nie jest to skomplikowane – dla ekspanderów I2C korzystasz z biblioteki Wire (Arduino) lub analogicznej, wysyłasz bajt sterujący określający stan wyjść lub odczytujesz bajt reprezentujący stany wejść. Dla rejestru przesuwnego 74HC595 używasz bitbang SPI lub sprzętowego SPI – Arduino ma funkcję shiftOut(), która idealnie nadaje się do sterowania 595. Przykład: chcesz sterować 8 diodami LED za pomocą 74HC595. Łączysz 3 piny Arduino (dane, zegar, latch) do odpowiednich wejść rejestru, a 8 wyjść modułu do diod (przez rezystory). W kodzie ustawiasz piny sterujące jako wyjścia, a następnie wywołujesz shiftOut(dataPin, clockPin, MSBFIRST, value) – gdzie value to liczba 8-bitowa, której bity reprezentują stan diod (1 – zapalona, 0 – zgaszona). Ustawiasz latch (przerzutnik) i diody zmieniają stan jednocześnie. Analogicznie, przy ekspanderze PCF8574 – korzystasz z biblioteki PCF8574 Arduino, która pozwala ustawić stan pinów przez np. pcf8574.digitalWrite(pin, HIGH). Układ sam zajmuje się utrzymaniem tych stanów.
Ważną kwestią jest adresowanie i ilość ekspanderów: układy jak MCP23017 mają piny adresowe A0,A1,A2 – możesz je podłączyć do 0 lub VCC, konfigurując adres I2C układu. To pozwala użyć do 8 takich ekspanderów jednocześnie (bo adres I2C jest 7-bitowy, 3 bity z nich konfigurowalne, 2^3=8 kombinacji). W praktyce rzadko potrzeba aż tylu, ale np. dwa MCP23017 dadzą Ci 32 dodatkowe IO! Dla rejestrów przesuwnych adresowanie odbywa się poprzez łańcuchowe łączenie – łączysz Q7' pierwszego z DS (dane) drugiego i wspólnie zegarem sterujesz – efektem jest po prostu dłuższy łańcuch bitów do przesłania (16, 24...). Multipleksery analogowe jak CD4067 mają po prostu więcej linii adresowych (tu 4, dające 16 kombinacji).
Zastosowania ekspanderów w projektach DIY
Ekspandery portów znajdują zastosowanie w wielu praktycznych sytuacjach:
-
Matryce LED i wyświetlacze – Sterowanie dużą ilością LEDów (np. matryca 8x8 LED, wyświetlacze 7-seg, paski LED segmentowe) może pochłonąć wiele pinów. Używając rejestrów przesywnych 74HC595 lub ekspanderów I2C, można znacząco zredukować liczbę potrzebnych linii mikrokontrolera. Wiele gotowych modułów LED (np. matryce 8x8) już ma wbudowane rejestry (MAX7219), ale budując coś własnego – ekspander będzie kluczowy.
-
Klawiatury i przyciski – Gdy chcemy odczytać stan kilkunastu lub więcej przycisków, ekspander wejść sprawdzi się idealnie. Przykładowo 4x4 keypad (16 przycisków) można obsłużyć wykorzystując 8 wyprowadzeń mikrokontrolera (metodą macierzową), ale też można podłączyć go do ekspandera PCF8574 i odpytywać po I2C, zostawiając Arduino piny wolne na inne zadania.
-
Rozszerzanie Arduino Uno/Nano – Te popularne płytki mają ograniczenia co do liczby PWM, analogów itp. Można zastosować np. MCP23017, aby zyskać dodatkowe cyfrowe porty do sterowania przekaźnikami czy odczytu czujników. Albo użyć PCA9685 (ekspander PWM) do sterowania wieloma serwomechanizmami przy budowie robotów (16 serw na jednym module, sterowane po I2C).
-
Własne projekty z wyświetlaczami LCD – Wiesz, że typowy wyświetlacz LCD 16x2 można obsłużyć za pomocą ekspandera PCF8574? Popularne „moduły I2C do LCD” to nic innego jak PCF8574 właśnie – dzięki temu do kontroli wyświetlacza potrzebujesz tylko 2 linii I2C zamiast 6-7 linii cyfrowych. Jeśli budujesz panel z kilkoma wyświetlaczami lub urządzenie z kilkoma elementami do sterowania, ekspandery pomogą zapanować nad połączeniami.
-
Odizolowanie logiki głównej od peryferiów – Czasem wykorzystuje się ekspander jako pośrednik z dodatkowym zasilaniem, by odciążyć prądowo mikrokontroler. Np. MCP23017 może bez problemu „udźwignąć” LED-y o niewielkim poborze prądu na swoich pinach (ma limity, ale rzędu kilkudziesięciu mA sumarycznie), dzięki czemu Arduino nie musi bezpośrednio źródłować prądu na wszystkich liniach.
Podsumowując, ekspandery wyprowadzeń to niezwykle przydatne moduły, gdy nasz projekt robi się bardziej złożony niż początkowo zakładaliśmy. Zamiast zmieniać całą platformę na większą (co bywa kosztowne i trudniejsze do ogarnięcia), dokładamy mały układ scalony lub moduł, który magicznie „dodaje” nam brakujące piny. Dla hobbysty to wybawienie – pozwala zachować ulubione małe Arduino czy ESP i jednocześnie zrealizować ambitniejszy pomysł wyposażony w mnóstwo elementów.
FAQ – Najczęstsze pytania o ekspandery wyprowadzeń
-
Co to jest ekspander wyprowadzeń i jak działa?
Ekspander wyprowadzeń (inaczej ekspander I/O, port expander) to układ elektroniczny, który dodaje dodatkowe piny wejścia/wyjścia do Twojego mikrokontrolera czy systemu. Działa on na zasadzie pośredniczenia: sam ekspander łączy się z mikrokontrolerem np. jedną magistralą (I2C, SPI lub kilkoma liniami sterującymi), a w zamian udostępnia wiele linii, które mogą pełnić rolę zwykłych wejść lub wyjść cyfrowych. Gdy chcesz ustawić stan któregoś z tych dodatkowych wyjść, wysyłasz odpowiednią komendę do ekspandera, a on ustawia tam 0 lub 1. Gdy chcesz odczytać stan podłączonego przycisku, pytasz ekspander – on zwraca Ci informację, czy na danym pinie jest stan wysoki czy niski. W praktyce ekspander ma wewnętrzne rejestry (pamięci), których bity odpowiadają stanom jego wyprowadzeń. Mikrokontroler modyfikuje/odczytuje te rejestry, tak jakby to były przedłużenia jego własnych portów. Dzięki temu z punktu widzenia programu, użycie ekspandera to po prostu inny sposób kontrolowania pinów – trochę wolniejszy (bo przez interfejs komunikacyjny), ale bardzo efektywny pod względem liczby dodanych linii. -
Kiedy powinienem użyć ekspandera portów w moim projekcie?
Powinieneś rozważyć użycie ekspandera wyprowadzeń, gdy zabraknie Ci wolnych pinów w mikrokontrolerze, a potrzebujesz podłączyć dodatkowe elementy. Przykładowo: projektujesz układ z wieloma LEDami i przyciskami i okazuje się, że Twój Arduino Uno nie ma już dość pinów cyfrowych – wtedy ekspander (np. PCF8574) dodający 8 kolejnych portów rozwiąże problem. Innym przypadkiem jest sytuacja, gdy Twój mikrokontroler ma co prawda wystarczającą liczbę pinów, ale nie wszystkie z nich są łatwo dostępne lub wygodne w użyciu (np. w ESP8266 część GPIO jest zajęta przez flash lub ma ograniczenia). Ekspander można też użyć dla uproszczenia okablowania – np. klawiatura matrycowa 4x4 może połączona przez ekspander I2C będzie wymagała poprowadzenia tylko 2 przewodów do głównej płytki zamiast 8. Warto go stosować również w projektach modułowych: możesz mieć jeden moduł centralny i kilka „satelitów” z ekspanderami obsługującymi różne grupy urządzeń – to czasem porządkuje schemat. Podsumowując: użyj ekspandera zawsze, gdy brakuje Ci nóg w układzie scalonym lub chcesz odciążyć główną płytkę z nadmiaru połaczeń. -
Jakie są popularne układy ekspanderów i czym się różnią?
Popularne ekspandery to:-
PCF8574 – 8-bitowy ekspander I/O od Texas Instruments, komunikacja I2C. Zapewnia 8 linii dwukierunkowych (każda może być wejściem lub wyjściem). Ma bardzo prostą obsługę – każdy bit w wysłanym bajcie ustawia odpowiadający pin (w trybie wyjścia), a przy odczycie bajta – zwraca stany pinów (w trybie wejścia). Nie ma wielu dodatkowych funkcji (np. pull-upów konfigurowalnych), ale prostota czyni go lubianym. Można ustawić 3 bity adresowe, czyli podłączyć do 8 takich układów naraz (łącznie 64 linie dodatkowe maksymalnie).
-
MCP23008/MCP23017 – ekspandery firmy Microchip. MCP23008 jest 8-bitowy I2C, a MCP23017 16-bitowy I2C (właściwie to dwa 8-bit porty A i B). Mają także odpowiedniki na SPI (MCP23S17). W porównaniu do PCF8574 są bardziej zaawansowane: każdy pin można ustawić jako wejście lub wyjście niezależnie, dostępne są rezystory podciągające, a nawet rejestry do generowania przerwań (IRQ) w razie zmiany stanu wejścia – co pozwala odciążyć mikrokontroler od ciągłego skanowania. Adresowalne również (3 bity adresu dla I2C – do 8 układów, ale 16-bitowy MCP23017 to już 16*8 = 128 potencjalnych portów maksymalnie!). Są nieco bardziej złożone w obsłudze (trzeba ustawiać kilka rejestrów), ale dostępne biblioteki Arduino upraszczają sprawę.
-
74HC595 (rejestr przesuwny) – chociaż to nie „ekspander” w sensie protokołu I2C/SPI, jest popularnym układem do ekspansji wyjść. Zapewnia 8 wyjść i działa przez taktowanie danych (interfejs podobny do SPI). Głównie do wyjść cyfrowych (wejść nie odczytasz tym układem). Bardzo tani i łatwo kaskadowalny.
-
CD74HC4067 – 16-kanałowy multiplekser/demultiplekser analogowy. Pozwala na ekspansję zarówno wejść, jak i wyjść analogowych/digital (ale tylko jednego kanału naraz). Najczęściej używany do zwiększania liczby odczytywanych sygnałów analogowych. Różni się tym od powyższych, że nie zatrzymuje stanu – przełącza sygnały. Też sterowanie jest równoległe (4 linie adresu). Różnice między ekspanderami dotyczą głównie interfejsu komunikacyjnego (I2C vs SPI vs własny protokół zegarowy), liczby portów (8, 16 itp.), oraz funkcjonalności (czy obsługuje przerwania, pull-upy, kierunek pinów dynamicznie). Wybór zależy od potrzeb: do prostych rzeczy wystarczy PCF8574, jak potrzebujesz przerwania czy więcej kontroli – MCP23017. Gdy chodzi tylko o wiele wyjść LED – 74HC595 może być najtańszy i skuteczny.
-
-
Czy ekspandera można używać zarówno do wejść, jak i wyjść?
Tak, większość ekspanderów pozwala na użycie ich linii zarówno jako wejścia, jak i wyjścia – przy czym trzeba to odpowiednio skonfigurować. Ekspandery I2C/SPI (PCF8574, MCP23017) mają piny dwukierunkowe: mogą odczytywać stan podłączonych przycisków czy czujników (wejścia) lub sterować diodami, przekaźnikami (wyjścia). Zwykle programowo ustalasz, które bity są wejściami, a które wyjściami (np. w MCP23017 piszesz do rejestru IODIR, ustawiając bit=1 dla wejścia, 0 dla wyjścia). PCF8574 działa troszkę inaczej – traktuje bity ustawione na 1 jako wejścia (bo 1 = stan wysokiej impedancji z wewn. podciągaczem) a 0 jako wyjścia aktywnie ściągane do GND. Mimo to praktycznie też obsługuje wejścia i wyjścia jednocześnie. Rejestry przesuwne 74HC595 oryginalnie są tylko wyjściowe, ale istnieje wersja 74HC165 do wejść – jednak nie jest on tak powszechnie używany w modułach. Multiplekser 4067 nie ma „kierunku” – po prostu przełącza sygnały, więc można nim zarówno czytać wiele sygnałów na jednym ADC (wejścia) jak i wysyłać sygnał do jednego z wielu wyjść (choć w tym drugim przypadku on nie podtrzyma tego stanu po przełączeniu adresu). W skrócie: typowe ekspandery portów cyfrowych jak najbardziej obsługują i wejścia, i wyjścia – to kwestia ustawienia i właściwego odczytu/wysłania danych. -
Ile ekspanderów mogę podłączyć jednocześnie?
To zależy od rodzaju ekspandera i interfejsu. W przypadku ekspanderów magistrali I2C (PCF8574, MCP23017 etc.), maksymalna liczba jest ograniczona liczbą unikalnych adresów dostępnych dla danego układu. Na I2C wszystkie urządzenia są podłączone do tych samych dwóch linii, ale każde musi mieć inny adres. Przykładowo PCF8574 ma 3 piny adresowe (A0, A1, A2), co pozwala ustawić 8 różnych adresów – czyli do 8 układów PCF8574 na jednej magistrali (dając razem 8*8 = 64 wyprowadzenia). MCP23017 też ma 3 bity adresu – więc do 8 takich ekspanderów 16-bit = 128 portów maksymalnie. Teoretycznie na I2C można mieć wiele różnych rodzajów ekspanderów jednocześnie (np. 8 szt. PCF + 8 szt. MCP naraz, byle adresy się nie nakładały, ale to raczej rzadko potrzebne). W przypadku ekspanderów SPI (jak MCP23S17) ograniczeniem jest zwykle liczba dostępnych pinów CS (chip select) lub możliwość kaskady – ale SPI pozwala adresować urządzenia linią CS więc praktycznie też kilka da radę (MCP23S17 ma 3 adresowe bity + wymaga unikalnego CS, więc też 8 na jedną linię CS, a można wiele linii CS użyć). Rejestry przesuwne 74HC595 – tutaj limit jest bardzo duży, bo można je łączyć szeregowo: np. łańcuch 10 rejestrów da 80 wyjść, 15 rejestrów 120 wyjść itd., a wszystkie sterujesz tym samym zestawem pinów (tylko dłuższym ciągiem bitów). W praktyce sygnał może osłabnąć przy ekstremalnej długości łańcucha, ale dziesiątki układów są możliwe (choć rzadko zachodzi taka potrzeba). Multipleksery analogowe 4067 – możesz podłączyć kilka równolegle, ale każdy potrzebuje osobnego zestawu linii adresowych jeśli mają działać niezależnie, więc tu raczej używa się jednego, czasem dwóch (np. jeden dla wejść, drugi dla wyjść analogowych). Sumując: możesz użyć wielu ekspanderów równolegle, by uzyskać setki dodatkowych wyprowadzeń, o ile Twój mikrokontroler poradzi sobie z obsługą komunikacji z nimi. Zazwyczaj jednak 2-3 ekspandery w projekcie to już sporo i zaspokaja potrzeby większości zastosowań hobbystycznych. -
Czy ekspandery powodują opóźnienia w działaniu układu?
Sterowanie przez ekspandery jest pośrednie, więc jest nieco wolniejsze niż bezpośrednie użycie pinów mikrokontrolera, ale w większości zastosowań nie stanowi to problemu. Na przykład komunikacja I2C zazwyczaj działa z częstotliwością 100 kHz lub 400 kHz. Odczytanie stanu pinów z ekspandera I2C może zająć kilkadziesiąt mikrosekund do może setek mikrosekund – co dla ludzkiej percepcji (np. reakcja na przycisk, miganie LED) jest nadal błyskawiczne. Jeśli jednak potrzebujesz bardzo szybkiego przełączania pinów (np. generowanie precyzyjnego sygnału czasowego, dźwięku, itp.), ekspander się do tego nie nada – lepiej użyć wtedy bezpośrednich pinów mikrokontrolera lub specjalizowanych układów. Rejestr 74HC595 może pracować szybciej (SPI nawet kilka MHz), ale nadal – dodaje to pewne opóźnienie, bo musisz przesłać dane serialnie. Dla migających światełek, odczytu przycisków, itp. te opóźnienia są pomijalne. Gdybyś np. próbował przez ekspander I2C obsługiwać wyświetlacz LCD bardzo szybko, zauważysz że odświeżanie jest nieco wolniejsze niż przy bezpośrednim podłączeniu – ale wciąż akceptowalne w większości przypadków. Podsumowując: tak, ekspander wprowadza dodatkowe opóźnienie, bo komunikacja nim zajmuje czas, ale w typowych projektach hobbystycznych czas ten jest krótki i nie wpływa na działanie całości w odczuwalny sposób. Jeśli Twój projekt wymaga sterowania w czasie rzeczywistym i mikrosekundowej precyzji na wielu liniach – ekspander to nie najlepszy wybór. Do większości innych zadań sprawdzi się znakomicie. -
Czy trudno jest zaprogramować obsługę ekspandera w Arduino?
Niekoniecznie – obsługa ekspanderów jest dobrze wspierana przez społeczność i istnieje wiele gotowych bibliotek Arduino, które to ułatwiają. Przykładowo dla MCP23017 jest biblioteka Adafruit MCP23017, dla PCF8574 są również biblioteki (PCF8574 Arduino Library), które dostarczają proste funkcje w stylu pinMode(expanderPin, OUTPUT), digitalWrite(expanderPin, HIGH) itp., bardzo podobnie jak w standardowym Arduino, tylko z wskazaniem, że chodzi o pin ekspandera. Jeśli wolisz samemu, to używasz biblioteki Wire (I2C): wysyłasz bajt z bitmaską ustawiającą piny, co sprowadza się do dwóch-trzech linijek kodu. Dla 74HC595 też jest prosto – Arduino ma funkcję shiftOut(), więc w zasadzie konfigurujesz kilka pinów jako wyjścia i wywołujesz shiftOut z odpowiednią wartością. Oczywiście trzeba zrozumieć, które bity odpowiadają którym fizycznym pinom ekspandera, ale to opisuje dokumentacja lub komentarze w przykładach bibliotek. Wiele tutoriali online pokazuje krok po kroku, jak to zrobić. Podsumowując: jeśli już potrafisz zapalić diodę na zwykłym pinie Arduino, to zapalenie diody przez ekspander jest tylko odrobinę trudniejsze – kwestia użycia innej funkcji (np. expander.digitalWrite zamiast zwykłego digitalWrite). Po opanowaniu kilku przykładów przekonasz się, że to dość intuicyjne.