Protokół komunikacyjny Arduino

Protokol Komunikacyjny Arduino



Protokoły komunikacyjne to zestaw reguł, który umożliwia urządzeniom komunikowanie się i wymianę danych. Protokoły te są bardzo ważne w komunikacji Arduino, ponieważ Arduino stale wysyła i odbiera dane. Korzystanie z tych protokołów pomaga Arduino w wykrywaniu błędów i możliwych metodach odzyskiwania błędów. Protokoły te łączą urządzenia analogowe i cyfrowe i umożliwiają projektowanie wielu projektów.

Protokoły komunikacyjne Arduino

Wykorzystując protokoły komunikacyjne 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 właśnie te protokoły są integralną częścią komunikacji Arduino.







Arduino ma wiele podłączonych do niego urządzeń peryferyjnych; wśród nich znajdują się trzy peryferia komunikacyjne stosowane w płytach Arduino.



Protokoły komunikacyjne Arduino

Komunikacja między różnymi urządzeniami elektronicznymi, takimi jak Arduino, jest znormalizowana wśród tych trzech protokołów; umożliwia projektantom łatwą komunikację między różnymi urządzeniami bez problemów ze zgodnością. Działanie tych trzech protokołów jest takie samo, ponieważ służą temu samemu celowi komunikacji, ale różnią się implementacją wewnątrz obwodu. Dalszy opis tych protokołów omówiono poniżej.







UART

UART jest znany jako Uniwersalny asynchroniczny nadajnik odbiorczy. UART jest protokołem komunikacji szeregowej, co oznacza, że ​​bity danych są przesyłane sekwencyjnie jeden po drugim. Do ustawienia komunikacji UART potrzebujemy dwóch linii. Jeden to pin Tx (D1) płyty Arduino, a drugi to pin Rx (D0) płyty Arduino. Pin Tx służy do przesyłania danych do urządzeń, a pin Rx służy do odbierania danych. Różne płytki Arduino mają wiele pinów UART.

Pin cyfrowy Arduino Pin UART
D1 Tx
D0 Rx

Aby nawiązać komunikację szeregową za pomocą portu UART należy połączyć dwa urządzenia w poniższej konfiguracji:



W Arduino Uno do komunikacji dedykowany jest jeden port szeregowy, potocznie nazywany portem USB. Jak sama nazwa wskazuje Universal Serial Bus, więc jest to port szeregowy. Za pomocą portu USB Arduino może nawiązać komunikację z komputerami. Port USB jest podłączony do wbudowanych pinów Tx i Rx Arduino. Za pomocą tych pinów możemy podłączyć dowolny zewnętrzny sprzęt inny niż komputer przez USB. Arduino IDE zapewnia bibliotekę SoftwareSerial (SoftwareSerial.h) co pozwala użytkownikom używać pinów GPIO jako pinów Serial Tx i Rx.

  • UART jest prosty w obsłudze z Arduino
  • UART nie potrzebuje sygnału zegarowego
  • Szybkość transmisji musi być ustawiona w granicach 10% komunikujących się urządzeń, aby zapobiec utracie danych
  • Wiele urządzeń z Arduino w konfiguracji Master Slave nie jest możliwe z UART
  • UART jest półdupleksem, co oznacza, że ​​urządzenia nie mogą jednocześnie przesyłać i odbierać danych
  • Tylko dwa urządzenia na raz mogą komunikować się z protokołem UART

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 jednocześnie wysyłać i odbierać dane. W porównaniu z UART i I2C jest to najszybsze urządzenie peryferyjne komunikacyjne w płytach Arduino. Jest powszechnie stosowany tam, gdzie wymagana jest duża szybkość transmisji danych, na przykład w przypadku wyświetlaczy LCD i kart Micro SD.

Cyfrowe piny SPI w Arduino są predefiniowane. Konfiguracja pinów Arduino Uno SPI wygląda następująco:

Linia SPI GPIO Pin nagłówka ICSP
SCK 13 3
MISO 12 1
PALIĆ jedenaście 4
SS 10
  • MOSI oznacza Master Out Slave In , MOSI to linia transmisji danych dla Master do Slave.
  • SCK to Linia zegara który określa prędkość transmisji i charakterystykę początkowo-końcową.
  • SS oznacza Wybierz niewolnika ; Linia SS umożliwia Masterowi wybranie konkretnego urządzenia Slave podczas pracy w konfiguracji wielu Slave.
  • MISO oznacza Mistrz w Slave Out ; MISO to linia transmisyjna Slave to Master dla danych.

Jedną z głównych zalet protokołu SPI jest konfiguracja Master-Slave. Za pomocą SPI jedno urządzenie można zdefiniować jako Master do sterowania kilkoma urządzeniami Slave. Master ma pełną kontrolę nad urządzeniami Slave poprzez protokół SPI.

SPI jest protokołem synchronicznym, co oznacza, że ​​komunikacja jest połączona ze wspólnym sygnałem zegarowym pomiędzy Master i Slave. SPI może kontrolować wiele urządzeń jako Slave za pośrednictwem jednej linii nadawczej i odbiorczej. Wszystkie Slave są połączone z Master za pomocą wspólnego MISO odbierz linię wraz z PALIĆ jedna wspólna linia transmisyjna. SCK jest również powszechną linią zegarową wśród urządzeń Master i Slave. Jedyną różnicą w urządzeniach Slave jest to, że każde urządzenie Slave jest sterowane przez oddzielne SS wybierz linię. Oznacza to, że każdy Slave potrzebuje dodatkowego pinu GPIO z płyty Arduino, który będzie działał jako linia wyboru dla tego konkretnego urządzenia Slave.

Poniżej wymieniono niektóre z najważniejszych cech protokołu SPI:

  • SPI jest najszybszym protokołem niż I2C i UART
  • Nie wymaga bitów startu i stopu jak w UART, co oznacza, że ​​możliwa jest ciągła transmisja danych
  • Slave można łatwo zaadresować dzięki prostej konfiguracji Master Slave
  • Dla każdego Slave na płytce Arduino zajęty jest dodatkowy pin. Praktycznie 1 Master może kontrolować 4 urządzenia Slave
  • Brak potwierdzenia danych, jak w UART
  • Konfiguracja Multiple Master nie jest możliwa

Protokół komunikacyjny I2C

Inter Integrated Circuit (I2C) to kolejny protokół komunikacyjny wykorzystywany przez płytki Arduino. I2C to najtrudniejszy i najbardziej skomplikowany protokół do zaimplementowania z Arduino i innymi urządzeniami. Pomimo swojej komplikacji oferuje wiele funkcji, których brakuje w innych protokołach, takich jak wiele konfiguracji Master i wiele Slaves. I2C umożliwia podłączenie do 128 urządzeń do głównej płytki Arduino. Jest to możliwe tylko dlatego, że I2C współdzieli jeden przewód między wszystkimi urządzeniami Slave. I2C w Arduino wykorzystuje system adresowania, co oznacza, że ​​przed wysłaniem danych do urządzenia Slave Arduino musi najpierw wybrać urządzenie Slave wysyłając unikalny adres. I2C wykorzystuje tylko dwa przewody, zmniejszając ogólną liczbę pinów Arduino, ale złą stroną jest to, że I2C jest wolniejszy niż protokół SPI.

Pin analogowy Arduino Pin I2C
A4 SDA
A5 SCL

Na poziomie sprzętowym I2C jest ograniczone tylko do dwóch przewodów, jednego dla linii danych znanej jako SDA (dane seryjne) a drugi dla linii zegara SCL (zegar szeregowy). W stanie bezczynności zarówno SDA, jak i SCL są wyciągane wysoko. Gdy dane muszą zostać przesłane, linie te są obniżane za pomocą obwodów MOSFET. Używając I2C w projektach, obowiązkowe jest użycie rezystorów podciągających zwykle o wartości 4,7Kohm. Te rezystory podciągające zapewniają, że zarówno linie SDA, jak i SCL pozostaną na wysokim poziomie podczas biegu jałowego.

Niektóre z głównych zalet protokołów I2C to:

  • Liczba wymaganych pinów jest bardzo niska
  • Można podłączyć wiele urządzeń Master Slave
  • Używa tylko 2 przewodów
  • Prędkość jest wolniejsza w porównaniu do SPI ze względu na rezystory podciągające
  • Rezystory potrzebują więcej miejsca w obwodzie
  • Złożoność projektu rośnie wraz ze wzrostem liczby urządzeń

Porównanie UART vs I2C vs SPI

Protokół UART SPI 2C
Prędkość Najwolniejszy Najszybszy Szybszy niż UART
Liczba urządzeń Do 2 4 urządzenia Do 128 urządzeń
Wymagane przewody 2(Tx,Rx) 4(SCK,DYM,OCZY,SS) 2(SDA,SCL)
Tryb dupleksu Tryb pełnego dupleksu Tryb pełnego dupleksu Półdupleks
Możliwa liczba Master-Slave Pojedynczy Master-Pojedynczy Slave Pojedynczy mistrz-wielu niewolników Wielu mistrzów-wielu niewolników
Złożoność Prosty Może łatwo kontrolować wiele urządzeń Kompleks ze wzrostem liczby 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 nieograniczone możliwości integracji wielu urządzeń. Zrozumienie wszystkich urządzeń peryferyjnych do komunikacji pozwoli zaoszczędzić czas i pomóc zoptymalizować projekty zgodnie z właściwym protokołem.