Aby podłączyć interfejs Bluetooth przez UART, połącz wyjście TX mikrokontrolera z wejściem RX modułu, wyjście TX modułu z wejściem RX mikrokontrolera oraz wspólną masę, wcześniej sprawdzając zgodność napięć. Następnie ustaw zgodny format transmisji i uruchom usługę Bluetooth obsługiwaną przez urządzenie odbiorcze — samo sparowanie nie oznacza gotowości do wymiany danych. Poprawność połączenia sprawdź w obu kierunkach za pomocą numerowanych ramek, a przy dłuższej transmisji zadbaj o kontrolę przepływu i wykrywanie przepełnienia buforów.
Co łączymy: UART, moduł i aplikację
W tym zastosowaniu moduł pośredniczy między przewodowym interfejsem UART a połączeniem radiowym. Mikrokontroler przekazuje mu bajty, a oprogramowanie modułu udostępnia je urządzeniu zdalnemu. Nie każdy układ z UART działa jednak jako gotowy most szeregowy: niektóre wymagają obsługi stosu Bluetooth przez procesor nadrzędny. Przed wyborem podzespołu trzeba potwierdzić jego sposób pracy.
Klasyczny Bluetooth może udostępniać profil portu szeregowego SPP. W BLE podobną funkcję realizuje zwykle usługa GATT z charakterystykami do zapisu i odbioru danych. Aplikacja musi znać tę usługę; terminal przeznaczony wyłącznie do SPP nie obsłuży jej automatycznie. O zgodności decydują profil, oprogramowanie modułu i możliwości systemu odbiorcy, nie sama nazwa Bluetooth.
Tutaj skupiamy się na połączeniach elektrycznych i przepływie danych. Antenę, tor radiowy oraz konstrukcję płytki omawia osobny artykuł o projektowaniu płytki drukowanej Bluetooth.

Ilustracja zestawu prototypowego z wcześniejszej wersji poradnika. Połączenia należy ustalać według dokumentacji użytych płytek.
Poziomy UART: napięcie zasilania to nie napięcie wejść
Moduł radiowy i płytka pośrednia z wyprowadzonym złączem mogą mieć różne wymagania zasilania. Obecność stabilizatora na płytce nie dowodzi, że wejście RX toleruje napięcie podawane na VCC. Ta sama nazwa handlowa, na przykład HC-05 lub HC-06, nie wystarcza do ustalenia schematu płytki, funkcji wyprowadzeń ani ustawień oprogramowania.
Sprawdź osobno dopuszczalny zakres zasilania, zakres napięć wejściowych oraz progi rozpoznawania stanów logicznych. Gwarantowane minimalne napięcie stanu wysokiego wyjścia VOH musi osiągać wymagany próg VIH wejścia. Maksymalne napięcie stanu niskiego VOL nie może przekraczać dopuszczalnego progu VIL. Porównuj parametry dla właściwego zasilania, obciążenia i temperatury. Wartości graniczne podane w karcie katalogowej nie są zalecanymi warunkami pracy.
| Sytuacja | Decyzja projektowa | Co potwierdzić |
|---|---|---|
| Zgodne poziomy wejść i wyjść | Bezpośrednie połączenie UART ze wspólną masą | Progi logiczne, dopuszczalne napięcia i zachowanie przy wyłączonym zasilaniu |
| TX przekracza dopuszczalne napięcie RX | Konwerter poziomów; dzielnik tylko po analizie warunków pracy | Kierunek transmisji, obciążenie, czas narastania i tolerancje |
| TX nie zapewnia wymaganego stanu wysokiego RX | Konwerter podnoszący poziom sygnału | Gwarantowane VOH nadajnika i VIH odbiornika |
| Podłączenie do portu RS-232 | Układ dopasowujący standard elektryczny | UART modułu nie jest bezpośrednim odpowiednikiem elektrycznym RS-232 |
Przykład założony: dzielnik na wejściu RX
Załóżmy wyjście TX o napięciu stanu wysokiego 5 V oraz wejście RX pracujące nominalnie w domenie 3,3 V. Przyjmijmy rezystor Rg = 10 kΩ między TX a RX i Rd = 20 kΩ między RX a masą. Dla pomijalnego prądu wejściowego napięcie wynosi:
U_RX = U_TX × Rd / (Rg + Rd) = 5 V × 20 kΩ / (10 kΩ + 20 kΩ) ≈ 3,33 V.
To obliczenie nominalne, nie gotowy dobór elementów do dowolnego modułu. Trzeba jeszcze uwzględnić tolerancje rezystorów, skrajne napięcia TX, prąd wejściowy oraz pojemność wejścia i przewodów. Jeżeli napięcie przekroczy dopuszczalny zakres albo zbocza staną się zbyt wolne, rozwiązanie jest niepoprawne. W przeciwnym kierunku również porównaj progi: niższe napięcie TX modułu nie musi zostać rozpoznane jako stan wysoki przez mikrokontroler.

Ilustracja modułów Bluetooth. Rozmieszczenie styków i funkcje sygnałów zależą od konkretnego wykonania.
Złącze modułu: sygnały i lista kontroli przed uruchomieniem
Na schemacie opisuj kierunki z perspektywy konkretnego urządzenia. TX modułu jest jego wyjściem, a RX modułu — wejściem. Dla styków EN, KEY i STATE sprawdź dokumentację: mogą odpowiadać za włączenie układu, wybór trybu poleceń albo sygnalizację stanu. Nie należy traktować tych nazw jako zamiennych.
- Zasilanie: potwierdź napięcie na właściwym styku, wydajność źródła oraz wymagane odsprzęganie. Uwzględnij pobór prądu podczas pracy radia, nie tylko w spoczynku.
- Masa: zapewnij wspólny punkt odniesienia sygnałów i sprawdź ciągłość połączeń przy odłączonym zasilaniu.
- Dane: połącz TX z RX w obu kierunkach. Wyklucz zwarcie wyjść, także wtedy, gdy do tej samej linii jest podłączony konwerter USB–UART.
- Uruchamianie: ustal stany wejść sterujących oraz zachowanie, gdy mikrokontroler i moduł włączają się w różnej kolejności. Sprawdź ryzyko zasilania układu przez linię sygnałową.
- Złącze: oznacz orientację, masę i kierunki sygnałów. Jeśli potrzebujesz kontroli przepływu, wyprowadź również obsługiwane linie RTS i CTS.
- Pomiary: przewidź dostęp do UART, masy i zasilania. Ułatwi to obserwację sygnałów bez rozpinania wiązki.
Przy wyborze wykonania mechanicznego pomocne jest porównanie typów złączy PCB. Zasilanie modułu warto przeanalizować razem z doborem kondensatorów odsprzęgających; ich wartości i rozmieszczenie powinny wynikać z dokumentacji układu.

Ilustracja modułu z pierwotnego poradnika; nie określa parametrów elektrycznych wszystkich podobnych płytek.
Sparowanie, połączenie i gotowość do transmisji
Parowanie służy ustanowieniu zabezpieczeń między urządzeniami. Zachowanie kluczy pozwala wykorzystać je przy kolejnych połączeniach. Wpis na liście zapamiętanych urządzeń nie dowodzi jednak, że aktualnie istnieje połączenie ani że aplikacja otworzyła właściwy kanał danych. W BLE dostęp do niektórych usług może być możliwy bez parowania, zależnie od wymaganych zabezpieczeń.
| Obserwacja | Co potwierdza | Czego jeszcze brakuje |
|---|---|---|
| Urządzenie jest widoczne podczas wyszukiwania | Można wykryć jego obecność | Potwierdzenia zgodnej usługi i zestawienia połączenia |
| Urządzenie jest zapamiętane jako sparowane | System zachował informacje o powiązaniu | Sprawdzenia aktualnego połączenia i dostępu aplikacji do danych |
| Moduł sygnalizuje połączenie | Stan określony w dokumentacji modułu | Sprawdzenia, czy odbiorca odczytuje i przetwarza dane |
| Aplikacja odsyła odpowiedź z numerem żądania | Przejście konkretnej wiadomości przez oba kierunki transmisji | Próby pod obciążeniem oraz po zerwaniu połączenia |
W SPP aplikacja musi otworzyć połączenie szeregowe. W BLE powinna odnaleźć właściwą usługę i charakterystyki, a jeżeli odbiór odbywa się przez powiadomienia — włączyć ich subskrypcję. Kod parowania, znaczenie diody LED i sygnału STATE sprawdź dla używanego oprogramowania. Nie ma wspólnego wzoru migania dla wszystkich modułów.
Program powinien osobno obsługiwać inicjalizację, oczekiwanie na połączenie, gotowość aplikacji i utratę łącza. Po rozłączeniu wstrzymaj nadawanie albo zapisuj dane zgodnie z ustaloną polityką. Po ponownym połączeniu uzgodnij nową sesję i los zaległych wiadomości, aby stare polecenie nie zostało wykonane przypadkowo.

Archiwalna ilustracja połączenia Arduino z modułem Bluetooth. Nie zastępuje weryfikacji napięć ani schematu danego modułu.
Źródło ilustracji: Wikimedia Commons.
Kontrola przepływu: kiedy potrzebne są RTS i CTS
UART i radio mogą opróżniać bufory w różnym tempie. Krótka wiadomość może przejść poprawnie, choć ciągły strumień powoduje utratę bajtów. Sprzętowa kontrola przepływu pozwala odbiornikowi wstrzymać nadajnik, zanim zabraknie miejsca. Jeśli urządzenia mają RTS jako wyjście gotowości odbiornika i CTS jako wejście zezwolenia nadajnika, łączy się RTS jednego z CTS drugiego. Kierunki i aktywne poziomy należy potwierdzić w dokumentacji.
Samo podłączenie przewodów nie wystarczy: kontrolę przepływu trzeba włączyć po obu stronach. Nadajnik może jeszcze dokończyć rozpoczęty znak, a dane mogą pozostawać w kolejce sprzętowej. Odbiornik musi więc zgłosić zatrzymanie odpowiednio wcześnie. Sprawdź także, czy sygnał gotowości uwzględnia bufor programu, czy tylko sprzętowy bufor UART.
Jeżeli moduł nie udostępnia RTS/CTS, zastosuj potwierdzenia na poziomie aplikacji i ogranicz liczbę niepotwierdzonych ramek. Odbiorca może też informować, ile danych jest gotowy przyjąć. Stała przerwa między wiadomościami nie zapewnia ochrony przy nieprzewidywalnym opóźnieniu odbiorcy. Większy bufor pomaga przy krótkich spiętrzeniach, ale nie rozwiązuje trwałej przewagi tempa nadawania nad odbiorem.
Przykład założony: przepustowość i zapas bufora
Przyjmijmy ustawienie UART 115 200 bit/s, format 8N1 i brak przerw między znakami. Oznaczenie 8N1 oznacza 8 bitów danych, brak parzystości i 1 bit stopu; z 1 bitem startu daje to 10 bitów przesyłanych na każdy bajt. Maksymalny strumień bajtów na tym odcinku wynosi zatem:
115 200 bit/s ÷ 10 bitów/bajt = 11 520 bajtów/s.
Załóżmy ramkę aplikacji zawierającą 32 bajty danych i 8 bajtów narzutu, łącznie 40 bajtów, wysyłaną 200 razy na sekundę. Wymagany strumień wynosi 40 × 200 = 8000 bajtów/s, czyli 80 000 bit/s w formacie 8N1. Mieści się w przyjętej przepustowości UART, ale nie dowodzi, że moduł i aplikacja odbiorcza obsłużą takie tempo przez Bluetooth. Potwierdzenia i pozostałe komunikaty również zajmują przepustowość.
Załóżmy dalej, że odbiór z analizowanego bufora zatrzymuje się na 100 ms, czyli 0,1 s, a dopływ pozostaje równy 8000 bajtów/s. Potrzebne wolne miejsce wynosi co najmniej B = strumień × czas = 8000 × 0,1 = 800 bajtów. Jeśli dodatkowo 20 bajtów może nadejść po zgłoszeniu zatrzymania, potrzeba co najmniej 820 bajtów wolnego miejsca. To nie jest całkowita pojemność bufora: trzeba uwzględnić jego wcześniejsze zajęcie i margines wynikający z rzeczywistych opóźnień. Wszystkie przyjęte obciążenia i czasy są przykładem założonym, nie wynikiem pomiaru.
Jak przeprowadzić test utraty danych
Na UART obserwujesz strumień bajtów, a nie bezpośrednio pakiety radiowe. Brak wiadomości w aplikacji może wynikać z przepełnienia UART, przepełnienia kolejki modułu, rozłączenia albo błędu programu. Test powinien wykrywać utratę danych od nadawcy do odbiorcy oraz umożliwiać wskazanie odcinka, na którym nastąpiła.
Ramka testowa i kolejność prób
Zdefiniuj ramkę zawierającą znacznik początku, długość, identyfikator sesji, kolejny numer, dane testowe i sumę kontrolną, na przykład CRC. Określ sposób odróżniania znacznika od identycznego bajtu wewnątrz danych oraz maksymalną długość ramki. CRC pomaga wykrywać uszkodzenia, ale nie zastępuje numeracji, potwierdzeń ani zabezpieczeń transmisji.
- Sprawdź odcinek przewodowy. Potwierdź ustawienia UART, napięcia i przebiegi. Rejestruj błędy ramki UART, parzystości, jeśli jest używana, oraz przepełnienia odbiornika.
- Uruchom mały strumień w obu kierunkach. Porównuj numer i zawartość wysłanej ramki z odpowiedzią odbiorcy. Oddziel numerację obu kierunków.
- Zwiększ obciążenie do wymaganego w projekcie. Sprawdź transmisję ciągłą, serie wiadomości i jednoczesne nadawanie w obu kierunkach. Zapisuj największe zajęcie buforów.
- Wstrzymaj odczyt u odbiorcy. Obserwuj, czy kontrola przepływu zatrzymuje nadawcę przed przepełnieniem. Sprawdź również zachowanie po zamknięciu aplikacji.
- Zerwij i przywróć połączenie. Zweryfikuj rozpoznawanie nowej sesji, obsługę zaległości i duplikatów. Ponowienie polecenia nie powinno niezamierzenie powtórzyć jego skutku.
- Porównaj rejestry obu końców. Zestaw ramki zaplanowane, przyjęte do nadania i odebrane. Zapisz konfigurację, warunki radiowe, czas próby oraz przyjęty termin oczekiwania na brakujące ramki.
Nie uznawaj ramki za utraconą, dopóki może jeszcze znajdować się w kolejce. Po zakończeniu nadawania odczekaj uzgodniony czas i rozlicz unikalne numery w danej sesji. Oddziel braki, duplikaty, błędy sumy kontrolnej oraz wiadomości dostarczone po wymaganym terminie. Jeżeli aplikacja wymaga potwierdzenia wykonania polecenia, samo potwierdzenie odbioru przez moduł jest niewystarczające.
Przykład założony: obliczenie udziału brakujących ramek
Załóżmy, że nadawca przekazał 10 000 numerowanych ramek, a odbiorca zarejestrował 9980 różnych poprawnych ramek z tej sesji przed upływem ustalonego terminu. Brakuje 10 000 − 9980 = 20 ramek, zatem udział braków wynosi 20 / 10 000 × 100% = 0,2%. To wyłącznie przykład rachunkowy, nie wynik badania modułu. Ponownie odebrane kopie nie zwiększają liczby unikalnych ramek; uszkodzone ramki należy wykazać osobno.
Odbiornik musi znać oczekiwaną liczbę ramek, ponieważ sama luka w numeracji nie ujawni utraty końcowej części transmisji. Kryterium zaliczenia ustal przed próbą: dla poleceń sterujących może być potrzebne rozliczenie każdego żądania, natomiast dane pomiarowe wymagają również kontroli aktualności. Brak luk w krótkiej próbie nie stanowi gwarancji niezawodności.


Archiwalne ilustracje programu z pierwotnego poradnika. Nie dokumentują wykonania opisanych testów; oprogramowanie testowe musi dodatkowo obsługiwać numerację, bufory i rejestrację błędów.
Typowe błędy przy uruchamianiu
- Przypadkowe znaki: sprawdź format i szybkość UART, wspólną masę, progi napięciowe oraz zgodność trybu poleceń z trybem przesyłania danych.
- Działa krótki tekst, giną dłuższe wiadomości: sprawdź przepełnienia, blokujące operacje programu i kontrolę przepływu. Podniesienie szybkości UART może pogorszyć problem.
- Po sparowaniu brak danych: sprawdź otwarcie usługi przez aplikację, właściwe charakterystyki BLE i subskrypcję powiadomień.
- Moduł uruchamia się ponownie: obserwuj zasilanie podczas nadawania i sprawdź wejście resetujące. Utrata łącza nie zawsze oznacza zakłócenia radiowe.
- Komunikacja zanika po poruszeniu przewodem: skontroluj złącze, przewody i spoiny. W diagnostyce pomaga poradnik o rozpoznawaniu zimnych lutów.
FAQ — pytania o interfejs Bluetooth
Czy moduł Bluetooth można podłączyć bez konwertera poziomów?
Tak, jeśli dokumentacja potwierdza zgodność poziomów i dopuszczalnych napięć w obu kierunkach, także podczas uruchamiania i wyłączania. Samo zgodne napięcie zasilania płytek nie wystarcza. Sprawdź parametry konkretnych wyprowadzeń UART.
Dlaczego telefon widzi moduł, ale aplikacja się nie łączy?
Wykrycie urządzenia nie potwierdza obsługi jego usługi. Sprawdź, czy moduł udostępnia SPP czy usługę BLE, czy aplikacja ją obsługuje oraz czy ma wymagane uprawnienia. Zweryfikuj też, czy moduł nie jest już zajęty przez innego odbiorcę.
Czy szybkość UART określa szybkość Bluetooth?
Nie. Określa przepustowość lokalnego połączenia przewodowego. O tempie dostarczania danych decydują także format ramek, obsługiwana usługa, warunki radiowe, bufory i odczyt w aplikacji. Zwiększenie szybkości UART pomaga tylko wtedy, gdy właśnie ten odcinek ogranicza transmisję.
Czy retransmisje Bluetooth eliminują potrzebę potwierdzeń aplikacji?
Nie zapewniają potwierdzenia wykonania polecenia przez program odbiorczy. Dane mogą zostać utracone poza łączem radiowym albo pozostać w kolejce. Jeżeli znaczenie ma wykonanie operacji, odbiorca powinien zwrócić jej wynik z identyfikatorem żądania i rozpoznawać ponowienia.


