Gdy mikrokontroler nie odpowiada, moduł GPS pokazuje przypadkowe znaki albo konwerter USB-UART milczy, problem często leży w dwóch niepozornych liniach oznaczonych jako RX i TX. Wyjaśniam, jak działają sygnały odbioru i nadawania, jak poprawnie je połączyć, czym różni się UART od RS-232 oraz jak szybko znaleźć przyczynę błędów komunikacji.
Najważniejsze zasady komunikacji RX i TX
- TX nadaje, a RX odbiera dane.
- Połączenie dwóch urządzeń wymaga skrzyżowania przewodów: TX do RX i RX do TX.
- Oba układy muszą mieć wspólną masę GND.
- Parametry transmisji, zwłaszcza baud rate, liczba bitów danych i parzystość, muszą być zgodne.
- Poziomy 3,3 V, 5 V i RS-232 nie są wzajemnie zamienne bez odpowiedniego konwertera.

Co oznaczają oznaczenia RX i TX
Skrót TX pochodzi od transmit, czyli nadawania, a RX od receive, czyli odbioru. Linia TX wysyła kolejne bity danych z jednego urządzenia, natomiast RX przyjmuje je po stronie odbiornika.
Najłatwiej zapamiętać to z perspektywy konkretnego urządzenia. Jego TX jest wyjściem, a RX wejściem. Dlatego przy połączeniu dwóch układów przewody krzyżuje się, łącząc TX pierwszego urządzenia z RX drugiego oraz TX drugiego z RX pierwszego.
| Urządzenie A | Urządzenie B | Rola |
|---|---|---|
| TX | RX | Dane wysyłane z A do B |
| RX | TX | Dane wysyłane z B do A |
| GND | GND | Wspólny punkt odniesienia napięcia |
Brak wspólnego GND jest jednym z najczęstszych powodów pozornie losowych błędów. Nawet gdy przewody sygnałowe są podłączone prawidłowo, odbiornik może nie rozpoznać stanów logicznych, jeśli oba układy nie odnoszą napięcia do tej samej masy.
Jak działa transmisja szeregowa UART
RX i TX najczęściej spotyka się przy interfejsie UART, czyli asynchronicznej transmisji szeregowej. Asynchronicznej, ponieważ urządzenia nie przesyłają osobnego przewodu zegarowego. Zamiast tego uzgadniają szybkość transmisji i sposób dzielenia danych na ramki.
Typowa ramka UART zawiera bit startu, zwykle 8 bitów danych, opcjonalny bit parzystości oraz jeden lub dwa bity stopu. Popularny zapis 115200 8N1 oznacza szybkość 115 200 bitów na sekundę, 8 bitów danych, brak kontroli parzystości i 1 bit stopu.
Po obu stronach trzeba ustawić zgodne parametry. Sama liczba bitów na sekundę nie wystarczy, ponieważ różnice w parzystości, liczbie bitów stopu albo kolejności bitów mogą powodować błędy mimo prawidłowego skrzyżowania przewodów.
Przeczytaj również: Pasmo C - Dlaczego wciąż wygrywa stabilnością?
Pełny i jednokierunkowy przepływ danych
Połączenie TX oraz RX umożliwia zwykle komunikację pełnodupleksową, czyli jednoczesne nadawanie i odbieranie. Jeśli urządzenie ma tylko wysyłać dane, wystarczy czasem podłączyć jego TX do RX odbiornika, ale w praktyce warto również połączyć masy.
Niektóre moduły wykorzystują dodatkowe linie RTS i CTS. To sprzętowa kontrola przepływu, która pomaga zatrzymać nadawanie, gdy odbiornik nie nadąża z przetwarzaniem danych. Przy prostych połączeniach Arduino, ESP32 czy modułu GPS zazwyczaj nie jest potrzebna.
RX i TX w Arduino, ESP32 oraz konwerterach USB
W płytkach rozwojowych linie szeregowe mogą mieć różne nazwy. Arduino często oznacza je jako D0/RX i D1/TX, ESP32 pozwala przypisać UART do wybranych GPIO, a konwerter USB-UART udostępnia piny opisane jako TXD i RXD.
W przypadku połączenia płytki z konwerterem USB trzeba zachować zasadę krzyżowania. TX konwertera łączę z RX płytki, a RX konwertera z TX płytki. Jeśli chcę tylko obserwować komunikaty debugowania, czasem wystarczy połączenie TX urządzenia z RX konwertera i wspólna masa.
| Połączenie | TX | RX | GND |
|---|---|---|---|
| Mikrokontroler z modułem GPS | TX mikrokontrolera do RX GPS | RX mikrokontrolera do TX GPS | Wspólna masa |
| Mikrokontroler z komputerem | TX płytki do RX konwertera | RX płytki do TX konwertera | Wspólna masa |
| Odczyt logów | TX urządzenia do RX adaptera | Opcjonalnie | Wspólna masa |
Trzeba też uważać na port używany przez programator lub monitor szeregowy. Na wielu płytkach główny UART jest współdzielony z USB, więc podłączenie zewnętrznego modułu do tych samych pinów może powodować konflikty podczas wgrywania programu.
Najważniejsza różnica między UART, TTL i RS-232
Oznaczenia TX i RX nie określają jeszcze poziomów napięcia. To tylko nazwy kierunku sygnału. Ten sam opis może pojawić się przy interfejsie UART 3,3 V, UART 5 V, RS-232, RS-485, a nawet w innych rozwiązaniach wykorzystujących transmisję szeregową.
| Standard lub poziom | Typowe zastosowanie | Na co uważać |
|---|---|---|
| UART 3,3 V | ESP32, wiele nowoczesnych modułów | Nie podawać bezpośrednio sygnału 5 V na wejście nieprzystosowane do takiego napięcia |
| UART 5 V | Wybrane płytki Arduino i starsze moduły | Może uszkodzić układ pracujący wyłącznie z logiką 3,3 V |
| RS-232 | Starsze komputery, urządzenia przemysłowe | Wymaga konwertera poziomów, ponieważ nie jest bezpośrednim UART-em TTL |
| RS-485 | Długie przewody i sieci przemysłowe | Używa różnicowej transmisji i transceivera, a nie prostych linii RX/TX |
To rozróżnienie ma praktyczne znaczenie. Nie wolno łączyć bezpośrednio portu RS-232 z pinem mikrokontrolera, nawet jeśli oba urządzenia mają wyprowadzenia opisane jako TX i RX. Potrzebny jest konwerter, na przykład układ dopasowujący poziomy napięć i odwracający logikę sygnału.
Podobnie wygląda sprawa między 5 V i 3,3 V. Czasem wejście 3,3 V toleruje sygnał 5 V, ale nie należy zakładać tego bez sprawdzenia dokumentacji. Najbezpieczniejszym rozwiązaniem jest konwerter poziomów logicznych albo dzielnik napięcia zastosowany zgodnie z wymaganiami konkretnego układu.
Dlaczego komunikacja przez RX i TX nie działa
Gdy urządzenia nie wymieniają danych, zaczynam od rzeczy prostych. W praktyce większość problemów powodują nie uszkodzone moduły, lecz zamienione przewody, brak GND albo różne ustawienia transmisji.
- Sprawdź, czy TX jednego urządzenia trafia do RX drugiego, a nie do TX.
- Połącz masy obu układów.
- Ustaw tę samą prędkość, na przykład 9600 albo 115200 bit/s.
- Zweryfikuj format ramki, najczęściej 8N1.
- Sprawdź, czy napięcie sygnałów wynosi 3,3 V, 5 V czy odpowiada standardowi RS-232.
- Odłącz inne urządzenia korzystające z tego samego UART-u.
- Wykonaj test pętli zwrotnej, łącząc TX z RX w jednym urządzeniu.
Test pętli zwrotnej jest szczególnie użyteczny. Jeśli znak wysłany z terminala wraca do niego poprawnie, sam port i konwerter prawdopodobnie działają, a problem znajduje się po stronie drugiego urządzenia, jego konfiguracji lub okablowania.
Losowe symbole na terminalu zwykle wskazują na niezgodną prędkość transmisji, ale nie jest to jedyna możliwość. Przyczyną może być również odwrócona logika, niewłaściwy poziom napięcia, zakłócenia na długim przewodzie albo błędne ustawienie bitu parzystości.
Jak dobrać połączenie do konkretnego projektu
Do krótkiego połączenia między mikrokontrolerem a modułem GPS, modemem lub czujnikiem wystarczy zwykle UART z trzema przewodami. Przyjmuję wtedy prostą konfigurację, wspólną masę i identyczne parametry po obu stronach.
Jeżeli przewód ma kilka metrów, środowisko jest zaszumione albo urządzenia są zasilane z różnych miejsc, zwykłe TX/RX może przestać być dobrym wyborem. W takich warunkach lepiej rozważyć RS-485, izolację galwaniczną lub inny interfejs zaprojektowany do większych odległości.
Przy dużej liczbie danych znaczenie ma również bufor odbiorczy. Mikrokontroler może odebrać bajty szybciej, niż program zdąży je przetworzyć, dlatego aplikacja powinna regularnie odczytywać dane i rozpoznawać pełne komunikaty, zamiast zakładać, że jeden odczyt zawsze zwróci całą wiadomość.
Sam wybór wyższej prędkości nie rozwiązuje problemu. Zwiększenie baud rate skraca czas transmisji, ale może pogorszyć odporność na zakłócenia i wymagać dokładniejszego taktowania. W projektach hobbystycznych i prototypach rozsądniej zacząć od 9600 lub 115200 bitów na sekundę, a dopiero później sprawdzać, czy szybsza komunikacja rzeczywiście jest potrzebna.
Małe ustawienie, które decyduje o całej transmisji
Przy pierwszym uruchomieniu połączenia zapisuję sobie pełną konfigurację obu stron, a nie tylko nazwę portu. Informacja „UART działa z prędkością 115200” jest niepełna, jeśli nie wiadomo, czy użyto 7 czy 8 bitów danych, jak ustawiono parzystość i ile bitów stopu przewidziano.
Najpewniejszy schemat diagnostyczny jest prosty: najpierw sprawdzam napięcia, potem przewody, wspólną masę i parametry ramki. Dopiero gdy te elementy są zgodne, szukam błędu w programie, protokole urządzenia albo obsłudze bufora. Taka kolejność oszczędza sporo czasu, bo pozwala odrzucić najbardziej typowe przyczyny bez wymiany sprawnych modułów.