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:
1 2 3 4 5 6 7 8 |
void setup() { Serial.begin(9600); } void loop() { // put your main code here, to run repeatedly } |
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.
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ść.
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.
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():
1 2 3 4 5 6 7 8 9 10 |
void setup() { Serial.begin(9600); // Inicjalizacja komunikacji szeregowej z prędkością 9600 bps Serial.println("Witaj, świecie!"); // Wysłanie tekstu do Monitora Portu Szeregowego } void loop() { // W tym przykładzie pętla loop pozostaje pusta } |
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!
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.
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:
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):
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
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.