Protokoły komunikacyjne Arduino
Korzystając z protokołów komunikacyjnych, możemy wysyłać i odbierać dane dowolnego czujnika w Arduino.
Niektóre proste czujniki, takie jak podczerwień (IR), mogą bezpośrednio komunikować się z Arduino, ale niektóre złożone czujniki, takie jak moduł Wi-Fi, moduł karty SD i żyroskop, nie mogą komunikować się bezpośrednio z Arduino bez żadnych protokołów komunikacyjnych. Dlatego te protokoły są integralną częścią komunikacji Arduino.
Arduino ma do niego przymocowane wiele urządzeń peryferyjnych; Wśród nich są trzy peryferyjne komunikacyjne używane na tablicach Arduino.
Protokoły komunikacyjne Arduino
Komunikacja między różnymi urządzeniami elektronicznymi, takimi jak Arduino, jest znormalizowane między tymi trzema protokołami; Umożliwia projektantom łatwą komunikację między różnymi urządzeniami bez żadnych problemów z kompatybilnością. Działanie tych trzech protokołów jest takie same, jak służą temu samemu celowi komunikacji, ale różnią się wdrażaniem w obwodzie. Dalszy opis tych protokołów omówiono poniżej.
Uart
UART jest znany jako Uniwersalny asynchroniczny nadajnik odbiornika. UART to szeregowy protokół komunikacji, co oznacza, że bity danych są przesyłane w sekwencyjnej formie jeden po drugim. Do konfigurowania komunikacji UART potrzebujemy dwóch linii. Jednym z nich jest pin TX (D1) na płycie Arduino, a drugi to pin RX (D0) na tablicy Arduino. TX PIN służy do przesyłania danych do urządzeń, a pin RX jest używany do odbierania danych. Różne tablice Arduino mają wiele pinów UART.
Cyfrowy PIN Arduino | Pin uart |
D1 | TX |
D0 | Rx |
Aby ustalić komunikację szeregową za pomocą portu UART, musimy podłączyć dwa urządzenia na poniżej pokazane konfigurację:
Na Arduino UNO jeden port szeregowy jest poświęcony komunikacji, który jest powszechnie określany jako port USB. Jak sama nazwa sugeruje Universal Serial Bus, więc jest to port szeregowy. Korzystanie z portu USB Arduino może nawiązać komunikację z komputerami. Port USB jest podłączony do pinów pokładowych TX i RX Arduino. Za pomocą tych pinów możemy podłączyć dowolny zewnętrzny sprzęt inny niż komputer za pośrednictwem USB. Arduino IDE zapewnia bibliotekę oprogramowania (Softwareserial.H) który pozwala użytkownikom używać pinów GPIO jako seryjnych pinów TX i RX.
Szeregowy interfejs peryferyjny (SPI)
SPI jest akronimem szeregowego interfejsu peryferyjnego, który jest specjalnie zaprojektowany dla mikrokontrolerów do komunikowania się z nimi. SPI działa w trybie pełnego dupleksu, co oznacza, że SPI może wysyłać i odbierać dane jednocześnie. W porównaniu z UART i I2C jest to najszybsza peryferyjna komunikacja na tablicach Arduino. Jest powszechnie używany tam, gdzie wymagana jest wysoka szybkość danych, jak w aplikacjach kart LCD i mikro SD.
Cyfrowe szpilki SPI na Arduino są predefiniowane. Dla Arduino UNO SPI konfiguracja pin jest następująca:
Linia SPI | GPIO | Pin nagłówka ICSP |
SCK | 13 | 3 |
Miso | 12 | 1 |
Mosi | 11 | 4 |
SS | 10 | - |
Jednym z głównych atrakcji protokołu SPI jest konfiguracja mistrzowska. Korzystanie z SPI jedno urządzenie można zdefiniować jako master do kontrolowania kilku urządzeń niewolników. Master jest pełna kontroli urządzeń niewolniczych za pośrednictwem protokołu SPI.
SPI to protokół synchroniczny, co oznacza, że komunikacja jest powiązana ze wspólnym sygnałem zegara między mistrzem a niewolnikiem. SPI może kontrolować wiele urządzeń jako niewolnika nad jedną linią nadawczą i odbiorczą. Wszyscy niewolnicy są podłączeni do głównego za pomocą wspólnych Miso odbierać linię wraz z Mosi Jedna wspólna linia transmisji. SCK jest również wspólną linią zegara wśród urządzeń mistrzowskich i niewolników. Jedyną różnicą w urządzeniach niewolników jest to, że każde urządzenie niewolników jest kontrolowane przez osobne SS Wybierz linię. Oznacza to, że każdy niewolnik potrzebuje dodatkowego styku GPIO z płyty Arduino, która będzie działać jako wybrana linia dla tego konkretnego urządzenia niewolnika.
Niektóre z głównych atrakcji protokołu SPI podano poniżej:
Protokół komunikacji I2C
Międzyintegrowany obwód (I2C) to kolejny protokół komunikacyjny używany przez tablice Arduino. I2C jest najtrudniejszym i najtrudniejszym protokołem do wdrożenia z Arduino i innymi urządzeniami. Pomimo jego komplikacji oferuje wiele funkcji, których brakuje w innych protokołach, takich jak wiele konfiguracji master i wielu niewolników. I2C umożliwia podłączenie do 128 urządzeń z główną płytą Arduino. Jest to możliwe tylko dlatego, że I2C dzieli pojedynczy drut między wszystkimi urządzeniami niewolnikami. I2C w Arduino używa systemu adresu, co oznacza, że przed wysłaniem danych do urządzenia niewolnika Arduino musi najpierw wybrać urządzenie niewolników, wysyłając unikalny adres. I2C używa tylko dwóch przewodów zmniejszających ogólną liczbę pinów Arduino, ale złą stroną jest I2C jest wolniejszy niż protokół SPI.
Analogiczna szpilka Arduino | Pin I2C |
A4 | SDA |
A5 | Scl |
Na poziomie sprzętowym I2C jest ograniczone tylko do dwóch przewodów, jeden dla linii danych znanej jako SDA (dane szeregowe) i drugi dla linii zegarowej SCL (zegar szeregowy). W stanie bezczynności zarówno SDA, jak i SCL są wyciągane wysoko. Gdy dane muszą być przesyłane, linie te są ciągnięte nisko za pomocą obwodu MOSFET. Korzystanie z I2C w projektach obowiązkowe jest stosowanie rezystorów podciągających zwykle wartość 4.7KOHM. Te rezystory podciągające zapewniają, że zarówno linie SDA, jak i SCL pozostają wysokie w swoim biegu jałowym.
Niektóre z głównych atrakcji protokołów I2C to:
Porównanie UART vs I2C vs SPI
Protokół | Uart | SPI | I2C |
Prędkość | Najwolniejszy | Najszybszy | Szybciej niż Uart |
Liczba urządzeń | Do 2 | 4 urządzenia | Do 128 urządzeń |
Wymagane przewody | 2 (TX, RX) | 4 (SCK, Mosi, Miso, SS) | 2 (SDA, SCL) |
Tryb dupleksu | Pełny tryb dupleksu | Pełny tryb dupleksu | Połowa dupleksu |
Możliwa liczba mistrzów | Pojedynczy mistrz niewolnik | Pojedyncze niewolnicy Master-Multiple | Wielu niewolników Masters-Multiple |
Złożoność | Prosty | Może łatwo kontrolować wiele urządzeń | Złożone ze wzrostem urządzeń |
Bit potwierdzenia | NIE | NIE | Tak |
Wniosek
W tym artykule omówiliśmy kompleksowe porównanie wszystkich trzech protokołów UART, SPI i I2C używanych w Arduino. Znajomość wszystkich protokołów jest ważna, ponieważ daje niekończące się możliwości zintegrowania wielu urządzeń. Zrozumienie wszystkich urządzeń peryferyjnych zaoszczędzi czas i pomoże zoptymalizować projekty zgodnie z prawidłowym protokołem.