Port szeregowy


Gdy po raz pierwszy zaczynasz pracować z Arduino, jednym z kluczowych elementów, który należy zrozumieć, jest port szeregowy i jego rola w programowaniu i debugowaniu. To właśnie za jego pomocą “rozmawiamy” z Arduino – możemy do niego wysyłać polecenia, a ono potrafi nam odpowiedzieć. Port szeregowy umożliwia przesyłanie danych do i z płytki, co otwiera przed nami możliwość interakcji w czasie rzeczywistym. Jest to szczególnie przydatne, gdy chcemy wysyłać dane diagnostyczne lub sprawdzać informacje o stanie programu. Wszystko to jest widoczne w Monitorze Portu Szeregowego w Arduino IDE, który pełni rolę naszego okna komunikacyjnego z płytką.

Aby skorzystać z portu szeregowego w Arduino, kluczowym krokiem jest umieszczenie funkcji Serial.begin() w sekcji setup() swojego programu. Funkcja ta może być umieszczona w dowolnym miejscu w sekcji setup, ale musi zostać wywołana przed wysyłaniem lub odbieraniem jakichkolwiek danych przez port szeregowy, aby transmisja przebiegła prawidłowo. Umieszczamy ją w sekcji setup, ponieważ wystarczy ją wywołać tylko raz na początku programu, aby zainicjować komunikację szeregową.

Funkcja Serial.begin() inicjuje komunikację szeregową, ustalając prędkość transmisji danych w bitach na sekundę (bps). Prędkość tę podajemy w nawiasie, określając szybkość komunikacji. Najczęściej używaną wartością jest 9600 bps, co zapisujemy jako Serial.begin(9600), ale w zależności od potrzeb projektu można wybrać inne prędkości, na przykład: 4800 bps, 19200 bps lub 115200 bps.

W tym kursie, stosowanie prędkości 9600 bps jest w pełni wystarczająca do szybkiej i stabilnej komunikacji z Arduino. Funkcję Serial.begin(9600) wstawimy tak jak w poniższym przykładowym kodzie Kod_001:

Kod_001


Używając rzeczywistej płytki Arduino, musimy upewnić się, że prędkość transmisji ustawiona w Monitorze Portu Szeregowego w Arduino IDE jest taka sama, jak ta zdefiniowana w funkcji Serial.begin() w kodzie. . Aby sprawdzić lub ustawić odpowiednią prędkość komunikacji szeregowej, kliknij ikonę przypominającą lupę w prawym górnym rogu aplikacji Arduino IDE – Rys.1.

Rysunek przedstawia okno programu Arduino IDE w wersji 2.3.3 z domyślnym kodem wyświetlanym po uruchomieniu aplikacji. W edytorze widoczne są funkcje setup() oraz loop(). Funkcja setup() zawiera polecenie inicjalizujące połączenie szeregowe z prędkością 9600 bps za pomocą Serial.begin(9600);, natomiast loop() pozostaje puste, umożliwiając użytkownikowi dodanie własnego kodu.

W prawym górnym rogu interfejsu widoczna jest ikona monitora portu szeregowego, która została wyróżniona czerwoną strzałką. Żółty tekst informuje użytkownika: „Klikamy tę ikonę, aby ustawić odpowiednią prędkość komunikacji szeregowej”.

Czerwona strzałka oraz żółty tekst zostały dodane ręcznie i nie są częścią oryginalnego zrzutu ekranu. Wszystkie pozostałe elementy, takie jak edytor kodu, pasek narzędzi po lewej stronie oraz interfejs monitora portu szeregowego, stanowią integralną część programu Arduino IDE.
Rys.1. Okno programu Arduino IDE – konfiguracja prędkości transmisji szeregowej.


Po kliknięciu ikony lupki w prawym górnym rogu aplikacji Arduino IDE, na dole ekranu pojawi się pasek oznaczony jako “Monitor portu szeregowego” (Rys.2). To tutaj odbywa się podgląd i konfiguracja parametrów komunikacji szeregowej. Po prawej stronie tego paska znajduje się rozwijana lista z różnymi prędkościami transmisji danych. Wystarczy ją kliknąć, aby wybrać odpowiednią wartość.

Rysunek przedstawia okno programu Arduino IDE w wersji 2.3.3 z otwartym monitorem portu szeregowego w dolnej części interfejsu. W edytorze kodu widoczny jest domyślny program, zawierający funkcje setup() oraz loop(). W setup() znajduje się polecenie Serial.begin(9600);, które inicjalizuje połączenie szeregowe z prędkością 9600 bps, natomiast loop() jest pustą funkcją, pozostawiając miejsce na wprowadzenie własnego kodu przez użytkownika.

W prawym dolnym rogu sekcji monitora portu szeregowego znajduje się rozwijana lista umożliwiająca wybór prędkości transmisji danych. Lista ta jest wyróżniona czerwoną strzałką, a żółty tekst wyjaśnia: „Tutaj wybieramy prędkość transmisji dla monitora portu szeregowego (rozwijana lista)”.

Czerwona strzałka i żółty tekst zostały dodane ręcznie w celu zwrócenia uwagi na kluczową funkcję ustawiania prędkości transmisji w monitorze portu szeregowego. Wszystkie pozostałe elementy widoczne na rysunku są integralną częścią programu Arduino IDE.
Rys.2. Okno programu Arduino IDE – widok Monitora portu szeregowego.

Na Rys.2 widzimy, że prędkość transmisji została ustawiona na 9600 baud. Jest to zgodne z wcześniej zdefiniowaną wartością w kodzie programu Kodz_001, gdzie w funkcji Serial.begin(9600); zainicjowano komunikację szeregową właśnie z taką prędkością. Dzięki temu komunikacja między Arduino a komputerem będzie działała prawidłowo.

Gdyby jednak prędkość ta była inna niż zdefiniowana w funkcji Serial.begin(), można łatwo ją dostosować. Klikając rozwijaną listę w Monitorze Portu Szeregowego, pojawi się zestaw dostępnych prędkości transmisji – tak jak pokazano na Rys. 3. Wystarczy wybrać tę, która odpowiada wartości użytej w kodzie programu. Na przykład, jeśli w kodzie ustawiono Serial.begin(19200);, należy wybrać z listy prędkość 19200 baud, aby transmisja danych działała poprawnie.

Rysunek przedstawia okno programu Arduino IDE w wersji 2.3.3 z otwartym monitorem portu szeregowego w dolnej części interfejsu. W centralnej części widoczny jest edytor kodu z domyślnym programem, zawierającym funkcje setup() i loop(). W setup() znajduje się polecenie Serial.begin(9600);, które inicjalizuje połączenie szeregowe z prędkością 9600 bps, natomiast funkcja loop() pozostaje pusta, umożliwiając dodanie własnego kodu przez użytkownika.

W prawym dolnym rogu sekcji monitora portu szeregowego widoczna jest rozwijana lista dostępnych prędkości transmisji. Lista ta została rozwinięta i prezentuje różne wartości, takie jak 2400, 4800, 9600, 19200 oraz 31250 baud. Czerwona strzałka oraz żółty tekst „Wybieramy z listy odpowiednią prędkość transmisji dla monitora portu szeregowego” wskazują na funkcjonalność tej listy.

Czerwona strzałka i żółty tekst zostały dodane ręcznie w celu wyróżnienia kluczowego elementu interfejsu. Pozostałe elementy widoczne na rysunku, takie jak monitor portu szeregowego, pasek narzędzi oraz edytor kodu, są częścią oryginalnego interfejsu programu Arduino IDE.
Rys. 3. Okno programu Arduino IDE – wybór prędkości transmisji w Monitorze portu szeregowego.


Następnie, zgodnie z powyższą instrukcją, możesz użyć funkcji Serial.print() i Serial.println() w sekcji setup lub loop, pod warunkiem, że są umieszczone po wywołaniu Serial.begin(). Te funkcje pozwalają na wysyłanie tekstowych wiadomości z Arduino do Monitora Portu Szeregowego w Arduino IDE.

Różnica między tymi dwiema funkcjami polega na tym, że Serial.println() dodaje nową linię po każdym wysłanym komunikacie, co czyni dane bardziej czytelnymi, szczególnie gdy wysyłasz wiele komunikatów jeden po drugim. Z kolei Serial.print() wyświetla tekst w tej samej linii, co jest przydatne w sytuacjach, gdy chcesz zbudować jedną spójną wiadomość składającą się z kilku części.

Najprostszy przykład użycia portu szeregowego w Arduino, który wyświetla tekst “Witaj, świecie!” w Monitorze Portu Szeregowego, przedstawia poniższy kod – Kod_002. Treść wiadomości, którą chcemy wysłać, umieszczamy wewnątrz cudzysłowów w funkcji Serial.println():

Kod_002

W tym przykładzie linia: Serial.println(“Witaj, świecie!”); to miejsce, gdzie wpisujemy tekst, który ma zostać wyświetlony w Monitorze Portu Szeregowego.

Ponieważ ta komenda znajduje się w funkcji setup(), tekst zostanie wysłany do Monitora Portu Szeregowego tylko raz – w momencie uruchomienia programu na płytce Arduino.

Po wgraniu tego programu na płytkę Arduino i otwarciu Monitora Portu Szeregowego w Arduino IDE, w dolnym prawym rogu okna Monitora zobaczysz napis “Witaj, świecie!”. Jeśli używasz symulatora na komputerze, ta wiadomość pojawi się w sekcji Monitora Portu Szeregowego – tak jak pokazano to na Rys.4.

Sprawdźcie sami i zobaczcie, jak działa podstawowa komunikacja przez port szeregowy!

Rysunek przedstawia okno programu Arduino IDE w wersji 2.3.3 z uruchomionym kodem, który wysyła wiadomość do Monitora Portu Szeregowego. W centralnej części widoczny jest edytor kodu, w którym funkcja setup() zawiera dwie linie: Serial.begin(9600); inicjalizującą komunikację szeregową z prędkością 9600 bps oraz Serial.println("Witaj, świecie!");, wysyłającą tekst „Witaj, świecie!” do monitora portu szeregowego. Funkcja loop() pozostaje pusta, co oznacza brak cyklicznego działania w tym przykładzie.

W dolnej części interfejsu otwarty jest Monitor Portu Szeregowego, w którym widoczna jest odebrana wiadomość „Witaj, świecie!”. Tekst ten został wyróżniony czerwoną strzałką, a żółty opis wyjaśnia: „Odebrana wiadomość w Monitorze Portu Szeregowego”.

Czerwona strzałka i żółty tekst zostały dodane ręcznie w celu podkreślenia wyniku działania programu. Wszystkie pozostałe elementy interfejsu, takie jak pasek narzędzi, edytor kodu oraz Monitor Portu Szeregowego, są integralną częścią oryginalnego programu Arduino IDE.
Rys. 4. Okno programu Arduino IDE – wiadomość “Witaj Świecie” odebrana na Monitorze portu szeregowego.

Uwaga: W tym przykładzie użyto polskiego znaku “ś” w słowie “Witaj, świecie!”. Choć w powyższym przykładzie znak “ś” wyświetla się prawidłowo, zaleca się unikanie stosowania polskich znaków diakrytycznych w komunikacji szeregowej. Może to prowadzić do problemów z wyświetlaniem lub interpretacją danych, zwłaszcza w przypadku różnych ustawień kodowania znaków na komputerze lub w innych narzędziach. Aby uniknąć takich problemów, można zapisać tekst jako “Witaj, swiecie!”, bez polskich znaków.


Gdy w Monitorze Portu Szeregowego pojawi się komunikat taki jak na Rys.5:

“Nie podłączono. Wybierz płytkę i port do automatycznego podłączenia.”,

należy sprawdzić, czy nie zapomnieliśmy podłączyć płytkę Arduino, a także upewnić się, czy wybraliśmy właściwą płytkę z listy płytek oraz odpowiedni numer portu szeregowego.

Rysunek przedstawia okno programu Arduino IDE w wersji 2.3.3 z kodem inicjalizującym komunikację szeregową. W edytorze kodu widoczna jest funkcja setup() zawierająca linie Serial.begin(9600);, która inicjalizuje połączenie szeregowe z prędkością 9600 bps, oraz Serial.println("Witaj, świecie!");, która wysyła wiadomość „Witaj, świecie!” do monitora portu szeregowego. Funkcja loop() pozostaje pusta, co oznacza brak cyklicznego działania w tym przykładzie.

W dolnej części interfejsu otwarty jest Monitor Portu Szeregowego, który wyświetla komunikat na żółtym tle: „Nie podłączono. Wybierz płytkę i port do automatycznego podłączenia.”. 

Wszystkie elementy widoczne na rysunku są integralną częścią interfejsu programu Arduino IDE, a komunikat na żółtym tle został automatycznie wygenerowany przez Arduino IDE w celu poinformowania użytkownika o braku połączenia z urządzeniem.
Rys. 5. Okno programu Arduino IDE – informacja o niepodłączonej płytce Arduino.

W przypadku dalszych problemów z uruchomieniem portu szeregowego, warto sprawdzić, czy płytka Arduino jest widoczna w Menedżerze urządzeń w systemie Windows (jeśli korzystamy z tego systemu).

Szczegółowe instrukcje dotyczące uruchamiania płytki Arduino można znaleźć w instrukcji z linku: Instrukcja uruchomienia płytki Arduino.




Port szeregowy w symulacjach


Powyżej poznaliście już, jak przesyłać komunikaty przez port szeregowy na rzeczywistym Arduino. Teraz pokażemy, jak zrobić to samo w symulatorze.

Poniżej zamieszczono symulację (Symulacja_1), która pokazuje, jak przesyłać komunikaty przez port szeregowy w środowisku symulacyjnym. W przedstawionym kodzie Arduino inicjalizujemy komunikację szeregową z prędkością 9600 bps w funkcji setup() i wysyłamy komunikat “Witaj, swiecie!” do monitora portu szeregowego.

Tym razem zrezygnowano z użycia polskiego znaku ś w komunikacie “Witaj swiecie“, ponieważ ten symulator nie obsługuje polskich znaków. Dzięki temu komunikat jest poprawnie wyświetlany. Pętla loop() pozostaje pusta, ponieważ w tym przykładzie nie wykonujemy żadnych dodatkowych operacji.

Warto podkreślić, że w tym prostym symulatorze prędkość transmisji (np. 9600 bps) nie ma znaczenia. Symulator ignoruje ustawienia prędkości i przesyła dane niezależnie od tych parametrów, co upraszcza proces testowania kodu.

Kod do symulacji:

Symulacja_1

Możesz uruchomić powyższy kod, wciskając przycisk Start w symulatorze, Monitor portu szeregowego wyświetli komunikat: “Witaj, swiecie!“. Dzięki temu możesz zweryfikować poprawność działania kodu i komunikacji szeregowej w symulowanym środowisku. Sprawdź:)

Wynik działania symulacji powinien wyglądać tak jak na rysunku poniżej (Rys.6):

Rysunek przedstawia wyjście monitora portu szeregowego w symulatorze Arduino. Na czarnym tle widoczny jest tekst „Witaj, świecie!”, który został odebrany przez monitor portu szeregowego. Tekst ten jest wynikiem działania programu wysyłającego wiadomość przez port szeregowy.

Wyróżniono odebrany tekst czerwoną ramką i strzałką, a żółty opis dodany poniżej informuje: „Odebrana wiadomość na monitorze portu szeregowego (symulator Arduino)”. Czerwona ramka, strzałka i żółty opis zostały dodane ręcznie, aby podkreślić i wyjaśnić kluczowy element widoczny na ekranie. Wszystkie pozostałe elementy są składnikami symulatora Arduino na stronie arduinowo.pl.
Rys.6. Wiadomość “Witaj Świecie” odebrana na Monitorze portu szeregowego symulatora Arduino.



Symulator Wokwi

Symulacja w Wokwi: Symulacja portu szeregowego na stronie Wokwi pozwala na praktykowanie tych samych technik debugowania i komunikacji, co z prawdziwym urządzeniem.

Poniżej znajduje się link do symulacji Wokwi, w której wykorzystano ten sam kod programu co w Symulacia_1.

https://wokwi.com/projects/416246042174230529

Rysunek przedstawia symulator Arduino na platformie Wokwi, wyświetlany na urządzeniu mobilnym. Na ekranie widoczna jest płytka Arduino UNO z włączonym zielonym wskaźnikiem zasilania (LED ON). W górnej części symulatora znajduje się pasek narzędzi z przyciskami sterującymi symulacją, takimi jak start, pauza i reset, a także licznik czasu symulacji i wskaźnik wydajności procesora (99%).

W dolnej części widoczny jest monitor portu szeregowego, na którym odebrano wiadomość „Witaj, świecie!”. Tekst ten został wyróżniony czerwoną ramką i strzałką, a żółty opis informuje: „Odebrana wiadomość na monitorze portu szeregowego (symulator Arduino)”.

Czerwona ramka, strzałka oraz żółty opis zostały dodane ręcznie w celu podkreślenia komunikatu na monitorze portu szeregowego. Pozostałe elementy, takie jak płytka Arduino i interfejs symulatora, są integralną częścią środowiska Wokwi.
Rys.7. Okno programu symulatora Wokwi na urządzeniu mobilnym – wiadomość odebrana na monitorze portu szeregowego.

Podobnie jak w poprzednim przypadku, po uruchomieniu programu, monitor portu szeregowego wyświetli komunikat “Witaj, swiecie!” (Rys.7), widoczny w polu poniżej widoku płytki Arduino (prędkość transmisji również i tu nie ma znaczenia).




Asystent Arduinowo_AI

Asystent Arduinowo_AI zgłębił powyższy zakres wiedzy i z przyjemnością wszystko Ci wyjaśni.





Zdobądź więcej wiedzy!

Przejdź do kolejnych materiałów naszego kursu: Zmienne i wartości.